卡罗(井字游戏)游戏的极小极大函数

问题描述 投票:0回答:0

我使用了minimax函数和findBestMove函数来寻找机器人的着法,但它似乎是错误的,我不知道如何修复它 the move of bot, it line up 这是我的代码

int x_score = 0, o_score = 0, x_count = 0, o_count = 0, x = 0, y = 0, depth=15, value = 0, pos_i = -1, pos_j = -1; int board[size][size]{}; bool x_turn = true; int scoreVal[size][size];

int game::minimax(bool isMaxiPlayer, int depth, int alpha, int beta) {
    int val = 0;
    bool stop = false;
    if (depth == 0) return 0;
    int i = 0, j = 0;
    if (draw()) {
        return 0;
    }
    else if (win()) {
        if (!x_turn) {
            return -10-depth;
        }
        else {
            return 10+depth;
        }
    }
    //else if (depth == 0) return value;
    if (isMaxiPlayer) {
        int bestVal = -1000;
        for (i =0; i < 3 &&(!stop); ++i)
            for (j = 0; j < 3 &&(!stop); ++j)
                if (board[i][j] == 0) {
                    board[i][j] = 1;
                    val = minimax(false, depth - 1, alpha, beta);
                    board[i][j] = 0;
                    bestVal = max(bestVal, val);
                    alpha = max(alpha, bestVal);
                    if (beta <= alpha) {
                        stop = true;
                    }
                }
        return bestVal;
    }
    else {
        int bestVal = 1000;
        for (i = 0; i < 3 &&(!stop); ++i)
            for (j = 0; j < 3 &&(!stop); ++j)
                if (board[i][j] == 0) {
                    board[i][j] = 2;
                    val = minimax(true, depth - 1, alpha, beta);
                    board[i][j] = 0;
                    bestVal = min(bestVal, val);
                    beta = min(beta, bestVal);
                    if (beta <= alpha) {
                        stop = true;
                    }
                }
        return bestVal;
    }
}

void game::findBestMove(bool isMaxiPlayer, int& pos_i, int& pos_j) {
    int bestVal = -1000;
    for (int i = 0; i < size; ++i) {
        for (int j = 0; j < size; ++j) {
            //cout << board[i][j];
            if (board[i][j] == 0) {
                board[i][j] = 2;
                int val = minimax(false, depth, -1000, 1000);
                if (val > bestVal) {
                    bestVal = val;
                    pos_i = i;
                    pos_j = j;
                }
                board[i][j] = 0;
                //printf("%d ", i, j);
            }
        }
    }

}

我多次尝试调整功能,但我找不到重点 我希望你能帮助我调整它可以顺利工作的功能。我的板子是12*12

c++ tic-tac-toe minimax
© www.soinside.com 2019 - 2024. All rights reserved.