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()
-ゲームに移動を適用するvoid
game.Undo_Move()
-自分自身のために話します