Estou escrevendo um mecanismo de xadrez C ++ e estou procurando números mágicos para as placas de bitmap Little-Endian Rank-File Mapping para gerar movimentos para peças deslizantes.
O site rival do xadrez fornece números mágicos, mas não para o mesmo mapeamento do tabuleiro.
O wiki de programação de xadrez fornece alguns dos melhores números mágicos até agora, mas não é exaustivo.
No final, estou procurando quatro coisas:
- máscara de ocupação para cada quadrado
- número mágico para cada quadrado
- mudanças mágicas para cada quadrado
- move a matriz do banco de dados para cada quadrado
Para que eu possa usar o código a seguir para encontrar os movimentos da torre no C3 (por exemplo):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces