我正在使用javascript打扫扫雷游戏。导致我麻烦的机制是Mine对象内部的for循环,它将isBomb变量设置为true或false。
var board = [];
var bombs = [];
var mines;
function findNeighbors(x,y) {
return 'work in progress'
}
function setup() {
// create bombs
for (var i = 0; i < 45; i++) {
var position = [floor(random(0,15)),floor(random(0,15))];
if (!bombs.includes(position)) {
bombs[i] = position;
}
}
// create board
for (var y = 0; y < 15; y++) {
board[y] = new Array();
for (var x = 0; x < 15; x++) {
board[y][x] = new Mine(y,x);
}
}
}
console.log(board);
console.log(bombs);
function Mine(x,y) {
this.x = x;
this.y = y;
this.neighbors = findNeighbors(this.x,this.y);
for (var iter = 0; iter < 45; iter++) {
if (bombs[iter] == [this.x,this.y]) {
this.isBomb = true;
}
else {
this.isBomb = false;
}
}
this.show = function() {
return 'show'
}
this.setValue = function(value) {
this.value = value;
return value;
}
}
例如,当我在控制台中输入炸弹[44]时,它会返回类似[5,11]的内容,但当我检查炸弹[44] = [5,11]时它将始终返回false。是否有一种特定的方法来表示[5,11]数组以便识别它?
答案 0 :(得分:1)
这是因为你无法在javascript中比较两个数组。你可以做的是使用join(),然后在一步中比较为字符串,
bombs[44].join(",") == [5,11].join(",")
或者您可以单独比较数组的内容
答案 1 :(得分:0)
尝试将for-loop中的条件表达式更改为(var i = 0; i&lt; 45; i ++)to for(var i = 0; i&lt; arr.length; i ++)
这将使循环,遍历整个数组长度,更少的错误空间。 for循环可能容易出错,而且很乏味。