我在做Tac脚趾游戏,我有个问题。我注意到,如果我开始从“0”开始计数,可获胜的情况是有三个数字相同(例如,"0,1,2"(1-0=1,2-1=1)或"0,4,8"(4-0=4,8-4=4)或"1,4,7"(4-1=3,7-4=3)。数字是从0到8的方框坐标。
不知道如何检查是否有这样的数字。
//html
<div class="container">
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
<div class="box"></div>
</div>
//js
const BOXES = document.querySelectorAll('.box');
let turn = true;
let opened = [1, 1, 1, 1, 1, 1, 1, 1, 1];
let x = [];
let o = [];
for (let i = 0; i < BOXES.length; i++) {
BOXES[i].addEventListener('click', () => {
if (turn == true && opened[i] == 1) {
BOXES[i].innerHTML = "<p>X</p>";
x.push(i);
x.sort();
}
if (turn == false && opened[i] == 1) {
BOXES[i].innerHTML = "<p>O</p>";
o.push(i);
o.sort();
}
opened[i] = 0;
turn = !turn
})
}
我将粘贴每个x坐标到数组"x“(x.pushi),并将o坐标粘贴到"o”数组(o.pushi),但我不知道如何在数组中搜索同样不同的数字。
发布于 2019-01-11 17:07:52
您可以创建两个函数,一个用于生成“差异”数组,另一个用于检查所有这些数字是否都是相同的。见下面的代码:
const array = [1, 4, 7];
// Function to get differences
function getDiffs(array) {
let diffs = [];
for(let i=0; i<array.length; i++) {
if(i > 0) {
diffs.push(array[i] - array[i-1]);
}
}
return diffs;
}
// Function to compare those numbers to see if they are the same
function checkSameValue(diffs) {
let item = diffs[0];
for(let i=0; i< diffs.length; i++) {
if(diffs[i] !== item) {
return false;
}
}
return true;
}
希望这能帮上忙!
发布于 2019-01-11 16:47:15
像这样的东西会管用的。
function didWin(arr) {
let len = arr.length; // I like checking length once because it's O(n). Probably won't matter for your game, though.
if (len < 3)
return false; // No win if less than 3 moves
var firstDiff = arr[1] - arr[0];
for (var i = 1; i < len - 1; ++i) { // We don't check the first (already done) or the last (no arr[len] element)
if (arr[i+1] - arr[i] != firstDiff)
return false; // We know we are done as soon as the difference is not equal
}
return true; // We have now checked that all differences are equal
}
https://stackoverflow.com/questions/54150546
复制相似问题