DGS
Go Server with spherical fields and VR support
Install / Use
/learn @Dominux/DGSREADME
Dominux Go Server
The game of Go implementation with some brand new features.
</br> <p align="center"> <a href="https://github.com/Dominux/DGS/pulse"> <img src="https://img.shields.io/github/last-commit/Dominux/spherical-go?style=for-the-badge&logo=github&color=7dc4e4&logoColor=D9E0EE&labelColor=302D41"/> </a> <a href="https://github.com/Dominux/DGS/stargazers"> <img src="https://img.shields.io/github/stars/Dominux/spherical-go?style=for-the-badge&logo=apachespark&color=eebebe&logoColor=D9E0EE&labelColor=302D41"/> </a> </p>⚠️ NOTICE
I've shut down my server with a multiplayer version because it's just a side pet-project of mine like a POC and I don't have mental resources to maintain the server by being some kinda administrator. At this point, to still have access for people willing to try it as it is (a singleplayer version) I rolled back the previous Github Pages.
It's available here. All the next links, referencing to the multiplayer version, won't be working so keep in mind that you still can try to play with it in a singleplayer version by going to this Github Pages link.
:pinching_hand: TL/DR
The brand new features this server offers are rather UX ones and they neither break original rules nor add new ones in a game process. They contain at this moment:
- Various spherical game fields
- VR game mode
Without any other words, just try it right here, right now
</br> <p align="center"> <img width="900px" src="https://user-images.githubusercontent.com/55978340/213907265-1cab057a-2f3d-4a7d-8711-0ccd5242db20.png"/> <img width="900px" src="https://user-images.githubusercontent.com/55978340/226184667-62c1bbd1-9165-4074-84fe-fbaf5509e582.png"/> <img width="900px" src="https://user-images.githubusercontent.com/55978340/213906893-44c07cc1-dece-47a0-9874-30acd7be0d93.png"/> </p>Table of contents
:bulb: Idea and prerequesities
The idea of Go is to be abstract as much as possible
The Go game itself has a really long history, maybe not by rules changes, but by just it's time of existence. And all this time it was only material game until the computers epoch came and enthusiasts have created a lot of it's virtual implementations.
The Go gamefield is called goban. Originally it has a square shape, and looks absolutely the same as chess/checkers gameboard excluding that the last one has alternation of black and white squares (cells) when goban has white ones only.
Some Go virtual implementations support setting a custom grid size not only for both axis by a single parameter, but for each of them. With that possibility we can create not only square fields, but also rectangular ones.
The idea of the game is to be abstract as much as possible. In other words, any move should be independent as much as possible and give completely uncalculated game result. It's simply to take the life as a standard of the perfect abstractness: not determined moves and actions give people the same result every single time. It means in the life we don't have 100% working strategies you can take and use. In the life you should use your logical, abstract and critical thinking to increase your chances of getting a desired result. So, the idea of the Go is to be as much abstract as the life itself. With this idea Go already feels like you don't know where to go to win, especially for beginners.
Back to chess where players have a list of openings (debuts) those in a nutshell are just a sequence of moves. It also has multiple tactics, but obviously they are barely abstract. Nevertheless Go almost doesn't have such combinations. It has analog of chess openings - joseki. But each of them has a tree of possible moves, so memorizing them and practicing takes a lot of efforts compared to chess take-and-use openings. Also an impact of using joseki to get victory isn't even as big as of using chess openings. Moreover, their importance was ruined by Deep Learning bots.
But Go IMHO with it's original board has limitations of abstractness we can achieve from the game itself because of the board structure. Majority of points have whole 4 liberties as they are assumed to be. But the points of the edges have only 3 of them. The corner points have only 2 liberties. Seems really so far from the perfect abstractness doesn't it?! Moreover, the main process are built upon this strategic limitations: players start from corners, then extend their influence on edges and further - on the center. Ofc often players play some unusual moves and ruin the default sequence, but following exactly this behavior in vast majority of cases brings victories. And it doesn't seem to be abstract enough for us, right?
So, I've come up with the idea of using a spherical board as a solution of the problems that cause those limitations. The main point of replacing a square/rectangular boards with spherical ones are that spherical boards don't have this limitations because they simply don't have edges and corners. And the idea was following me all the years I'd played the original Go until I became able to finally implement it by using low-level programming language, such as Rust.
:paintbrush: Spherical fields design
It's logically that any perfect sphere has the same shape. The idea is to find spherical wireframe that suits us best
Using points with original amount of 4 liberties seem to be the best because it's not so less, and not too many. With less liberties stones are less safe and more easy to be eaten so players should play more safe and in the case of more liberties stones will be almost impossible to kill: players will be less carefully about their stones. So, with that limit of liberties we can immedietelly deny using such spheres as icospheres, dodecahedron, truncated icosahedron and others with faces which primarily don't have 4 vertices.
I'm not a geometry expert, but found only 3 of the next spheres those primarily have faces with 4 vertives:
UV-sphere
UV-sphere looks like the first sphere we should have think of when it comes to spheres and so it is. It has only perfect rectangules in it and seem to be the best at first sight.
But it has poles and each of them is represented as a point. And that point has some immortality lvl we might only dream of. They have liberties amount equaled to the grid size, and it should be more than 4 in almost all the possible cases! Also such point will impact on all the stones bound to it since they have this point as their liberty.
We can ofc remove it or make the point itself disable to put stones on, but with that'll get edges. Edges we wanted to get rid of! Actually this will be like we just took a rectangular board and bent it to connect one edge with it's opposite. But other 2 edges left unconnected.
So this sphere is definitelly better then the original rectangular field, but in compare with the next ones it seems like it's only on halfway to our goal.
<p> <img src="/docs/images/uv_sphere_side.jpg" width="400" /> <img src="/docs/images/uv_sphere_pole.jpg" width="400" /> </p> <br/>Quad sphere
Quad sphere already looks in times better since it doesn't have such rudiments like edges. Bruh...
But it has it's cons too: since the quad sphere originally is just a cube which faces and edges were separated by lines in several times, it still has it's original 8 vertices. The problem is that these vertives have only 3 liberties.
But that seems to be all. Only 8 vertices with 3 liberties, and others - with 4, like we wanted.
<img src="/docs/images/quad_sphere.png" width="600" /> <br/>Grid sphere
Grid sphere - is a sphere, I haven't found the real name and images for. I bet they exist.
Nevertheless initially I named this sphere as "Axis sphere" cause it has stripes on all it's axis (X, Y and Z), and the stripes are paralleled to each other and their axis. But when I was looking for a way to implement this wireframe and was looking for a help in BabylonJS forum it turned that BabylonJS already has this wireframe as pre-built material called "Grid Material".
This sphere actually has a similar wireframe to the previous quad sphere even if it doesn't look like that at first sight. The only differencies are in that the quad sphere's stripes aren't paralleled to each other, and that fact doesn't matter to the field parameters we care of, and also it doesn't have the cube vertices, and that fact really matters.
So, right now it looks like improved, next version of the almost perfect quad sphere so it should be the best, right?!
Actually as a field we want it's really the best in the whole list. But unfortunetely it has it's bit of unperfection too: it doesn't
