我正在尝试将minimax算法应用于c ++中的游戏tictactoe 3D。 我正在努力为它找到一个好的评估功能。
有没有人知道哪里有好的资源来找到评估函数?
谢谢。
答案 0 :(得分: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;
这应该效果很好,因为只有一个玩家标记的任何一行都会让玩家有机会获胜。
答案 1 :(得分:0)
启发式是不必要的。只有3 ^ 27个状态,你可以枚举它们并计算最佳游戏。
答案 2 :(得分:0)
此游戏的评估功能只需要测试获胜位置。评估函数应该计算板中的空字段,因为板具有的空文件越多,得分应该越高。要减少评估功能必须检查的线,行和对角线的数量,您可以镜像和旋转电路板。