0c6639a215c4ee132c062a999d2a22633d6b0fa7
Chess Engine in C — Project Goal
Build a clean, fast chess engine in C that starts from a FEN string and produces fully legal moves, verified via PERFT for correctness and speed.
Approach
- Correctness-first engine:
FEN → board → legal movegen → PERFT
FEN (Forsyth–Edwards Notation)
FEN is a single line string that describes a chess position. Format:
<pieces> <side> <castling> <en-passant> <halfmove> <fullmove>
- pieces: 8 ranks (8→1) separated by
/; letters for pieces (PNBRQK/pnbrqk), digits for empty squares. - side:
w(White) orb(Black) to move. - castling: any of
KQkqor-if none. - en-passant: target square after a two-step pawn move, or
-. - halfmove: moves since last pawn move/capture (50-move rule).
- fullmove: move number (starts at 1, increments after Black’s move).
Example (starting position)
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
- pieces: starting layout
- side:
w(White to move) - castling:
KQkq(both sides can castle both ways) - en-passant:
- - halfmove:
0 - fullmove:
1
Future Work
-
Incorporate algorithms and evaluation methods for chess positions to enable an AI player.
-
Build an API to facilitate chess games with the AI player over the web.
- Starting with a commandline client.
- Later building a web based client.
Chess Engine Programming & Information
- Chess Programming Wiki (CPW): https://www.chessprogramming.org/
- PERFT (definition & methodology): https://www.chessprogramming.org/Perft
- PERFT Results & test positions: https://www.chessprogramming.org/Perft_Results
- FEN reference: https://www.chessprogramming.org/Forsyth-Edwards_Notation
- Bitboards https://www.chessprogramming.org/Bitboards
Description
Languages
Python
53.6%
C
43.1%
Makefile
1.8%
Shell
1.5%