Bitboard'lar için sihirli sayılar bulun


9

Bir C ++ satranç motoru yazıyorum ve kayan parçalar için hareketler oluşturmak için Little-Endian Rank-File Mapping bitboard'ları için sihirli sayılar arıyorum .

Rakip satranç web sitesi aynı tahta eşlemesi için sihirli sayılar verir, ancak değil.

Satranç programlama wiki şimdiye kadarki en iyi sihirli sayıların bazılarını veriyor ancak tam kapsamlı değil.

Sonunda dört şey arıyorum:

  • her kare için doluluk maskesi
  • her kare için sihirli sayı
  • her kare için sihirli vardiyalar
  • her bir kare için veritabanı dizisini taşır

Bu yüzden Rook'un C3'teki hareketlerini (örneğin) bulmak için aşağıdaki kodu kullanabilirim :

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces

Bu sorunun programcılar.stackexchange.com veya stackoverflow.com adresinden daha uygun ve yanıtlanacağına inanıyorum .
Pavan Nadig

1
Pek sayılmaz. Burada hala cevap verilebilir. BTW, programcılar daha üst düzey soyutlamaya odaklanıyor. stackoverflow.com daha iyi olurdu.
SmallChess

@PeteBecker Haklısın, değiştirdim
Romain

Yanıtlar:


6

Bu satranç programlamasında çok iyi bilinen bir sorundur. Pradyumna Kannan'ın ürettiği sayıları kullanmayı düşünmelisiniz. Dr.Kannan nazikçe açık kaynaklı sihirli sayıları üretmişti. Crafty ve benim de dahil olmak üzere birkaç satranç motoru tarafından kullanılıyor.

Google "Kurnaz büyü numarası" ile daha fazla okuyabilirsiniz.

Burada sizin için sıkıştırılmış bir dosya hazırladım . Bu, SmallChess satranç motoru uygulamasında kullanılan dosyaların aynısıdır. Lütfen belgeleri okuyun. Temelde, aramak gerekir Rmagic (kare, doluluk) kalelerime ve için Bmagic (kare, doluluk) piskoposları için. Bunları bir kraliçe maskesine XOR yapabilirsiniz.


Teşekkürler iyi çalışıyor. Bu kodu satranç motorumda özgürce kullanabilir / değiştirebilir miyim?
Romain

Lisans kısıtlaması yoktur. İstediğiniz gibi kullanın. Bunu ben yapmadım, Dr.Kannan'ın katkısı oldu. Lütfen yardımcı olursa cevabımı kabul et!
SmallChess

Merhaba, MagicMoves.zip dosyasını GoogleDrive'a yükleyebilir misiniz? Smallchess'te indiremiyorum (bazı hatalar aldım). Teşekkürler.
123iamking

@ 123iamking Bağlantı hala çalışıyor. Onu kaldıramayacağım.
SmallChess

@SmallChess - Kaldırma hakkında sormuyorum, Google Drive ile bir ayna sağlayabilir misiniz? Teşekkürler.
123iamking
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.