游戏名为wizwoz:
两个玩家,红色(简称为r)和金色(简称为g)最初选择两个数值n和k。创建一个n × n的棋盘,并在棋盘上随机放置k个“r”和k个“g”。从玩家r开始,每个玩家在他的字母(玩家r用“r”,玩家g用“g”)放置在一个空的方格中。棋盘填满后,每个玩家的得分等于棋盘上用该玩家颜色填充的最大连通区域的尺寸(其中,连通区域是指区域内任意两个方格之间存在仅由上下左右移动组成的路径)。得分最高的玩家获胜,并获得其得分与另一玩家得分之间的差额。下面展示了两个完成的游戏示例,每个玩家最大的连通区域被标出。请注意,在第二个示例中,两个各有2个r的部分是不连通的。
我在编写alpha-beta剪枝算法时,卡在了评估函数上。
有什么帮助吗?最好是伪代码。
回答:
从一个非常简单的评估函数开始。例如,只使用当前最大组件的尺寸。等你让AI运作起来后,再考虑调整评估启发式方法。
这里是伪代码示例(未经测试)
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] = newfor x,y: contract(board[x,y], board[x,y+1]) contract(board[x,y], board[x+1,y])return max(map(len, components))