docs: add project readme
This commit is contained in:
1 parent
a2a4039250
commit
156266a5bb
1 file changed
+65
@@ -0,0 +1,65 @@
|
||||
# gambit
|
||||
|
||||
A chess engine written in Scala 3, built with [scala-cli](https://scala-cli.virtuslab.org/).
|
||||
|
||||
## Overview
|
||||
|
||||
`gambit` is a from-scratch alpha-beta chess engine. It uses a `0x88`
|
||||
mailbox board representation, Zobrist hashing for transposition detection,
|
||||
and a principal-variation search with a full set of modern pruning and
|
||||
move-ordering heuristics. It speaks the UCI protocol and can also read and
|
||||
write SAN, PGN and EPD.
|
||||
|
||||
## Features
|
||||
|
||||
- **Board** — `0x88` mailbox representation with incremental Zobrist hashing.
|
||||
- **Move generation** — pseudo-legal and legal generation for all piece
|
||||
types, including castling, en passant and promotions, validated by a
|
||||
`perft` node counter.
|
||||
- **Evaluation** — tapered midgame/endgame evaluation with piece-square
|
||||
tables, pawn structure (passed, doubled, isolated), mobility, the bishop
|
||||
pair, rook file bonuses and king safety, plus a static exchange
|
||||
evaluation (SEE).
|
||||
- **Search** — iterative-deepening PVS with quiescence search, a
|
||||
transposition table, null-move pruning, reverse futility and razoring,
|
||||
late-move reductions, late-move pruning, killer moves and a history
|
||||
heuristic, with aspiration windows at the root.
|
||||
- **Time management** — UCI `go` limit parsing (clock, increment,
|
||||
`movestogo`, `movetime`, `depth`, `infinite`) with a per-move budget.
|
||||
- **Notation** — SAN formatting/parsing, PGN reading/writing, and EPD
|
||||
parsing with a test-suite runner (bundled Win at Chess positions).
|
||||
- **Self-play** — a game loop with draw adjudication (fifty-move,
|
||||
insufficient material, threefold repetition).
|
||||
|
||||
## Usage
|
||||
|
||||
```sh
|
||||
# UCI mode
|
||||
scala-cli run . -- uci
|
||||
|
||||
# self-play a game (maxPlies, depth)
|
||||
scala-cli run . -- selfplay 200 6
|
||||
|
||||
# perft / search on a position
|
||||
scala-cli run . -- <fen|startpos> <depth>
|
||||
|
||||
# run the EPD (Win at Chess) suite, N ms per position
|
||||
scala-cli run . -- epd 500
|
||||
```
|
||||
|
||||
Running with no arguments prints usage and a short perft/search demo.
|
||||
|
||||
## Tests
|
||||
|
||||
```sh
|
||||
scala-cli test .
|
||||
```
|
||||
|
||||
Tests use [munit](https://scalameta.org/munit/) and cover move generation
|
||||
and perft, make/unmake and hashing, evaluation and SEE, search heuristics,
|
||||
the transposition table, draw detection, SAN/PGN notation, time control and
|
||||
the UCI handler.
|
||||
|
||||
## Requirements
|
||||
|
||||
- scala-cli (Scala `3.8.4`, as pinned in `project.scala`)
|
||||
Reference in new issue
Block a user