Parece que tengo un problema con mi programa de generación de laberinto realizado en Python. Intento crear aleatoriamente un camino que se bifurca en puntos seleccionados, con los puntos almacenados a medida que avanza. Cuando el laberinto llegue a un callejón sin salida, se volverá a ordenar a través de los puntos visitados probando el valor superior que apareciendo y pasando al siguiente, hasta que llega a un punto donde no es un callejón sin salida. Sin embargo, cuando intento agregar elementos a la lista que estoy usando para guardar los espacios en los que he estado, sucede algo extraño, nunca antes lo había visto. Aquí está el código, y la mejor manera de verlo es ejecutarlo una y otra vez hasta que llegue hasta el final. Realmente no he encontrado una manera de contrarrestar el problema del callejón sin salida, así que si alguien puede ayudarme con eso también, sería genial.List.append() cambiando todos los elementos al elemento adjunto
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
Como puede ver, comienza en 0,0 y luego descubre los posibles caminos a seguir. Selecciona aleatoriamente de esos y establece el valor para ese lado de la sala en 0,0 a 1, lo que significa un pasaje. 2 significa pared y 0 significa fuera de límites. 4 es solo un marcador de posición, ya que todos los valores deben llenarse para cuando el laberinto se haya generado por completo.
Si alguien me puede ayudar, sería genial y muy apreciado. Gracias por adelantado.
¿Cuál es el comportamiento extraño que ves cuando usas list.append()? ¿Cuál es el resultado esperado? ¿Cuál es el resultado real? – dappawit
Cada elemento de la lista se convierte en el elemento recién agregado. Por ejemplo, después de 4 cuadrados del laberinto, los 4 elementos del pasado se cambian a cualquiera que sea el elemento anexo. Lo que estoy esperando es que sea una lista de la ruta que tomó el generador, por ejemplo, [[0,0] [0,1] [1,1] [2,1]] etc. –
Ok , por lo que el comportamiento actual (erróneo) es, por ejemplo, si tuviera '[[0,0], [0,0], [0,0]]' y añádase '[1,2]', la lista sería convertirse en: '[[1,2], [1,2], [1,2], [1,2]]'? – dappawit