Ich schreibe eine C ++ - Schach- Engine und suche nach magischen Zahlen für Little-Endian Rank-File Mapping- Bitboards, um Moves für gleitende Figuren zu generieren.
Die rivalisierenden Schach Website gibt magische Zahlen , aber nicht für das gleiche Board - Mapping.
Das Schachprogrammier-Wiki bietet einige der besten magischen Zahlen, ist aber nicht erschöpfend.
Am Ende suche ich vier Dinge:
- Belegungsmaske für jedes Quadrat
- magische Zahl für jedes Quadrat
- Magie verschiebt sich für jedes Quadrat
- Verschiebt das Datenbankarray für jedes Quadrat
So kann ich den folgenden Code verwenden , um die Bewegungen des Turmes auf C3 zu finden (zum Beispiel):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces