国际象棋引擎中的滑块生成

时间:2017-04-11 16:30:48

标签: algorithm pseudocode chess bitboard

所以我在解决问题时遇到了一些麻烦。 我目前正在用Java编写一个基于位板的国际象棋引擎(这是一个可以解决所有问题的方法)。到目前为止,所有的棋子/国王/骑士动作都按预期工作,没有错误。

我需要帮助理解的是滑动片移动生成。我为每个方块/件生成了一系列空板移动。根据我目前的理解,我还需要开发一个数组,其中包含每个方块上的每个可能占用 - 然后以某种方式根据各种方法查找该数组。

这种思考方式是否正确?是从0到2 ^ 63中选取每个数字并用该方块的移动位板进行xor'ing然后用一些方法(魔术/旋转位板)存储它来初始化数组并以相同的方式访问它运行时间?

非常感谢伪代码和解释。 (顺便说一句,我使用>>>)。

2 个答案:

答案 0 :(得分:3)

有许多方法可以为位板生成滑块移动,具有不同的性能和复杂性。其中许多都列在here

可能最快且最常见的是magic bitboards,它使用具有“魔法”预先计算值的位板乘法来一次生成所有四个方向上的可能移动。缺点是它使用非常大的查找表。这可能不应该是你的第一个实现,因为它更复杂。

Obstruction differencehyperbola quintessence并不比魔术位板慢,但更容易实现。

更简单,更慢的是dumb7fill,它是每个可能方向的循环,不需要任何查找表。

答案 1 :(得分:0)

我个人正在使用双曲线精粹技术来生成滑块(Rooks,Bishops和Queen)运动。与魔术位板技术相比,它非常简单并且具有存储效率,但是比魔术位板要慢一点,因为与魔术位板的查找相比,双曲线精髓涉及到一些计算。请访问this talkchess.com论坛,以更好地了解如何生成等级攻击,因为这是我个人不十分了解的等级攻击。论坛讨论给了我所需的理解,它非常整洁并且运行良好。 Hyperbola Quintessence在Java上也能很好地工作,我在象棋引擎中使用了C ++。祝您象棋引擎编程好运。