如何解决我的 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:无法设置未定义的属性“3”
通过调试我发现主循环中的 'j' 在 minimax 函数之后被设置为 3。 我不知道如何以及为什么,但它可以解释错误。
我没有通过进一步的调试找到任何解决方案,所以我不知道如何继续。
抱歉我的英语不好^^
解决方法
您在主循环和 i
函数中使用了相同的 j
和 minimax()
变量。所以 minimax()
中的循环正在更新调用者中的变量。
通过使用 let
或 var
声明变量,使它们成为每个函数的局部变量。
for (let i = ...) {
for (let j = ...) {
...
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。