有谁知道如何以编程方式计算围棋游戏的分数?我有一个 19x19 的数组,这个数组的每个元素可以是 0(空点)、1(黑子)或 2(白子)。我不明白如何检查该区域属于任何颜色。
这是一个重要的问题,因为通常围棋游戏在玩家做出所有必要的动作以明确游戏的“真实”分数/价值之前就结束了。有时,假设一个玩家玩得不理想,游戏的价值可能会有所不同(例如,让对手完成建立一组在对手领土上有生命的石子,即使事实证明有可能杀死这组石子)。计算原始的未侵入区域是相当明显的,只需检查每个空间是否在每种可能的方向组合(正负水平和垂直)上被棋盘的边缘或一种颜色的碎片“切断”即可。您可以通过从空点开始广度优先搜索来更有效地完成此操作,并跟踪在此过程中遇到的颜色(不是从占用的点遍历 BFS),并且一旦找不到更多空点,则如果找到的彩色块都是一种颜色,那么找到的所有空位都属于该颜色,否则它们不属于任何人。然后继续对下一个未探索的空点进行广度优先搜索,删除所有先前探索过的空点。然而,如果对手在已建立的领土上有一颗棋子,那么在计算领土时最好忽略该棋子,实际上甚至被视为被占领。如果很明显,如果棋手不犯错误,棋手的领土上的一组对手的棋子将“最终”被吃掉,情况也是一样。如果两个玩家都拥有一组与对方棋子相邻的棋子,使得这些棋子具有“共同生命”,即如果一个玩家试图努力移动,那么情况会更加微妙。杀掉对方的棋子,那么对手就能够杀掉原玩家的棋子,反之亦然。