查找位板的魔术数字


9

我正在编写C ++国际象棋引擎,并且正在寻找Little-Endian Rank-File Mapping位板的幻数,以生成滑动件的移动。

竞争对手的国际象棋网站给出了魔术数字,但没有给出相同的棋盘映射。

国际象棋编程维基提供了迄今为止最好的一些魔术数字,但并不详尽。

最后,我正在寻找四件事:

  • 每个正方形的占用口罩
  • 每个方块的幻数
  • 每个方块的魔幻转变
  • 移动每个正方形的数据库数组

因此,我可以使用以下代码来查找Rook在C3上的移动(例如):

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

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

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

我相信这个问题将更适合并在developers.stackexchange.comstackoverflow.com上得到回答。
Pavan Nadig

1
并不是的。在这里,这仍然是可以回答的。顺便说一句,程序员更加专注于高级抽象。stackoverflow.com会更好。
SmallChess,2015年

@PeteBecker您说得对,我更改了它
Romain

Answers:


6

这是国际象棋编程中一个众所周知的问题。您应该考虑使用Pradyumna Kannan生成的数字。Kannan博士好心地将魔术数字开源。Crafty和包括我自己在内的其他一些国际象棋引擎都在使用它。

您可以通过Google阅读更多“工艺魔术数字”。

我在这里为您准备了一个压缩文件。这与SmallChess国际象棋引擎应用程序中使用的文件相同。请阅读文档。基本上,你需要调用Rmagic(方形,入住)对乌鸦和Bmagic(方形,入住)的主教。您可以将它们异或化为女王面具。


谢谢,它运作良好。我可以在国际象棋引擎中自由使用/修改此代码吗?
罗曼(Romain)

没有许可证限制。随便使用。不是我做的,这是坎南博士的贡献。如果有帮助,请接受我的回答!
SmallChess,2015年

嗨,您可以将MagicMoves.zip文件上传到GoogleDrive吗?我无法一口气下载它(出现错误)。谢谢。
123iamking

@ 123iamking链接仍然有效。我不会删除它。
SmallChess

@SmallChess-我不要求删除它,您可以为Google云端硬盘提供镜像吗?谢谢。
123iamking
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.