Temukan angka ajaib untuk bitboard

9

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
Romain
sumber
Saya percaya pertanyaan ini akan lebih cocok dan dijawab di programmers.stackexchange.com atau stackoverflow.com .
Pavan Nadig
1
Tidak juga. Ini masih bisa dijawab di sini. BTW, programmer lebih fokus pada abstraksi tingkat tinggi. stackoverflow.com akan lebih baik.
SmallChess
@PeteBecker Anda benar, saya mengubahnya
Romain

Jawaban:

6

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.

Catur kecil
sumber
Terima kasih itu bekerja dengan baik. Bisakah saya bebas menggunakan / memodifikasi kode ini di mesin catur saya?
Romain
Tidak ada batasan lisensi. Gunakan sesuka hati. Bukan saya yang melakukannya, itu kontribusi dari Dr Kannan. Harap terima jawaban saya jika itu membantu!
SmallChess
Hai, dapatkah Anda mengunggah file MagicMoves.zip ke GoogleDrive? Saya tidak bisa mengunduhnya di smallchess (saya mendapat beberapa kesalahan). Terima kasih.
123iamking
@ 123iamking Tautannya masih berfungsi. Saya tidak akan menghapusnya.
SmallChess
@SmallChess - Saya tidak bertanya tentang menghapusnya, dapatkah Anda memberikan cermin dengan Google Drive? Terima kasih.
123iamking