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
engines
software
programming
Romain
sumber
sumber
Jawaban:
Ini adalah masalah yang sangat terkenal dalam pemrograman catur. Anda harus mempertimbangkan untuk menggunakan angka yang dihasilkan oleh Pradyumna Kannan. Dr Kannan telah dengan baik hati memberikan open source angka ajaib. Ini digunakan oleh Crafty dan beberapa mesin catur lainnya termasuk milik saya.
Anda dapat membaca lebih lanjut dengan google "angka ajaib licik".
Saya sudah menyiapkan file zip untuk Anda di sini . Ini adalah file yang sama yang digunakan dalam aplikasi mesin catur SmallChess. Silakan baca dokumentasinya. Pada dasarnya, Anda perlu memanggil Rmagic (kotak, hunian) untuk benteng dan Bmagic (kotak, hunian) untuk para uskup. Anda dapat XOR mereka menjadi topeng ratu.
sumber