我正在使用 Minimax 開發 Connect Four 游戲:https ://codepen.io/acchang/pen/XWePpWB
我被困在 Minimax 的第一部分,它是構建一個函式,該函式將優先考慮導致連續三個標記的移動。
我想我快到了,但我無法弄清楚為什么在function scorePositionHoriz()評估第一個位置之后回圈就關閉了我。
當我注釋掉if條件并回圈遍歷整個陣列時,它就起作用了parallelBoard。但是,當我取消注釋時if,javascript 控制臺會顯示回圈在一次嘗試后關閉。
以下是兩個關鍵功能。你能說為什么for回圈會因條件而關閉,if還有其他方法嗎?
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}
}```
uj5u.com熱心網友回復:
if這與;無關 它是塊之后的無條件return 0;陳述句else。
當您的代碼到達兩個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
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411438.html
標籤:
下一篇:如何遍歷列并按組檢查條件
