GoChess is a set of chess variants played on a normal chessboard, with the addition of a few varying rules such as:
- Board starts empty
- Players can place pieces on their turn instead of moving
- Placing can be limited trought the game, for example with each player having only 10 placements, only being able to place on the first 5 turns, etc.
- Normal chess rules apply otherwise, including check and checkmate
- Some exceptions are still in the works such as limit to pawn placements, catling conditins, placing kings first / last, etc.
- A huge number of variants can be created by combining these rules in different ways, so the possibilities are huge
The aim of this repo is to create a simple and flexible engine that can handle the different rulesets, on-demand creation of variants while no main variants emerge, and to provide a simple interface for playing the game.
Note
GoChess is a work in progress. After the main engine is complete, the plan is to create an interface and develop a web app for playing the game online.
For now, the usage is limited to CLI tests since the basic logic is still being developed.
Clone the repo and run the CLI with python3 backend/cli.py
.
├── backend
│ ├── src
│ │ ├── domain
│ │ │ ├── entities
│ │ │ ├── exceptions
│ │ │ ├── services
│ │ │ └── value_objects
│ │ └── infrastructure
│ └── tests
│ ├── integration
│ └── unit
└── frontend
Contributions are welcome! Please fork the repository and submit a pull request with your changes, or if you are interested and want to participate more actively, email me. Also, if you want to "playtest", text me and we can try somehow to play a game!
-
domain entities
-
values / types
-
Piece movement logic
-
special moves logic:
- Castling
- En passant
- Promotion
-
correct testing for:
- board
- pieces
- positions
- game state changes, etc
- integtration (evolution of state and board trouch engine moves)
- validators
-
piece Placement logic
-
movement validators?
-
placement validators
-
validators for checks, checkmates, stalemates, promotion, captures
-
basic game builer:
- specify state
- specify board with pieces, etc
- specify ruleset (and therefore validators to use) (or meybe this is more advanced?)
- empty board setup
- standard chess
-
Ruleset configuration system
-
CLI for testing
-
More unit tests
-
logging games using algebraic notation
-
time system and clocks
- develop s simple gui
- get api working on localhost
- Web app for playing online