【问题标题】:Javascript minesweeper game, can't increment the right cellJavascript扫雷游戏,无法增加正确的单元格
【发布时间】:2015-09-16 00:55:38
【问题描述】:

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

我有 2 个嵌套的 for 循环来遍历“结果”中的每一行和每一列,并检查“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

知道有什么问题吗?

【问题讨论】:

  • 我已经更正了您的帖子,将这款游戏称为“Minecraft”,改为“Minesweeper”。 Minecraft 是 3D 探索和建造游戏; Minesweeper 是一款 2D 寻找隐藏地雷的游戏,我很确定您想在这里询问。
  • 你试过了吗(结果[i][j])++; ?

标签: javascript arrays multidimensional-array


【解决方案1】:

问题出现在您初始化数组的代码的早期

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);
}

【讨论】:

    【解决方案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);
    }
    

    您一遍又一遍地将相同的数组添加到数组result。相反,您想为每一行创建一个新数组:

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

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

    【讨论】:

    • 我知道这很愚蠢。我现在觉得很笨。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2012-11-15
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-28
    • 2015-11-19
    相关资源
    最近更新 更多