计算游戏的分数" GO"

时间:2015-05-26 15:06:54

标签: algorithm logic

有谁知道如何以编程方式计算Go游戏中的得分? 我有一个19x19的数组,这个数组的每个元素可以是0(空点),1(黑色石头)或2(白色石头)。我不明白如何检查该区域属于任何颜色。

2 个答案:

答案 0 :(得分:2)

这是一个非常重要的问题,因为通常Go游戏会在玩家完成必要的所有动作之前结束,以使其显而易见" true"得分/游戏价值是。并且有时可能的是,假设一个玩家进行次优播放(例如让对手完成建立一组在对手的领域中有生命的宝石,即使它在'之间),游戏的价值也会有所不同。可证明有可能杀死这组石头)。计算原始未入侵的区域是相当明显的,只需检查每个空间是否被切断"在每个可能的方向组合(正负水平和垂直)中,通过板的边缘或一种颜色的碎片。您可以通过从空白点开始广度优先搜索来更有效地执行此操作,并跟踪过程中遇到的颜色(不是从占用点遍历BFS),并且一旦找不到空白点就可以找到找到的彩色碎片都是一种颜色,然后找到的所有空白空间都属于那种颜色,否则它们不属于任何人。然后继续广度优先搜索下一个未探测的空白点,删除所有先前探索过的空白点。但是,如果对手在已建立的领土上有一件,理想情况下,在计算领土时应该忽略该件,事实上甚至被认为是被捕获的。如果显然一个对手在玩家领域内的一组作品最终将会出现这种情况,那么情况就是相同的。如果他们在没有犯错的情况下发挥出来,就会被捕获。如果两个玩家进入他们每个人都有一组与其他玩家相邻的棋子的情况下,情况会更加微妙,这样他们就会有相互生活的关系,即如果有一个玩家试图采取行动以杀死其他玩家,然后对手将能够杀死原始玩家的棋子,反之亦然。

答案 1 :(得分:0)

除了@user256... 的回答之外,还有一些高级概念可以帮助您决定进行 Go 分数估算的深度:

  1. 生活 - 一个群体需要两只眼睛才能生存。如果一群人被包围并且没有两只眼睛,它可能已经死了。
  2. 分组计数顺序 - 正如游戏玩法通常从角落开始,移动到两侧,然后在中间结束,这个顺序也是开始计算分数的最简单方法。一个角落只需要两堵墙就可以创造出领土,侧面有 3 堵墙,中间有 4 堵墙。
  3. 行号 - 棋子最靠近棋盘边缘的组更有可能在得分估计中成为既定领土:“第 4 行代表‘影响力’,第 3 行代表‘领土’ '”是一句常见的围棋谚语。因此,从角落开始计数,但首先计算最靠近棋盘边缘的石头。第一行可能没有任何石头,但第二行可能有一些。