Saya sedang menulis mesin catur C ++ dan saya mencari angka ajaib untuk bitboard Little-Endian Rank-File Mapping untuk menghasilkan gerakan untuk potongan geser.
Catur rival situs memberikan nomor ajaib tetapi tidak untuk pemetaan papan yang sama.
Wiki pemrograman catur memberikan beberapa angka ajaib terbaik sejauh ini tetapi tidak lengkap.
Pada akhirnya saya mencari empat hal:
- topeng hunian untuk setiap kotak
- angka ajaib untuk setiap kotak
- pergeseran sihir untuk setiap kotak
- memindahkan array basis data untuk setiap kotak
Jadi saya bisa menggunakan kode berikut untuk menemukan gerakan Rook di C3 (misalnya):
bbBlockers = bbAllPieces & occupancyMaskRook[C3]
databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])
bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces