Подскажите в чем ошибка в моей реализации алгоритма NegaMax в крестики-нолики!
подскажите пожалуйста. Я хотел реализовать алгоритм NegaMax с использованием Alpha-Beta в игре крестики-нолики, но мое решение работает некорректно. Программа выбирает неверные позиции.
public int get_computer_move()
{
int move = -1;
int best_score = int.MinValue;
List<object> board = new List<object>(panel);
for (int i = 0; i < 9; i++)
{
if (board[i].ToString() == "_")
{
board[i] = "O";
int temp = Search("O", 3, int.MinValue, int.MaxValue, board);
board[i] = "_";
if (temp > best_score)
{
best_score = temp;
move = i + 1;
}
}
}
return move;
}
public int Search(string color, int Depth, int alpha, int beta, List<object> board)
{
string opColor = (color == "O" ? "X" : "O").ToString();
if (Depth <= 0)
{
return Evaluate(board);
}
int score = int.MinValue;
for (int i = 0; i < 9; i++)
{
if (board[i].ToString() == "_")
{
board[i] = color;
int temp = -Search(opColor, Depth - 1, -beta, -alpha, board);
board[i] = "_";
if (temp > score) score = temp;
if (temp > alpha) alpha = score;
if (alpha >= beta) return alpha;
}
}
return score-Math.Sign(score);
}
public int Evaluate(List<object> board)
{
string win = check_win(board);
if (win == "draw")
{
return 0;
}
else if (win == "X")
{
return -1000;
}
else
{
return 1000;
}
}
Здесь board - список, в котором хранятся под каждым индексом символ. check_win() - проверка на победу какой-либо стороны.