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

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.