2024-03-25 22:41:17 +01:00
2024-03-24 16:53:44 +01:00
2023-12-10 22:42:56 +01:00
2024-03-24 16:53:44 +01:00
2024-03-23 20:39:12 +01:00
2024-03-20 22:13:11 +01:00
2023-12-10 22:42:56 +01:00
2024-03-20 22:13:11 +01:00
2023-12-10 22:42:56 +01:00
2024-03-25 22:41:17 +01:00

Chess

A chess engine with focus on fast move generation.

Building

The following dependencies are used for the GUI:

  • gtk 4
  • librsvg (for loading the piece images)

The engine can be built with cmake.

cmake .
make

If you do not use make, replace it with ninja for example. The build script contains multiple targets:

  • chess: This is the main target. It has a GUI and the user plays as white. The engine responds with a move for black.
  • chessNoComputer: The user can play both sides in a GUI. Mainly added for testing the move generator.
  • findMagicNumber: finds Magic Numbers for the magic bitboard.
  • moveGenTest: tests the move generator

Testing

The target moveGenTest with its source in the test directory is a perft. It works by counting the number of leaf nodes of the move generation with a certain depth. The results where verified with stockfish.

Implementation

The engine is implemented using bitboards to store the position. A bitboard is an array of 64-Bit unsigned integers. The bitboard contains one element per piece and square. Each Bit of the integer corresponds to one field on the board, whether the piece stands there (1) or not (0). This allows use to use bitwise operations to calculate information we need, really fast.

The move generation of pseudo-legal moves (moves without considering whether the king is in check) is mostly straightforward. We pre-generate some data in src/generateCode/moveConsts.c, so that we can calculate the moves faster.

sources

https://www.chessprogramming.org/Magic_Bitboards https://www.chessprogramming.org/Looking_for_Magics

Description
A chess engine
Readme 973 KiB
Languages
C 97%
CMake 3%