我正在制作一个基于纯 JS 的井字游戏,但是在为玩家定义获胜条件时,我希望它在条件匹配时提醒用户。
当选中某个框时,如果 . X 玩的话它会变成红色,如果轮到 O 则变成蓝色,它还将盒子元素的 id 注册到一个数组中,该数组包含所有被占用的盒子,也取决于盒子是红色还是蓝色,它还标记了 id以及 0 , 1 (0 是红色 1 是蓝色)
所以数组看起来像这样 (11,0 22,1 33,0) 11 是第一行第一列 0 表示红色占据了该位置 (red = X)
过去,我尝试过 array.includes 来检查已单击的框是否在一行或对 Angular 线上,以及它们是否也被同一玩家检查。 我使用了 and 运算符,因此它会检查同一玩家是否连续检查了 3 个。这样,只有当连续三个都被检查时,它才会提醒获胜。我已将 bool 值存储在 redwincond bluewincond
function logic(clickedArr) {
redwinCond = clickedArr.contains(("11,0") && ("22,0") && ("33,0"));
bluewinCond = clickedArr.contains(("11,1") && ("22,1") && ("33,1"));
console.log(bluewinCond, redwinCond)
if (redwinCond === true) {
alert("Red wins !")
} else if (bluewinCond === true) {
alert("Blue wins !")
} else {
}
}
示例 redwinCond = clickedArr.contains(("11,0") && ("22,0") && ("33,0"));
预期结果:所有 3 个都被相同颜色的警报用户选中后
结果:仅当单击指定的第三个框 (33,0) 时才会发出警报。不检查其他 2 个是否也已检查
最佳答案
使用每个
:
["11,0", "22,0", "33,0"].every(s => clickedArr.includes(s));
关于javascript - 使用 array.includes() 检查数组中是否有超过 2 个内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55739406/