C# TicTacToe Minimax - PullRequest
       72

C# TicTacToe Minimax

0 голосов
/ 15 апреля 2020

Я пытаюсь создать tictactoe игру с MiniMax Ai, я застрял на функции минимакса, она всегда возвращает 0, но я понятия не имею, почему.

    namespace TicTacToeMiniMax
{
    class AiBrain
    {
        int Score;
        int BestMoveStorage;
        Board BoardCopy;

    public void BestMove(Board board)
    {
        BoardCopy = board;

        for(int x = BoardCopy.BoardList.Count(); x > 0; x--)
        {
            if (BoardCopy.ReturnBoardValue(x) == "Z")
            {
                BoardCopy.MakeMove(x, "X", true);
                int TempScore = Minimax(0, false);
                BoardCopy.MakeMove(x, "Z", true);
                if (TempScore > Score)
                {
                    Score = TempScore;
                    BestMoveStorage = x;
                }
            }
        }
    }
    private int Minimax(int depth, bool IsMax)
    {
        string Result = BoardCopy.CheckWinAi();
        if(Result != "Z")
        {
            switch (Result)
            {
                case "X":
                    return 1;
                case "O":
                    return -1;
                case "Gelijk":
                    return 0;
            }
        }
        if (IsMax)
        {
            int BestScore = -0;
            for (int x = BoardCopy.BoardList.Count(); x > 0; x--)
            {
                if (BoardCopy.ReturnBoardValue(x) == "Z")
                {
                    BoardCopy.MakeMove(x, "X", true);
                    int Score = Minimax(depth + 1, false);
                    BoardCopy.MakeMove(x, "Z", true);
                    if (Score > BestScore)
                    {
                        BestScore = Score;
                    }
                }
            }
            return BestScore;
        }
        else
        {
            int BestScore = 0;
            for (int x = BoardCopy.BoardList.Count(); x > 0; x--)
            {
                if (BoardCopy.ReturnBoardValue(x) == "Z")
                {
                    BoardCopy.MakeMove(x, "O", true);
                    int Score = Minimax(depth + 1, true);
                    BoardCopy.MakeMove(x, "Z", true);
                    if (Score < BestScore)
                    {
                        BestScore = Score;
                    }
                }
            }
            return BestScore;
        }
    }

    public int MakeMove()
    {
        return BestMoveStorage;
    }
}
}

Выше мой класс ИИ но он просто возвращает 0. Класс Board содержит список из 9 строк («X», «O» и «Z» для пустых мест). У него также есть классы для проверки, является ли место пустым, и функция проверки выигрыша.

Спасибо.

...