HEAD
gambit
A chess engine written in Scala 3, built with scala-cli.
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 —
0x88mailbox 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
perftnode 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
golimit 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
# 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
scala-cli test .
Tests use 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 inproject.scala)
Languages
Scala
100%