Я пытаюсь адаптировать алгоритм минимакс из Википедии для своей реализации TicTacToe в Scala. Я хочу, чтобы игрок X, -1, попытался максимизировать свой счет. Я нашел классную статическую функцию оценки здесь который я хотел бы использовать. Он возвращает положительные числа, если доска хороша для игрока, и отрицательные числа, если доска плоха для игрока. Я попробовал несколько вариантов, и X продолжает делать первый ход доступным. Метод приведен ниже, метод и функцию оценки можно найти здесь.
Есть ли в этом что-то явно очевидное, что я упускаю?
// player X = -1, player O = 1
def minmax(board:Array[Int], height:Int, player:Int):Double={
if(height == 0)
evaluatePosition(board, player)
var alpha = -player * Double.PositiveInfinity;
val allBoards = makeAllPossibleMoves(board, player) // array of child boards
for(b <- allBoards){
val score = minmax(b, height-1, -player)
alpha = if (player == -1) Math.max(alpha, score) else Math.min(alpha, score)
}
alpha
}