Javascript扫雷游戏,不能增加正确的单元格

时间:2015-09-16 00:55:39

标签: javascript arrays multidimensional-array

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

知道什么是错的吗?

2 个答案:

答案 0 :(得分:4)

问题出现在初始化数组的代码中

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

答案 1 :(得分:1)

我想问题出现在以下代码中:

  File "/path/to/my/script/refactor_static.py", line 92, in dynamicContent
    match = re.search(comparisonRegex, crawlFileContent, re.S)
  File "/usr/lib/python2.7/re.py", line 142, in search
    return _compile(pattern, flags).search(string)
  File "/usr/lib/python2.7/re.py", line 244, in _compile
    raise error, v # invalid expression
sre_constants.error: bad character range

您将相同的数组一遍又一遍地添加到数组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

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