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;
}
事情是,这个小函数告诉我,如果游戏是赢,输或平局,但我怎么能得到这一举动,将导致我赢得?我的点类是一个简单的类有2个坐标X,Y和我想得到答案作为一个点,所以我可以后面说一些像game.Do_Move(myPoint)
。如何从TicTacToe中的Min Max中提取最佳移动?
如果有些功能并不明显:
game.IsFinished()
- 如果赢/输/平局别的否则
game.Score(turn)
返回true - 返回-1/0/1的情况下,是一赔/战平/赢得下一个举动
game.Generate_Moves()
球员 - 返回与可移动
game.Do_Move()
- 无效应用于移动到游戏
game.Undo_Move()
- 为自己的谈判
这个想法是,我的计划的作品,告诉我,如果我(与双方球员)有机会赢/拉或其他球员可以赢。在我用X做出第一步之后,它告诉我它将以平局结束,但是如果我为O选择一个随机的坏方块,它会告诉我它为X等赢了一场胜利。因此,该算法的工作原理,缓慢顺便说一句,但它的作品。它需要所有可能的方块,并且宣布我的最佳尝试,但是我想要获得算法在获胜状态下的路径。 – Dementor 2012-02-10 17:35:55
对,如此从赢得的叶子回溯树木。 – Novak 2012-02-10 20:37:48