我正在尝试构建一个扫雷游戏,我正在编写用于在数组中查找相邻元素的代码,它可以工作,但问题是这些项目不会存储在数组中。它只存储第一个元素。
我无法将相邻的单元存储在板阵列中。它只存储第一个元素[5.3]而不存储其他相邻的单元格。
为简单起见,我将用简单的值替换炸弹阵列
这是我尝试过的
$(document).ready(function() {
adjSquares();
});
var mines = {
fields: [[4,4]],
x:4,
y:4
};
var board = {
x: null,
y: null,
fields: []
};
var adjSquares = function() {
var adj = [
[-1, 1],
[-1, 0],
[-1, -1],
[0, 1],
[0, -1],
[1, 1],
[1, 0],
[1, -1]
];
$.each(mines.fields, function(i, v) {
/* iterate through array or object */
var x =mines.fields.x;
var y=mines.fields.y;
$.each(adj, function(index, val) {
/* iterate through array or object */
var xx = board.x;
var yy = board.y;
if (x + val[0] > 0 && x + val[0] <= 9 && y + val[1] > 0 && y + val[1] <= 9) {
xx = x + val[0];
yy = y + val[1];
board.fields=[xx, yy];
}
});
});
console.log(board.fields);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
感谢Barmar,我现在可以将相邻的单元存储到board.fields数组中。我现在已经为mines.fields添加了更多的元素:[[4,4],[3,9],[2,1]]但是现在board.fields只存储了mines.fields的最后一个元素的相邻元素。 [2,1]而不是所有mines.fields的值
这是更新后的代码
$(document).ready(function() {
adjSquares();
for(var i=1;i<10;i++){
console.log(board.fields[i]); //shows 5,3}
}
});
var mines = {
fields: [[4,4],[3,9],[2,1]],
};
var board = {
x: null,
y: null,
fields: []
};
var adjSquares = function() {
var adj = [
[-1, 1],
[-1, 0],
[-1, -1],
[0, 1],
[0, -1],
[1, 1],
[1, 0],
[1, -1]
];
$.each(mines.fields, function(i, v) {
/* iterate through array or object */
$.each(adj, function(index, val) {
/* iterate through array or object */
var xx = board.x;
var yy = board.y;
if (v[0] + val[0] > 0 && v[0] + val[0] <= 9 && v[1] + val[1] > 0 && v[1] + val[1] <= 9) {
xx = v[0] + val[0];
yy = v[1] + val[1];
board.fields.push([xx, yy]);
}
});
});
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 0 :(得分:0)
boards.fields = [xx, yy];
应该是:
boards.fields.push([xx, yy]);
你的代码只是在每次循环时都覆盖了数组。您需要使用.push()
向数组添加新元素。
另一个问题是,每次通过外循环使用相同的mines.x
和mines.y
。你应该使用你正在迭代的元素:
var x = v[0];
var y = v[1];