0

游戏名为 wizwoz:

两个玩家,红色(称为 r)和金色(称为 g)最初选择两个值 n 和 k。创建一个 n × n 的棋盘,其中 k“r”和 k“g”随机放置在棋盘上。从玩家 r 开始,每个玩家将他/她的字母(玩家 r 为“r”,付款人 g 为“g”)放在棋盘上的一个空方格中。棋盘填满后,每个玩家的分数等于棋盘上用该玩家颜色填充的最大连接区域(其中连接区域是一个区域中的任何两个方格都存在仅由 N/S/E 组成的路径/W 移动)。得分最高的玩家获胜,并获得他/她的得分与其他玩家得分之间的差额。下面显示了两个已完成游戏的示例,其中列出了每个玩家的最大连接区域。

在此处输入图像描述

我正在编写 alpha-beta 修剪算法并坚持使用评估函数。

有什么帮助吗?最好使用伪代码。

4

1 回答 1

1

从一个非常简单的评估函数开始。例如,只使用最大组件的当前大小。在你让人工智能工作之后,你可以担心调整评估启发式。

这是示例伪代码(未经测试)

components = {k:set([k]) for k in board}
def contract(k1, k2):
    if color(k1) != color(k2):
        return
    new = components[k1]
    if k2 not in new:
        new.union_update(components[k2])
        for x in components[k2]:
            components[x] = new

for x,y:
    contract(board[x,y], board[x,y+1])
    contract(board[x,y], board[x+1,y])

return max(map(len, components))
于 2012-10-30T05:16:03.570 回答