A UCI chess engine written in C++20.
This project is somewhat a hobby, it will serve to learn the ropes of chess programming. I also play chess, very humbly; and I was always curious of how the programs work.
I began some years ago, but without time, it never went far. I had only a move generator, a alpha-beta search, and that's almost all. I have now enough time to spend on the program. By luck, reading the forums, I discovered Vice, and the videos. Thay are great, and very instructive. So well, Im following the lessons, and Zangdar came to life. I found also the site from Bruce Moreland that explain a lot of things.
Why Zangdar ? Well look for the Naheulbeuk dungeon !!
I would like to thank specially the authors of Vice, TSCP, Gerbil. They helped me a lot understand several aspects of programmation. I also use the M42 library for generating attacks; and took inspiration from the Libchess library.
At present, Zangdar can play honestly. I done several matches, and I think Zangdar comes near 3000. I would never hoped to come this far. It has the following features :
-
Language
- Written in C++20
-
Board
- Magic Bitboard
-
Search
- Aspiration Window
- Iterative Deepening
- Alpha-Beta , Fail Soft
- Quiescence
- MVVVLA
- Killer Heuristic
- Transposition Table, with 4 buckets
- Null Move
- Late Move Pruning
- Razoring
- Internal Iterative Deepening
-
Parallel
- can use several threads
-
Evaluation
- Static Exchange Evaluation, only for Quiescence
- Material
- Piece/Square Table
- Positional bonus
- Mobility
-
Syzygy Tables
- Can use of endgame tables, but need a SSD to work correctly
-
Opening Book
- Although a book may be provided by the interface, it is possible to specify your own book.
-
Communication
- UCI
- Options to change OpeningBook usage, OpeningBook location, Hash size, Threads number
-
Usage
- The program is only an engine, so it need one interface (Arena, Banksgui...).
- I provide only binaries for Windows. I stopped developping with Linux, as this crush my windows boot. All are compiled in static, so you don't need extrernal libraries. By default, the opening book is disabled. It can be re-enabled by using an uci option. Zangdar will search the book in the binary's directory. This location can too be specified with an uci option. The book is of polyglot format, and must be named 'book.bin'.
-
Compilation You must have a C++ compiler that use at least C++20. I use QtCreator on Windows 11, that compiles with mingw. I provide also binaries for several architectures.
-
Old Releases As I was very ignorant of git, the first repositery was extremely bad done. So I decided to redo it, and uses git tools. But the ancient one is still here, named Zangdar_0.