3

我正在尝试使用递归回溯算法编写迷宫生成器。我已经从这篇文章中获取了示例代码,并且或多或少地将其翻译成 javascript。但它似乎不起作用,因为生成的网格中的所有行都是相同的。

我对这种事情一无所知,我被困在这里。任何人都可以看到我做错了什么?

编辑jsfiddle

// initialize the grid
var grid = []
  , cells = []
  // duplicate to avoid overriding
  , w = width
  , h = height
while (w--) cells.push(0)
while (h--) grid.push(cells)

var N = 1
  , S = 2
  , E = 4
  , W = 8
  , dirs = ['N', 'E', 'S', 'W']
  , dirsValue = { N: N, E: E, S: S, W: W }
  , DX = { E: 1, W: -1, N: 0, S: 0 }
  , DY = { E: 0, W: 0, N: -1, S: 1 }
  , OPPOSITE = { E: W, W: E, N: S, S: N }

function carve_passages_from(cx, cy, grid) {
  var directions = shuffle(dirs)

  directions.forEach(function(direction) {
    var nx = cx + DX[direction]
      , ny = cy + DY[direction]

    if (ny >= 0 && ny <= (grid.length - 1) && nx >= 0
      && nx <= (grid.length - 1) && grid[ny][nx] === 0) {
      grid[cy][cx] += dirsValue[direction]
      grid[ny][nx] += OPPOSITE[direction]
      carve_passages_from(nx, ny, grid)
    }
  })
}

carve_passages_from(0, 0, grid)

return grid
4

1 回答 1

2

问题在于声明:

while (h--) grid.push(cells)

您对grid.

要解决它,您应该为每一行创建一个新数组:

while (h--) grid.push(new Array(w))

最后,如有必要undefined,将网格中的所有内容替换为 。0

于 2013-11-03T20:50:56.243 回答