QBBEngine
[ A KTM Quad 990 ATV [1] QBBEngine,
a didactic UCI compliant open source chess engine by Fabio Gobbato, written in C and published as single source file along with Pedone, which apparently uses a similar representation [2]. The QBBEngine demonstrates the use of a compact quad-bitboard structure to represent the board, and further applies alpha-beta search and an evaluation based on static values and piece-square tables [3]. The program performs a color agnostic move generation by flipping the board each time in make move.
C Structure
/*
Board structure definition
PM,P0,P1,P2 are the 4 bitboards that contain the whole board
PM is the bitboard with the side to move pieces
P0,P1 and P2: with these bitboards you can obtain every type of pieces and every pieces combinations.
*/
typedef struct
{
TBB PM;
TBB P0;
TBB P1;
TBB P2;
uint8_t CastleFlags; /* ..sl..SL short long opponent SHORT LONG side to move */
uint8_t EnPassant; /* enpassant column, =8 if not set */
uint8_t Count50; /* 50 move rule counter */
uint8_t Rep; /* 0 if it's not a repetition, 1 if it is */
uint8_t STM; /* side to move */
} TBoard;
Piece Coding
The board-definition with vertical nibbles as piece or empty square codes, i.e. the initial position:
Square | |||||||||||||||||||
6 | |||||||||||||||||||
6 | |||||||||||||||||||
6 | |||||||||||||||||||
6 | |||||||||||||||||||
5 | |||||||||||||||||||
5 | |||||||||||||||||||
5 | |||||||||||||||||||
5 | |||||||||||||||||||
5 | |||||||||||||||||||
~ | |||||||||||||||||||
0 | |||||||||||||||||||
… | |||||||||||||||||||
0 | |||||||||||||||||||
3 | |||||||||||||||||||
2 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
9 | |||||||||||||||||||
8 | |||||||||||||||||||
7 | |||||||||||||||||||
6 | |||||||||||||||||||
5 | |||||||||||||||||||
~ | |||||||||||||||||||
8 | |||||||||||||||||||
7 | |||||||||||||||||||
6 | |||||||||||||||||||
5 | |||||||||||||||||||
4 | |||||||||||||||||||
3 | |||||||||||||||||||
2 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
Piece | |||||||||||||||||||
r | |||||||||||||||||||
n | |||||||||||||||||||
b | |||||||||||||||||||
k | |||||||||||||||||||
q | |||||||||||||||||||
b | |||||||||||||||||||
n | |||||||||||||||||||
r | |||||||||||||||||||
p | |||||||||||||||||||
~ | |||||||||||||||||||
P | |||||||||||||||||||
R | |||||||||||||||||||
N | |||||||||||||||||||
B | |||||||||||||||||||
K | |||||||||||||||||||
Q | |||||||||||||||||||
B | |||||||||||||||||||
N | |||||||||||||||||||
R | |||||||||||||||||||
PM | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
~ | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
Side to Move | |||||||||||||||||||
P0 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
~ | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
P | |||||||||||||||||||
. | |||||||||||||||||||
B | |||||||||||||||||||
. | |||||||||||||||||||
Q | |||||||||||||||||||
P1 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
~ | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
N | |||||||||||||||||||
B | |||||||||||||||||||
. | |||||||||||||||||||
K | |||||||||||||||||||
P2 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
~ | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
1 | |||||||||||||||||||
0 | |||||||||||||||||||
0 | |||||||||||||||||||
1 | |||||||||||||||||||
. | |||||||||||||||||||
. | |||||||||||||||||||
R | |||||||||||||||||||
Q | |||||||||||||||||||
K | |||||||||||||||||||
P2 RQK P1 NB K P0 P B Q PM side to move
1 . . 1 1 . . 1 . 1 1 . 1 1 1 . . . 1 1 . 1 . . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 . . 1 1 . . 1 . 1 1 . 1 1 1 . . . 1 1 . 1 . . 1 1 1 1 1 1 1 1
See also
External Links
References
- ↑ A KTM Quad 990 ATV, custom-made from E-ATV Eicker Germany, Basevehicle was a KTM Supermotobike, Typ SM 990 with LC8 engine, Image by Stefan Krause, February 20, 2011, Wikimedia Commons
- ↑ Pedone Chess Engine
- ↑ QBBEngine - a didactic engine
Prev
PythonchessNext
QCHESS