我正在制作一个随机的迷宫生成器,并且除了return语句之外,我已经完成了所有工作。最后,我最初的计划是能够对此进行一些迷宫求解算法的测试,因此可以很好地显示它,但必须将迷宫作为代码进行访问。该函数本身会修改数组中的对象并起作用,但是返回时,这些对象均处于原始状态。
//This is the code with the irrelevant stuff removed
function generate() {
var maze = []
for(let y = 0; y < tiles[1]; y++) {
let tempArr = [];
for(let x = 0; x < tiles[0]; x++) {
//l,u,r,and d are all whether or not you can pass through that side of the tile, v is whether or not the tile has been visited by the actual generation
tempArr.push([{l:true,u:true,r:true,d:true,v:false}]);
}
maze.push(tempArr);
//After this point, the array that is returned does not change
}
//Builds the walls on the edge of the square
for(let y = 0; y < maze.length; y++) {
for(let x = 0; x < maze[y].length; x++) {
if(y == 0) {
maze[y][x].u = false;
}
if(x == 0) {
maze[y][x].l = false;
}
if(y == tiles[1]-1) {
maze[y][x].r = false;
}
if(x == tiles[0]-1) {
maze[y][x].d = false
}
}
}
let _x = 0;
let _y = 0;
for(let i = 0; i < tiles[0]*tiles[1]; i++) {
//None of these changes are visible in the returned array
maze[_y][_x].v = true;
let running = true;
while(running) {
maze[_y][_x].v = true;
let random = Math.floor(Math.random()*4)+1;
if(random == 1) {//This is repeated for 2, 3, and 4
if(maze[_y][_x-1] && !maze[_y][_x-1].v) {
maze[_y][_x].l = true;
maze[_y][_x-1].r = true;
_x -= 1;
continue;
} else if(maze[_y][_x+1] && !maze[_y][_x+1].v) {
maze[_y][_x].r = true;
maze[_y][_x+1].l = true;
_x += 1;
continue;
} else {
random++
}
}
}
}
return maze; //This returns the original array, regardless of any changes made
}
这不会给我带来任何错误,但是在3 x 3迷宫的情况下,我希望得到以下结果:
[[{u:false,l:false,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:false,l:true,d:true,r:false,v:true}]],
[[{u:false,l:false,d:true,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:true,l:true,d:false,r:false,v:true}]],
[[{u:true,l:false,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:true,v:true}],[{u:false,l:true,d:false,r:false,v:true}]]
但获得仅包含以下内容的数组:
{d:true,l:true,r:true,u:true,v:false}