0

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

我需要帮助理解的是滑动块移动生成。我已经为每个方格/棋子生成了空棋盘移动数组。根据我目前的理解,我还需要开发一个数组,该数组还包含每个正方形上的每个可能占用率——然后以某种方式基于各种方法查找该数组。

这种思考方式正确吗?是否需要从 0 到 2^63 中选择每个数字,然后用移动位板对那个正方形进行异或运算,然后用某种方法(魔法/旋转位板)存储它以初始化数组并以相同的方式访问它运行?

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

4

2 回答 2

3

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

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

阻塞差双曲线精髓不比魔术位板慢多少,但更容易实现。

更简单和更慢的是dumb7fill,它是一个在所有可能方向上的循环,不需要任何查找表。

于 2017-04-11T17:15:12.330 回答
0

我个人使用双曲线精髓技术来生成滑块(Rooks,Bishops & Queen)动作。与魔术位板技术相比,它非常简单并且内存效率高,但比魔术位板慢一点,因为与魔术位板的查找相比,双曲线精髓涉及一些计算。请参阅这个talkchess.com 论坛,以更好地了解排名攻击是如何产生的,因为我个人觉得我不太了解它。论坛讨论给了我所需的理解,它非常整洁并且效果很好。Hyperbola Quintessence 也适用于 Java,我使用 C++ 作为我的国际象棋引擎。祝你的国际象棋引擎编程好运。

于 2020-04-18T08:00:15.770 回答