diff --git a/README.md b/README.md new file mode 100644 index 0000000..d2c5ddb --- /dev/null +++ b/README.md @@ -0,0 +1,63 @@ +# Zeal +**Zeal** is a UCI-compliant chess engine written in Rust. I began writing Zeal as a side project while learning Rust. Beating a top engine like Stockfish felt like a long journey, so it seemed fitting to pair that challenge with learning Rust. Zeal is now nearing its first release, though it's still far from its ultimate goal. + +## Running and building Zeal +### Play on Lichess +[lichess]() - TODO + +### Run locally +``` +git clone https://github.com/stefiosif/zeal.git +cargo run -- --mode uci +``` + +### Run on Cutechess GUI (Windows) +``` +git clone https://github.com/stefiosif/zeal.git +cd scripts +./build_windows_bat.sh +``` +After building, find the executable in target/x86_64-pc-windows-gnu/release. Use zeal.bat to add Zeal to the Cutechess GUI. + +## Core +### Board Representation +- Bitboards +- Redundant Mailbox for piece-square look ups +### Move Generation +- Pseudo-legal move generation +- Magic bitboards for sliding pieces +- Make/Unmake instead of Copy/Make +### Communication Protocol +- UCI +### Search +- Negamax +- Alpha Beta +- Quiescence +- Move ordering (MVV LVA) +### Evaluation +- Material evaluation +- Piece-Square table evaluation + +## Next features +- [ ] Iterative deepening +- [ ] Principal Variation +- [ ] Zorbist hashing +- [ ] Transposition tables +- [ ] ... + +## Rating +There's no ratings yet for Zeal. + +## Acknowledgements +Huge thanks to CodeMonkeyKing and his chess programming videos. His simplistic approach helped me understand the components that constitute a chess engine. Rustic's [roadmap](https://rustic-chess.org/introduction/roadmap.html) guided me in identifying which part of the engine to build next, while the book is an excellent resource for understanding various chess programming concepts. The [Chess Programming Wiki](https://www.chessprogramming.org/Main_Page) provides detailed information about all chess programming topics. Last but not least, I have been reading the code of various chess engines to take ideas, some of them are [bbc](https://github.com/maksimKorzh/bbc), [rustic](https://github.com/mvanthoor/rustic), [tcheran](https://github.com/jgilchrist/tcheran), [purple](https://github.com/JLErvin/purple) and [rush](https://github.com/lefebvreb/rush). + +Amazing tools: +- [Bitboard Calculator](https://gekomad.github.io/Cinnamon/BitboardCalculator/) +- [Lichess Editor](https://lichess.org/editor) +- [cutechess](https://github.com/cutechess/cutechess) +- [perftree](https://github.com/agausmann/perftree) + +Other resources: +- [The Fascinating Programming of a Chess Engine](https://youtu.be/w4FFX_otR-4?si=_Rt4wcJZsS2duMQM) +- [Coding Adventures: Making a Better Chess Bot](https://youtu.be/_vqlIPDR2TU?si=PKWe_Qu_CPGwIAwE) +- Writing a Chess Engine [Move Generation](https://www.josherv.in/2021/03/19/chess-1/) and [Move Selection](https://www.josherv.in/2022/12/17/chess-2/)