#javascript #html #css
#javascript #HTML #css
Вопрос:
Я пишу игру в крестики-нолики, и у меня такая проблема, потому что я создал функцию computerMove, и она отвечает за создание буквы «О» в случайном поле. Но когда есть последнее поле для выбора и есть ход игрока, когда вы нажимаете на это поле как игрок, вторая буква «О» появляется в другом. Иногда в середине игры появляются две буквы «О».
Вот ссылка на весь проект:https://codepen.io/daniel-led/pen/qBZpWZG
let pools = document.querySelectorAll(".pool");
let randomNumber;
var nums = [];
ranNums = [0,1,2,3,4,5,6,7,8];
// let i = 0;
let didHave;
addClickForPools();
function addClickForPools(){ //addEventListener
for(let i = 0; i < pools.length; i ){
pools[i].addEventListener("click", userMove);
function userMove(){
let h1 = document.createElement("H1");
let t = document.createTextNode("X")
h1.appendChild(t);
pools[i].appendChild(h1);
nums[i] = i;
computerMove();
removeClickForPools();
// pools[i].innerHTML =
function removeClickForPools(){
pools[i].removeEventListener("click", userMove);
}
}
}
}
function computerMove(){
randomNumber = randomNum();
let h1 = document.createElement("H1");
let t = document.createTextNode("O")
h1.appendChild(t);
pools[randomNumber].appendChild(h1);
}
function randomNum(){
let n = Math.floor(Math.random() * 9);
didHave = nums.includes(n);
while(didHave == true){
n = Math.floor(Math.random() * 9);
didHave = nums.includes(n);
}
nums.push(n);
return n
}
Ответ №1:
Чтобы уточнить ответ Гордона и почему смешивание nums.push(n)
и nums[i] = i
является проблемой .. nums.push(n)
всегда добавляется в конец nums
, поэтому, если nums
имеет 3 элемента, четвертый будет добавлен в конец. nums[i] = i
прямое назначение слоту, чтобы пользовательское перемещение могло переопределить перемещение компьютеров. Вот почему компьютер помещает O в слоты, которые он уже сыграл. Всегда используйте push
для добавления элементов в массив в JS.
Вторая проблема, которую я вижу, заключается в том, что randomNum()
также должна быть возможность возвращать 0, поскольку это представляет первую плитку, и компьютер должен иметь возможность ее воспроизводить.
Вам также необходимо проверить, должен ли компьютер вообще играть — остались ли какие-либо пустые плитки.
Ответ №2:
Вы добавляете номер пула в nums
в функции userMove()
через nums[i] = i;
, но в функции randomNum()
через nums.push(n);
. Вы должны использовать один и тот же способ в обоих методах.