2
我正在嘗試使用遞歸回溯算法編寫迷宮生成器。我已經採取了this article的示例代碼,並將它或多或少地轉換爲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
啊對了。非常感謝 – romainberger