微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我的 for 循环中的 i 和 j 越来越高,然后它们应该在我的极小极大算法中

如何解决我的 for 循环中的 i 和 j 越来越高,然后它们应该在我的极小极大算法中

我当前的代码如下所示:

let bestscore = -Infinity
let move;
for(i = 0; i < board.length; i++)
{
    for(j = 0; j < board.length; j++)
    {
        if(whiteFrameNumber.includes(board[i][j])) // spot is available
        {
            const fieldBefore = board[i][j]
            board[i][j] = cross
            const score = minimax(board,false)
            board[i][j] = fieldBefore
            if(score > bestscore)
            {
                bestscore = score
                move = {i,j}
            }
        }
    }
}
board[move.i][move.j] = cross

和我的极小极大算法:

function minimax(board,depth,isMaximizing)
{
    const result = checkWinner(board)
    if(result !== 'noone won')
    {
        let score
        if(result === cross) score = 1
        else if(result === circle) score = -1
        else if(result === 'tie') score = 0
    }

    if(isMaximizing)
    {
        const bestscore = -Infinity
        for(i = 0; i < board.length; i++)
        {
            for(j = 0; j < board.length; j++)
            {
                if(whiteFrameNumber.includes(board[i][j]))  // spot is available
                {
                    const fieldBefore = board[i][j]
                    boardi[i][j] = cross
                    const score = minimax(board,depth + 1,false)
                    boardi[i][j] = fieldBefore
                    bestscore = Math.max(score,bestscore)
                }
            }
        }
        return bestscore
    }
    else
    {
        const bestscore = Infinity
        for(i = 0; i < board.length; i++)
        {
            for(j = 0; j < board.length; j++)
            {
                if(whiteFrameNumber.includes(board[i][j])) // spot is available
                {
                    const fieldBefore = board[i][j]
                    boardi[i][j] = circle
                    const score = minimax(board,true)
                    boardi[i][j] = fieldBefore
                    bestscore = Math.min(score,bestscore)
                }
            }
        }
        return bestscore
    }
}

我收到错误:TypeError:无法设置未定义的属性“0”

我也得到:TypeError:无法设置未定义的属性“3”

通过调试我发现主循环中的 'j' 在 minimax 函数之后被设置为 3。 我不知道如何以及为什么,但它可以解释错误

我没有通过进一步的调试找到任何解决方案,所以我不知道如何继续。

抱歉我的英语不好^^

解决方法

您在主循环和 i 函数中使用了相同的 jminimax() 变量。所以 minimax() 中的循环正在更新调用者中的变量。

通过使用 letvar 声明变量,使它们成为每个函数的局部变量。

for (let i = ...) {
    for (let j = ...) {
        ...
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。