Estoy escribiendo un motor de ajedrez C ++ y estoy buscando números mágicos para bitboards Little-Endian Rank-File Mapping para generar movimientos para piezas deslizantes.
El sitio web rival de ajedrez da números mágicos pero no para el mismo mapeo de tablero.
El wiki de programación de ajedrez ofrece algunos de los mejores números mágicos hasta ahora, pero no es exhaustivo.
Al final estoy buscando cuatro cosas:
- máscara de ocupación para cada cuadrado
- número mágico para cada cuadrado
- cambios mágicos para cada cuadrado
- mueve la matriz de la base de datos para cada cuadrado
Entonces puedo usar el siguiente código para encontrar los movimientos de Rook en C3 (por ejemplo):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces