我有一个函数可以生成一个随机迷宫,给出一个行和列的数字,所有内容都被完美地雕刻出来......我想要做的是删除/删除任何可能有的墙和封闭在迷宫内迷宫没有'死胡同'。我尝试了以下但看起来它不起作用......任何人都会看到我可能出错的地方
def random_maze_without_deadends(row,cols):
maze = random_maze(row,cols) #this will generate a random maze and carve out a maze where all cells are defaulted to no value
for i in xrange(row):
for j in xrange(cols):
z = maze.open_directions(i,j) # assume maze.open_direction open's up the maze by Returning a list of open (non-wall) directions from a cell given by row column
walls = ['N','S','W','E'] #preassigned values for north south west and east respectively to check open 'walls' of cells
if i == 0:
walls.remove('N')
if i == i -1:
walls.remove('S')
if j == 0:
walls.remove('W')
if j == j-1:
walls.remove('E')
if len(z) == 1:
walls.remove(z[0])
return maze
以下是以前的代码使用的内容:
class MazeCell:
def __init__(self, r, c):
self.row = r
self.col = c
self.directions = ["N", "S", "E", "W"]
random.shuffle(self.directions)
def random_maze(rows,cols):
maze = Maze(rows, cols)
carve_passages_stack(maze)
return maze
我的主要问题基本上是deadend函数的逻辑有什么问题?感谢您试图找出我的意思。
更新 - 这是我目前的输出:
_________
| | _ | |
| |_ | | |
|_____| | |
| __x|_ | <---This part should get opened up---where the x is as north south and east are clos
|_________|
答案 0 :(得分:1)
做完之后
walls.remove(z[0])
你的墙壁阵列现在只包含作为你死路一条墙的方向。但是你不要编辑迷宫来取出剩下的一面墙。
此外,您应该在初始化z后立即进行检查,以确保len(z) == 1
- 如果不是,continue
到下一个单元格。这样可以节省处理时间。
答案 1 :(得分:0)
walls
只是一个列表。
walls = ['N','S','W','E']
walls.remove(z[0])
会影响walls
,但不会改变maze
。
您需要检查Maze对象使用的方法和/或数据结构,并确定在(i,j)
时如何从单元格len(z) == 1
中删除墙。
此外,return maze
行需要降级,以便random_maze_without_deadends
始终返回迷宫。