我正在编写一个黑白棋(黑白棋)引擎,作为稍后实现国际象棋引擎的培训。我想计算稳定件的数量,但不知道最好的方法是什么。
我可以轻松计算“边缘稳定”部分,但我不确定如何计算其他部分。我使用一维数组来表示板。
感谢任何提示!
来自http://en.wikipedia.org/wiki/Reversi
“一般来说,当沿着所有四个轴(水平、垂直和每个对角线),它位于边界上、填充行中或靠近相同颜色的稳定块时,一块是稳定的。”
您已经提到了边界 - 填充的行可以通过只计算碎片来检查,尽管这里可能有很多优化,例如首先找到填充的行,然后将整行上的每个位置标记为潜在稳定,而不是迭代每个位置,然后检查所有相关方向,这将导致浪费精力。
这个页面有更多关于计算稳定性的细节。
如果您对计算机黑白棋感兴趣,请务必查看Logistello上的出版物,该出版物(至少在几年前)是世界冠军。作者 Michael Buro 就该主题撰写了他的博士论文。源代码现在可用,因此您可以检查使用的数据结构。从记忆中,我认为他使用三进制数(即黑色、白色、空值)来实现快速查找 - 并且还保持各种模式(行、列、对角线、角等)的状态以加快评估功能。
嗯,我认为它属于您的数据结构。要检查一块是否稳定,您必须检查它旁边的所有字段(水平、垂直、对角线)是否遵循以下规则之一:
如何检查这取决于您的数据结构。也许你可以选择一个二维数组,这样你就有一个更接近真实游戏板的“图片”,一个 8x8 矩阵。