Sto scrivendo un motore di scacchi in C ++ e sto cercando numeri magici per bitboard di mappatura dei file di classifica di Little Endian per generare mosse per pezzi scorrevoli.
Il sito Web degli scacchi rivali fornisce numeri magici ma non per la stessa mappatura della scacchiera.
Il wiki di programmazione degli scacchi fornisce finora alcuni dei migliori numeri magici ma non è esaustivo.
Alla fine cerco quattro cose:
- maschera di occupazione per ogni piazza
- numero magico per ogni quadrato
- turni magici per ogni quadrato
- sposta l'array di database per ogni quadrato
Quindi posso usare il seguente codice per trovare le mosse di Rook su C3 (per esempio):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces