From 80772462dab6ae225703fd91a86bb612a8e41bee Mon Sep 17 00:00:00 2001 From: TiynGER Date: Sat, 15 May 2021 02:33:21 +0200 Subject: [PATCH] documentation: updated the readme documentation The readme was partly outdated. I decided not to put in depth documentation into the readme. Additionally i added missing docstrings into posMoveDB --- .gitignore | 2 +- README.md | 36 +++++++++++++++++++++--------------- src/engine/posMoveDB.nim | 4 ++++ 3 files changed, 26 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 898637f..ddc0a5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ *.db bin -docs +htmldocs pgn secret.nim diff --git a/README.md b/README.md index c599d76..a090765 100644 --- a/README.md +++ b/README.md @@ -4,29 +4,35 @@ ychess is a chess implementation and engine written in nim. -## Usage +## Quick Setup -To play chess in the commandline simply download the code and run `nim c -r game.nim`. +To play chess in the commandline simply download the code (or clone the +repository) and run `nim c -r game.nim`. You can either play the 1v1 hotseat mode or a single player mode vs the engine. -### Lichess - -ychess uses the lichess api with the python plugin [berserk](https://github.com/rhgrant10/berserk). -An instance of the engine occasionally plays on [lichess](https://lichess.org/@/tiyn-ychess). +Additionally ychess uses the lichess api to make playing more convenient. +An instance of the engine occasionally plays on +[lichess](https://lichess.org/@/tiyn-ychess). To get into the whitelist just write a ingame message to the account. -## Testing +## Project Structure -Testing is done by `einheit` by [jyapayne](https://github.com/jyapayne/einheit). -All legal chess moves are implemented in `chess.nim` and tested by the TestSuite -in `test.nim`. -You can simply run the tests with `nim c -r test.nim`. +- `art` - contains pictures and arts not used in the code. +- `bin` - is not pushed to the git repository but contains all binaries and will +be created if you compile a program. +- `htmldocs` - is not pushed to the git repository but contains all +automatically generated documentation. +- `src` - is the root folder for all programs except tests. +- `tests` - contains all tests. -## Documentation +### Documentation Documentation is written into the code via DocGen. For this reason it is not saved in this repository. -To extract it into html run `nim doc --project --index:on --outdir:docs game.nim` +To extract it into html (assuming you want the documentation for `game.nim`) +run `nim doc --project --index:on --outdir:htmldocs game.nim`. + +## General Design Choices ### Moves @@ -44,5 +50,5 @@ The engine uses a simple implementation of the [NegaMax](https://www.chessprogramming.org/NegaMax)-algorithm with [Alpha-Beta-Pruning](https://www.chessprogramming.org/Alpha-Beta#Negamax_Framework). For the evaluation function each piece has a corresponding value. -Additionally there are [piece-square tables](https://www.chessprogramming.org/Piece-Square_Tables) -to encurage putting pieces on active squares. +Additionally [piece-square tables](https://www.chessprogramming.org/Piece-Square_Tables) +are used. diff --git a/src/engine/posMoveDB.nim b/src/engine/posMoveDB.nim index 69658f8..5d85b00 100644 --- a/src/engine/posMoveDB.nim +++ b/src/engine/posMoveDB.nim @@ -15,6 +15,7 @@ let dbName = "" let tableName = "posmoves" proc initDB*(): void = + ## Initialize the database with a table if it doesnt currently exist. let db = open(dbConn, dbUser, dbPasswd, dbName) db.exec(sql"""CREATE TABLE IF NOT EXISTS ? ( fen VARCHAR(100) NOT NULL, @@ -30,6 +31,9 @@ proc initDB*(): void = proc storeMove*(fen: string, move: string, white: bool, black: bool, draw: bool, rating: int): void = + ## Store a possible `move` done by a player with `rating` (0 for unknown) + ## in a position described by `fen`. + ## The result of the game is described by `white`, `black` and `draw`. let db = open(dbConn, dbUser, dbPasswd, dbName) var query = """ INSERT INTO ? (fen, move, white, black, draw, rating)