Encontre números mágicos para placas de bit

9

Estou escrevendo um mecanismo de xadrez C ++ e estou procurando números mágicos para as placas de bitmap Little-Endian Rank-File Mapping para gerar movimentos para peças deslizantes.

O site rival do xadrez fornece números mágicos, mas não para o mesmo mapeamento do tabuleiro.

O wiki de programação de xadrez fornece alguns dos melhores números mágicos até agora, mas não é exaustivo.

No final, estou procurando quatro coisas:

  • máscara de ocupação para cada quadrado
  • número mágico para cada quadrado
  • mudanças mágicas para cada quadrado
  • move a matriz do banco de dados para cada quadrado

Para que eu possa usar o código a seguir para encontrar os movimentos da torre no C3 (por exemplo):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces
Romain
fonte
Acredito que esta pergunta será mais adequada e respondida em programmers.stackexchange.com ou stackoverflow.com .
Pavan Nadig
11
Na verdade não. Isso ainda é responsável aqui. BTW, os programadores se concentram mais na abstração de alto nível. stackoverflow.com teria sido melhor.
SmallChess
@PeteBecker Você está certo, eu mudei
Romain

Respostas:

6

Este é um problema muito conhecido na programação de xadrez. Você deve considerar usar os números gerados por Pradyumna Kannan. O Dr. Kannan produziu gentilmente os números mágicos de código aberto. Ele está sendo usado pelo Crafty e alguns outros mecanismos de xadrez, incluindo o meu.

Você pode ler mais no google "número mágico astuto".

Preparei um arquivo compactado para você aqui . Esses são os mesmos arquivos usados ​​no aplicativo de mecanismo de xadrez do SmallChess. Por favor, leia a documentação. Basicamente, você precisará chamar Rmagic (praça, ocupação) para gralhas e Bmagic (praça, ocupação) para bispos. Você pode XOR aqueles em uma máscara de rainha.

SmallChess
fonte
Obrigado, funciona bem. Posso usar / modificar livremente este código no meu mecanismo de xadrez?
Romain
Não há restrição de licença. Use como quiser. Não fui eu quem fez isso, foi uma contribuição do Dr. Kannan. Por favor aceite minha resposta se isso ajudar!
SmallChess
Olá, você pode enviar o arquivo MagicMoves.zip para o GoogleDrive? Não consigo baixá-lo no modo smallchess (recebi algum erro). Obrigado.
123iamking 23/03
@ 123iamking O link ainda está funcionando. Eu não vou removê-lo.
SmallChess 23/03
@ SmallChess - Não pergunto sobre removê-lo, você pode fornecer um espelho com o Google Drive? Obrigado.
123iamking 23/03