我正在用 Javascript 编写一个简单的扫雷游戏。我有一个二维数组(称为“mineInput”)来保存所有地雷的位置。我有一个单独的数组“result”,它记录了与每个单元格相邻的地雷数量。
我有 2 个嵌套的 for 循环来遍历“result”中的每一行和每一列,并检查“mineInput”中的每笔销售。如果有地雷,我会使用 result[i][ 增加地雷计数j]++;
。但是我注意到奇怪的行为,整个列都递增,而不是只有一个单元格。
这个:
[ [ 0, 0, 0 ],
[ 0, 0, 0 ],
[ 0, 0, 0 ] ]
后跟:result[i][j]++;
变成:
[ [ 0, 1, 0 ],
[ 0, 1, 0 ],
[ 0, 1, 0 ] ]
代替:
[ [ 0, 0, 0 ],
[ 0, 1, 0 ],
[ 0, 0, 0 ] ]
这是完整的代码(请原谅控制台日志的数量过多)。 https://repl.it/BIYH/2
知道哪里出了问题吗?
最佳答案
问题出在您初始化数组的代码早期
var result = [];
var newRow = [];
for (var i = 0; i < rowCount; i++) {
newRow.push(0);
}
for (var i = 0; i < rowCount; i++) {
result.push(newRow);
}
您只创建了一个 newRow
数组并将其添加到您的 result
数组中 3 次。所以你可以这样显示:
newRow == [0,0,0]
result == [newRow, newRow, newRow]
当您递增时,您将添加到 newRow
数组中的一个单元格,它给出
newRow == [0,1,0]
result == [newRow, newRow, newRow] therefore
result = [[0,1,0],[0,1,0],[0,1,0]]
你可以这样解决:
var result = [];
for (var i = 0; i < rowCount; i++) {
// create a new array for each row
var newRow = [];
for (var i = 0; i < rowCount; i++) {
newRow.push(0);
}
result.push(newRow);
}
关于Javascript 扫雷游戏,无法增加正确的单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32598031/