我的Python迷宫生成程序似乎有问题。我正在尝试随机创建一条在选择点处分支的路径,并随其进行存储点。当迷宫走到尽头时,它将测试最高值,而不是将其弹出并转到下一个,从而对访问的点进行排序,直到到达不是死角的位置。但是,当我尝试将项目追加到我用来保存我曾经去过的空间的列表时,发生了一些奇怪的事情,实际上我从未见过。这是代码,查看该代码的最佳方法是将其运行一段时间,直到完全运行为止。我还没有真正找到解决死胡同问题的方法,所以如果有人也可以帮助我,那将很棒。
import random width = 8 def check(x,y): """Figures out the directions that Gen can move while""" if x-1 == -1: maze[x][y][3] = 0 if x+1 == 8: maze[x][y][1] = 0 if y+1 == 8: maze[x][y][2] = 0 if y-1 == -1: maze[x][y][0] = 0 if x + 1 in range(0,8) and visited[x+1][y] == False: maze[x][y][1] = 2 if x - 1 in range(0,8) and visited[x-1][y] == False: maze[x][y][3] = 2 if y + 1 in range(0,8) and visited[x][y+1] == False: maze[x][y][2] = 2 if y - 1 in range(0,8) and visited[x][y-1] == False: maze[x][y][0] = 2 def Gen(x,y): visited[x][y] = True past.append(current) dirs = [] check(x,y) print current if maze[x][y][0] == 2: dirs.append(0) if maze[x][y][1] == 2: dirs.append(1) if maze[x][y][2] == 2: dirs.append(2) if maze[x][y][3] == 2: dirs.append(3) pos = random.choice(dirs) print dirs maze[x][y][pos] = 1 if pos == 0: current[1] -= 1 if pos == 1: current[0] += 1 if pos == 2: current[1] += 1 if pos == 3: current[0] -= 1 if maze[x][y][0] == 4: maze[x][y][0] = 1 if maze[x][y][1] == 4: maze[x][y][1] = 1 if maze[x][y][2] == 4: maze[x][y][2] = 1 if maze[x][y][3] == 4: maze[x][y][3] = 1 print maze[x][y] print past, '\n' #Build the initial values for the maze to be replaced later maze = [] current = [0,0] visited = [] past = [] #Generate empty 2d list with a value for each of the xy coordinates for i in range(0,width): maze.append([]) for q in range(0, width): maze[i].append([]) for n in range(0, 4): maze[i][q].append(4) #Makes a list of falses for all the non visited places for x in range(0, width): visited.append([]) for y in range(0, width): visited[x].append(False) #Generates the walls #for q in range(0, width): # for i in range(0, width): # check(q, i) current = [0,0] while current != [7,7]: Gen(current[0], current[1]) print maze
如您所见,它从0,0开始,然后找出可能采取的路径。它从中随机选择,并将房间那侧的值设置为0,0到1,这意味着通过。2表示墙,0表示越界。4只是一个占位符,因为所有值都应在迷宫完全生成时填满。
如果有人可以帮助我,那将是巨大的,非常感谢。提前致谢。
我认为该current列表只是多次复制到中past。因此,您具有 同一 列表的多个副本。
current
past
解决方法:在该行past.append(current)(在下面的两行中def Gen(x,y):)将其更改为past.append(current[:])。
past.append(current)
def Gen(x,y):
past.append(current[:])
该符号list[:]创建列表的副本。从技术上讲,您正在创建整个列表的一部分。
list[:]
顺便说一句,更好的解决方案是不使用全局current变量:)