2010-04-14 52 views

回答

0

这是我想要的使用:

去了所有行(在各个方向)。对于每一行,如果它只有一个玩家的分数,则根据玩家的分数标记该分数。你可以有一个查找表映射数量的标记得分,可以调整以获得最佳结果。最后的结果将是两位球员得分之差。

例(伪):

const int markScore[4+1] = {0, 1, 3, 5, 99999}; //assuming 4x4x4 board 
//The above values are arbitrary - adjust to what you think makes sense. 

score = 0; 
for all rows in all directions: 
    count Xs and Os 
    if (xs>0 && os==0) 
     score += markScore[xs]; 
    else if (os>0 && xs==0) 
     score -= markScore[os]; 
return score; 

这应该很好地工作,因为只有一个球员的标记任何行给出的球员有机会取胜。

+0

你能告诉我一个如何将分数映射到分数的例子吗? – root 2010-04-14 16:41:40

+0

我想知道setScore中的值对AI有多大的影响?我试图找到最好的价值。 – root 2010-04-14 19:35:12

+0

寻找好价值的一种方法是让你的AI用不同的价值观来对抗自己,并看看哪一个赢家是赢家。许多最好的国际象棋引擎都是这样做的,以调整它们的参数。 (为了更加准确,他们通常会与其他引擎相比,而不是自己)。 – interjay 2010-04-14 20:48:06

0

启发式是不必要的。只有3^27个州,你可以枚举它们并计算最佳游戏。

+0

nope,在3D tictactoe中,状态总数为64个因子 – root 2010-04-14 19:23:02

+1

您应该定义“3D tic tac toe”。我假设基思假设它是一个3x3x3的网格,而不是4x4x4的网格,这就是你所建议的。无论哪种情况,你都会将“状态”与可能的游戏数量混淆起来。应该有〜3^64个状态。现在这可能是不可行的,但可能会帮助您将状态的数量可视化一点点。 – Larry 2010-04-14 19:44:20

0

该游戏的评估功能只需要测试获胜位置。评估职能应计入董事会中的空白字段,因为董事会空档越多,分数应该越高。为了减少评估函数必须检查的行数,行数和对角线数量,可以镜像和旋转电路板。