首页 > 解决方案 > 我无法让井字游戏的极小极大算法按预期工作

问题描述

大家好,我正在尝试使用 javascript 在我的井字游戏中实现 minimax,但我似乎无法让它工作。我已经尝试了我能想到的一切,但人工智能只是做出可怕的动作,所以我确定我把事情搞砸了,但我整晚都在试图找出我的错误,但没有用。

我注意到我的最大化玩家 bestScore 是非常随机的。它可以是 1、-1 或 -Infinity。另一方面,最小化玩家 bestScore 始终为 -1 或 -Infinity。我认为这与问题有关。

这是相关的代码:

const makeMove = () => {
    let bestScore = -Infinity;
    let move;
    let board = Gameboard.gameBoard;
    for (let i = 0; i < board.length; i++) {
        if (typeof board[i] !== 'string') {
            const originalValue = board[i];
            board.splice(i, 1, Gameflow.p2.sign);
            let score = minimax(board, 0, false);
            console.log(score);
            board.splice(i, 1, originalValue);
            if (score > bestScore) {
                bestScore = score;
                move = i;
            }
        }
    }

    board.splice(move, 1, Gameflow.p2.sign);
};

const minimax = (board, depth, isMaximizing) => {
    let result = Gameflow.checkResult();
    if (result != null) {
        return scores[result];
    }
    if (isMaximizing) {
        let bestScore = -Infinity;
        for (let i = 0; i < board.length; i++) {
            if (typeof board[i] !== 'string') {
                const originalValue = board[i];
                board.splice(i, 1, Gameflow.p2.sign);
                let score = minimax(board, depth + 1, false);
                board.splice(i, 1, originalValue);
                bestScore = Math.max(score, bestScore);
            }
        }
        return bestScore;
    } else {
        let bestScore = Infinity;
        for (let i = 0; i < board.length; i++) {
            if (typeof board[i] !== 'string') {
                const originalValue = board[i];
                board.splice(i, 1, Gameflow.p1.sign);
                let score = minimax(board, depth + 1, true);
                board.splice(i, 1, originalValue);
                bestScore = Math.min(score, bestScore);
            }
        }
        return bestScore;
    }
};
const scores = {
    O: 1,
    X: -1,
    tie: 0,
};

我希望我的描述性足够,但如果需要任何澄清,我很乐意提供更多信息。如果您想查看整个代码,请点击以下链接:https ://github.com/Gianluca-CIoni/tic-tac-toe/blob/ai/index.js

标签: javascripttic-tac-toeminimax

解决方案


推荐阅读