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()
- trueを返す勝利/紛失した場合/それ以外の他の描く
game.Score(turn)
- リターン-1/0/1場合は、/失う/ドローです次の動き
game.Generate_Moves()
を持つプレイヤーのために勝つ -
game.Do_Move()
のリストを返します。
game.Undo_Move()
- 交渉自体の
アイデアは、私のプログラムが動作し、私(両方の選手と一緒に)が勝利するか、他の選手が勝つことができるかを教えてくれます。私はXで最初の動きをした後、ドローで終わることを教えてくれますが、Oのランダムな不自然な四角形を選ぶと、Xの勝利などを教えてくれるでしょう。したがって、アルゴリズムは動作しますが、遅いですが、動作します。それは可能なすべての四角形を取り、私の最高の試みを発表するが、私はアルゴリズムが勝利状態にかかるパスを取得したい。 – Dementor
そう、勝利の葉から木を元通りに追跡してください。 – Novak