我决定摆脱教程地狱,通过自己制作一个 X an O'S(井字棋)游戏来挑战自己。如下所示。我已经成功地实现了单击时显示 X 和 O 的功能。但现在我需要启用 X 和 O 在每次单击时交替显示。我正在尝试创建一个数组,其长度在每次单击按钮时都会增加。如果数组长度为偶数,则显示 O;如果数组长度为奇数,则显示 X。但每次点击时数组的长度仅为 1。如何让数组的大小在每次点击时实际增加?
此外,由于某些奇怪的原因,每次奇怪的点击时都不会显示 X。可能是什么问题?
JavaScript代码:
for (let num = 1; num <= 9; num++) {
const text = document.querySelector("#box" + num + " h1");
const box = document.querySelector("#box" + num);
// let boxCounted = document.getElementsByClassName("square");
//current click
const xclick = function setToX() {
text.innerHTML = "X";
};
//next click
const oclick = function setToO() {
text.innerHTML = "O";
};
let trackCounter = [];
let clickcount = 0;
box.onclick = () => {
trackCounter.push(clickcount);
console.log(trackCounter);
if (trackCounter.length % 2 == 0) {
box.onclick = oclick; //not carried out/working
console.log("Even");
} else if (trackCounter.length % 2 == 1) {
box.onclick = xclick; //not carried out/working
console.log("odd");
} else {
console.log("error");
}
};
}
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>TicTacToe</title>
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<section id="xosection">
<div id="xogrid">
<div class="row">
<div id="box1" class="square">
<h1></h1>
</div>
<div id="box2" class="square">
<h1></h1>
</div>
<div id="box3" class="square">
<h1></h1>
</div>
</div>
<div class="row">
<div id="box4" class="square">
<h1></h1>
</div>
<div id="box5" class="square">
<h1></h1>
</div>
<div id="box6" class="square">
<h1></h1>
</div>
</div>
<div class="row">
<div id="box7" class="square">
<h1></h1>
</div>
<div id="box8" class="square">
<h1></h1>
</div>
<div id="box9" class="square">
<h1></h1>
</div>
</div>
</div>
</section>
<script src="index2.js"></script>
</body>
</html>
这里是 github 上代码之前的一些进展的链接: 文字
如前所述,我尝试使用数组,希望其长度会增加。但事实并非如此。
我可能采用了一些糟糕的编码实践——比如使用 for 循环来命名变量?如果有,请告诉我,并向我展示最佳实践。但也向我展示如何解决我的思维过程。提前非常感谢您
编辑:我删除了一个名为loopCount的变量。当我第一次问这个问题时它就在那里。
我尝试将 trackcounter 数组设置为全局或外部循环,以便您的循环将在每次 for 循环迭代中更新
var trackCounter = [];
for (let num = 1; num <= 9; num++) {
const text = document.querySelector("#box" + num + " h1");
const box = document.querySelector("#box" + num);
// let boxCounted = document.getElementsByClassName("square");
//current click
const xclick = function setToX() {
text.innerHTML = "X";
};
//next click
const oclick = function setToO() {
text.innerHTML = "O";
};
//let trackCounter = [];
let clickcount = 0;
box.onclick = () => {
trackCounter.push(clickcount);
console.log(trackCounter);
if (trackCounter.length % 2 == 0) {
box.onclick = oclick; //not carried out/working
console.log("Even");
} else if (trackCounter.length % 2 == 1) {
box.onclick = xclick; //not carried out/working
console.log("odd");
} else {
console.log("error");
console.log(countResult);
}
};
}
尝试一下,希望它能解决您的问题