Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript扫雷游戏,可以';t增加正确的单元格_Javascript_Arrays_Multidimensional Array - Fatal编程技术网

Javascript扫雷游戏,可以';t增加正确的单元格

Javascript扫雷游戏,可以';t增加正确的单元格,javascript,arrays,multidimensional-array,Javascript,Arrays,Multidimensional Array,我正在用Javascript编写一个简单的扫雷游戏。我有一个二维数组(称为“mineInput”)来保存所有地雷的位置。我有一个单独的数组“result”,它记录了每个单元格附近的地雷数量 我有两个嵌套的for循环来迭代“result”中的每一行和每一列,并检查“mineInput”中的每一个sell。如果有地雷,我用result[I][j]++;增加地雷计数。但是我注意到了奇怪的行为,整个列都增加了,而不是只增加一个单元格 这: 后跟:result[i][j]++; 变成: [ [ 0, 1,

我正在用Javascript编写一个简单的扫雷游戏。我有一个二维数组(称为“mineInput”)来保存所有地雷的位置。我有一个单独的数组“result”,它记录了每个单元格附近的地雷数量

我有两个嵌套的for循环来迭代“result”中的每一行和每一列,并检查“mineInput”中的每一个sell。如果有地雷,我用
result[I][j]++;
增加地雷计数。但是我注意到了奇怪的行为,整个列都增加了,而不是只增加一个单元格

这:

后跟:
result[i][j]++;

变成:

[ [ 0, 1, 0 ],
  [ 0, 1, 0 ],
  [ 0, 1, 0 ] ]
而不是:

[ [ 0, 0, 0 ],
  [ 0, 1, 0 ],
  [ 0, 0, 0 ] ]
这是完整的代码(请原谅控制台日志数量太多)。


知道哪里出了问题吗?

问题是在代码的早期初始化数组

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
数组中的一个单元格,该数组给出

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);
}
var结果=[];
对于(变量i=0;i
问题出现在代码的早期,您需要初始化阵列

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
数组中的一个单元格,该数组给出

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);
}
var结果=[];
对于(变量i=0;i
我想问题出在以下代码中:

var result = [];
var newRow = [];
for (var i = 0; i < rowCount; i++) {
  newRow.push(0);
}
for (var i = 0; i < rowCount; i++) {
  result.push(newRow);
}

数组在javascript中是一个对象,对象总是通过引用传递。

我想问题出在下面的代码中:

var result = [];
var newRow = [];
for (var i = 0; i < rowCount; i++) {
  newRow.push(0);
}
for (var i = 0; i < rowCount; i++) {
  result.push(newRow);
}

数组在javascript中是一个对象,对象总是通过引用传递。

我已经更正了您的帖子,将此游戏称为“雷击机”改为“扫雷机”。雷击机是3D探索和构建素材游戏;扫雷机是2D查找隐藏的地雷游戏,我很确定您一定会在这里询问。您试过了吗(结果[i][j])++;?我已经更正了你的帖子,把这个游戏称为“雷霆战舰”改为“扫雷舰”。雷霆战舰是一款3D探索和构建的东西游戏;扫雷舰是一款2D寻找隐藏地雷的游戏,我很确定你想问一下。你试过了吗(结果[i][j])++我知道那是件愚蠢的事。我现在觉得很愚蠢。谢谢。我知道那是件愚蠢的事。我现在觉得很愚蠢。谢谢