我用機器人做井字游戲,需要檢查一個單元格是否為空。我確實讓機器人作業了,因為它在板上寫了一個隨機的 X,但機器人在 Os 上寫了 X。所以我需要弄清楚如何檢查一個單元格是否包含 Xs 或 Os,如果沒有,則放置 X。現在我的代碼是這樣的。
const cellElement = document.querySelectorAll('[data-cell]')
const winner = document.getElementById("winner")
let nextTurn = false
let winningConditions = [
[0, 1, 2],
[3, 4, 5],
[6, 7, 8],
[0, 3, 6],
[1, 4, 7],
[2, 5, 8],
[0, 4, 8],
[2, 4, 6],
]
cellElement.forEach(cell => {
cell.addEventListener("click", handleClick, { once: true })
function handleClick() {
playerTurn(cell)
checkWin()
computerTurn()
//check for draw
}
});
function playerTurn(cell) {
if (nextTurn == false) {
cell.innerHTML = "O"
nextTurn = true
}
}
function computerTurn() {
if (nextTurn == true) {
cellElement[Math.floor(Math.random() * cellElement.length)].innerHTML = "X"
nextTurn = false
}
}
function checkWin() {
for (let winCondition of winningConditions) {
if (winCondition.every(i => cellElement[i].innerHTML == "X")) {
winner.innerHTML = "X WON!!!"
} else if (winCondition.every(i => cellElement[i].innerHTML == "O")) {
winner.innerHTML = "O WON!!!"
}
}
}
我試過的是這個,但它只把 x 放在第一個單元格中,然后向前移動 1 個單元格,但即使那里有一個 O 它只是覆寫它。
function computerTurn() {
for (let i = 0; i < cellElement.length; i ) {
console.log(cellElement[i]);
if (nextTurn == true) {
if (cellElement[i].innerHTML !== "X" && "O") {
cellElement[i].innerHTML = "X"
nextTurn = false
break;
}
} else {
computerTurn()
}
}
}
你可以在這里測驗代碼https://jsfiddle.net/tv01cy7x/3/
uj5u.com熱心網友回復:
你不能做
if (cellElement[i].innerHTML !== "X" && "O") {
cellElement[i].innerHTML = "X"
但
const val = cellElement[i].innerHTML
if ( val !== "X" && val !== "O")
在 aif中,每個條件都是獨立評估的,所以當你放 an 時,&&你仍然需要告訴他要比較哪個變數
換句話說 : if ( val !== "X" && "O")等價于if ( "O" && val !== "X")并且因為任何不為 null 或 0 或未定義的東西都等于True, 它等價于 :if ( val !== "X" && true )所以等價于if ( val !== "X" )
您可以做些什么來找到隨機 X 的位置:
function computerTurn(){
r = Math.floor(Math.random() * cellElement.length);
if (cellElement[i].innerHTML !== "X" && "O") {
cellElement[i].innerHTML = "X";
return 1;
}
return computerTurn();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/422652.html
標籤:
