Javascript 扫雷游戏,无法增加正确的单元格

标签 javascript arrays multidimensional-array

我正在用 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/

相关文章:

javascript - 在两个级别上使用 Mongoose 填充

java - 尝试在 Java 中的数组中创建 AddBefore 方法。不使用ArrayList

c++ - 在 C++ char 数组中打印元音

php - 根据特定键删除重复项

javascript - Angularjs 在 ng-repeat 中检查商品库存消息,在右侧商品索引中显示消息

javascript - 类型错误 : undefined is not a function

javascript - 如何在 PHP 中将 html 部分包含到所有页面中

arrays - 我在 Excel 和 VBA 中得到一个数组 "Type mismatch"

python - 即使文件只有一维,如何使 np.loadtxt 返回多维数组?

java - 在Java中初始化多维数组