为什么这个作为Minimax语句一部分的循环在添加"if"条件时失败



我正在用Minimax开发Connect Four游戏:https://codepen.io/acchang/pen/XWePpWB

我一直停留在Minimax的第一部分,即构建一个函数,该函数将对导致连续三个令牌的移动进行优先级排序。

我想我差不多到了,但我不明白为什么function scorePositionHoriz()中的循环在评估第一个位置后就对我关闭了。

当我注释掉if条件并在整个数组parallelBoard中循环时,它就起作用了。但是,当我取消注释if时,javascript控制台会显示循环在一次尝试后关闭。

以下是两个关键功能。你能说出为什么for循环在if条件下关闭吗?有其他方法吗?

function scorePositionHoriz (board, player) {
for (let r=0; r<6; r++) {
for (let c=0; c<4; c++) {
(console.log("checking: " + (board[r][c]),(board[r][c+1]),(board[r][c+2])))
// if ((board[r][c] == player) && (board[r][c+1] == player) && (board[r][c+2] == player)) {
//     score = score + 10
//     console.log("scored is" + score)
//     return score
// }
// else (console.log("no matches: " + (board[r][c]),(board[r][c+1]),(board[r][c+2])))
// return 0
// also tried:
// if ((Number.isInteger(board[r][c]) == Number.isInteger(board[r][c+1])) &&
// (Number.isInteger(board[r][c+1]) == Number.isInteger(board[r][c+2]))) {
//     console.log("equal true")}
//  else (console.log("no matches: " + (board[r][c]),(board[r][c+1]),(board[r][c+2])))
// return 0
// something about "if" throwing things off
}
}
};
function pickBestMove() {
let bestScore = -1
let bestColumn 
let parallelAvailable = findAvailableSpots(parallelBoard)
for (s=0; s<parallelAvailable.length; s++) {
let i;
let j = parseInt(parallelAvailable[s] - 1)
console.log ("from avail spot " + j)
for (i = 5; i > -1; i--) 
if (Number.isInteger(parallelBoard[i][j])) {
parallelBoard[i].splice((j), 1, whosPlaying())
break
}
let positionScore = scorePositionHoriz (parallelBoard, whosPlaying())
console.log("test board with marker in " + gameboard[i][j])
parallelBoard[i].splice((j), 1, gameboard[i][j])
if (positionScore > bestScore) {
bestScore = positionScore
console.log("Best Score is " + bestScore)
bestColumn = s
}
else {console.log("not better")}
console.log("tested avail spot: " + s)
}
console.log("BestColumn decided: " + bestColumn)
if (bestColumn == 0){
let altSpot = (availableSpots[Math.floor(Math.random() * availableSpots.length)] - 1)
console.log("random choice:" + altSpot)
return altSpot
}
else {return bestColumn}
}```

这与if无关;它是在CCD_ 9块之后的无条件CCD_。

当代码到达两个for循环的第一次迭代时,它将执行return score;return 0;。这将退出当前函数,并且不会执行循环的进一步迭代。

重新格式化代码应该会让它更清晰:

if ((board[r][c] == player) && (board[r][c+1] == player) && (board[r][c+2] == player)) {
score = score + 10
console.log("scored is" + score)
return score; // Function exits here; loops are terminated
}
else {
(console.log("no matches: " + (board[r][c]),(board[r][c+1]),(board[r][c+2])));
}
return 0; // Function exits here; loops are terminated