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
engines
software
programming
Romain
quelle
quelle
Antworten:
Dies ist ein sehr bekanntes Problem bei der Schachprogrammierung. Sie sollten die von Pradyumna Kannan generierten Zahlen verwenden. Dr. Kannan hatte freundlicherweise Open Source für die magischen Zahlen produziert. Es wird von Crafty und einigen anderen Schach-Engines verwendet, einschließlich meiner eigenen.
Sie können mehr von Google "Crafty Magic Number" lesen.
Ich habe eine ZIP - Datei für Sie vorbereitet hier . Dies sind die gleichen Dateien, die in der SmallChess Chess Engine App verwendet werden. Bitte lesen Sie die Dokumentation. Grundsätzlich müssen Sie Rmagic (Quadrat, Belegung) für Türme und Bmagic (Quadrat, Belegung) für Bischöfe nennen. Sie können diese in eine Königinmaske XOR.
quelle