【发布时间】:2012-02-10 13:38:30
【问题描述】:
int minmax(Board game, int depth)
{
if (game.IsFinished() || depth < 0)
return game.Score(game.Turn);
int alpha = int.MinValue + 1;
foreach (Point move in game.Generate_Moves())
{
Board currentBoard = game;
currentBoard.Do_Move(move);
alpha = max(alpha, -minmax(currentBoard, depth-1));
currentBoard.Undo_Move(move);
}
return alpha;
}
问题是这个小功能告诉我游戏是赢、输还是平,但是我怎样才能得到让我赢的动作呢?我的 Point 类是一个简单的类,有 2 个坐标 X、Y,我想得到一个点的答案,所以我可以稍后说类似 game.Do_Move(myPoint) 的内容。
如果某些功能不明显:
game.IsFinished() - 如果赢/输/平则返回 true,否则返回 true
game.Score(turn) - 返回 -1/0/1 以防玩家在下一步行动中输/平/赢
game.Generate_Moves() - 返回一个包含可用动作的列表
game.Do_Move() - 将移动应用于游戏的无效
game.Undo_Move() - 自言自语
【问题讨论】:
标签: artificial-intelligence tic-tac-toe minmax