我正在使用 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}
}```