Подскажите в чем ошибка в моей реализации алгоритма 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() - проверка на победу какой-либо стороны.


Ответы (0 шт):