python - 0x88 棋盘表示

标签 python wxpython artificial-intelligence chess

我正在尝试使用 wxPython 中的 GUI 制作一个 2 人国际象棋程序,该程序能够验证移动并遵循每条国际象棋规则。

现在,我正处于设计的开始阶段,正在弄清楚我应该使用哪种电路板表示技术。我最近想到了明显的二维数组,但后来我读到了 0x88 board representation据推测,这在查找方面更快,并且逻辑上检查方 block 是否在棋盘内。但是,如果我制作一个没有人工智能的程序,就没有必要检查是否有人移动了棋盘之外的棋子。

0x88 表示还有其他我不知道的优势吗?您会推荐哪一种,8x8 方法还是 0x88。此外,首先使用 8x8 表示是否容易,然后,如果我决定添加 AI,则使用 0x88 表示是否容易? 非常感谢您的想法。

最佳答案

已经提到的“标准”板表示(0x88、位板等)都有一个极端优化的目标。具体来说,两个方面的极致优化:

  1. 让它走得快,越快越好
  2. 为程序员提供更好的工具箱来指导国际象棋树搜索,从而提高 AI

“标准”棋盘表示仅在编写国际象棋程序并让他们与其他人和其他计算机进行在线竞争的人群中是“标准”的。这显然不是您想要的,因此我不建议您使用这些方法中的任何一种。

那些“标准”方法实际上是在尝试使用一些位技巧来节省 1-2 个 CPU 周期。您使用 Python 的事实使得在这里和那里节省几个周期完全没有意义。 Python 很棒,但它一点也不快。

Python 为您提供了很多很好的工具。使用它们。你的程序会很慢,这并没有错。它不会“感觉”缓慢,这才是最重要的。如果我是你,我绝对会使用 Python,而且我不会再考虑在 Python 中使用任何这些微不足道的想法。如果您使用 C 语言或汇编语言编写,那么位操作很有趣。在 Python 中这是毫无意义的。

关于python - 0x88 棋盘表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11584224/

相关文章:

python - 如何正确使用 tf.summary.text?

python - 如何防止 wxPython 子类中的内存泄漏?

python - wxPython wxScrolledWindow 函数引发 TypeError

python - 在redis中存储numpy数组的最快方法

artificial-intelligence - 开始使用神经网络 (ANN)?

Python gzip 模块在 ubyte 文件上无法按预期工作

python - 如何组合多个 TUI 表单来编写更复杂的应用程序?

python - wx grid SetCellBackGroundColor() 未按预期工作

algorithm - 人工神经网络的雅可比矩阵计算

Python 套接字服务器和管道