游戏名为wizwoz:
两名球员,红色(简称r)和 gold(简称g)最初选择两个值n和k。用k创建n×n板 随机放置在板上的“r”和k“g”。从玩家r开始,每个玩家投入 他/她的信件(玩家r的“r”,付款人g的“g”)在董事会的一个空方格中。 在棋盘被填满之后,每个球员的得分等于最大的连接区域 充满该玩家颜色的棋盘(其中连接区域是任何两个的颜色) 该区域中的正方形存在仅由N / S / E / W移动组成的路径。玩家 获得最高分,并获得他/她的分数和分数之间的差异 其他球员完成游戏的两个例子如下所示,最大的 概述了每个玩家的连接区域。请注意,在第二个例子中,两个 每个2 r的部分没有连接。
我正在编写alpha-beta prunning算法并坚持使用评估函数。
有任何帮助吗?伪代码是优选的。
答案 0 :(得分:1)
从一个非常简单的评估功能开始。例如,只使用最大组件的当前大小。在获得ai工作后,您可以担心调整评估启发式。
这里的示例pseduocode(未测试)
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))