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 - это простой класс с двумя координатами X, Y, и я хочу получить ответ в виде точки, чтобы я мог потом сказать что-то вроде game.Do_Move(myPoint)
.
В случае, если некоторые функции не очевидны:
game.IsFinished()
- возвращает true, если победа / поражение / ничья в противном случае
game.Score(turn)
- возвращает -1/0/1 в случае проигрыша / ничьей / выигрыша игрока со следующим ходом
game.Generate_Moves()
- возвращает список доступных ходов
game.Do_Move()
- пустота, применяющая ход к игре
game.Undo_Move()
- говорит сам за себя