Estoy delante de un problema pero por más que lo reviso, no veo el fallo xd. Sé que es una tontería, pero a ver si alguien lo ve rápido y me ayuda.
Tengo el siguiente escenario:
Esto es una matriz de 2 dimensiones matrix[x][y]
Y tras ejecutar el siguiente código:
for x in range(51):
for y in range(51):
if matrix[x][y] == 0:
var t = 0
for d in directions:
t += count_cells(x,y,d)
if t == 3:
matrix[x][y] = 1
Obtengo este resultado NO deseado:
Lo que tendría que hacer ese código es buscar una pared que tenga 3 espacios libres a su alrededor, y borrar esa pared.
Si nos fijamos en la foto final, en alguna de esas paredes hace lo esperado (es decir, se borra), pero en alguna otras lo que hace es borrar la pared y las siguientes (marcado en rojo).
Creo que tengo que salir del bucle con un continue o un break en algún momento. Pero no doy con la tecla correcta. Alguien lo ve y me ayuda? Gracias
edit:
matrix[5][5] = 0
esto sería una pared en la posición 5,5
matrix[5][5] = 1
esto sería un hueco vacío en la posición 5,5
count_cells()
devuelve el valor de la celda de al lado, según la dirección d
edit 2:
El fallo lo veo claro. El bucle funciona bien, borra la pared, pero a la que avanza la x y la y, encuentra una nueva pared con t==3, fruto del ciclo anterior.
Por eso me borra tantas paredes de forma consecutiva.
Como evito este efecto? Que haga los cálculos sobre una copia de la matriz sin modificar?