'''
créer un labyrinthe de X pièces sur Y pièces entourées de murs
sous la forme d'une liste de listes contenant un entier 0-1-2 (pièce, mur ouvert, mur fermé)
'''
def gene_laby(X, Y):
largeur = 2 * X + 1 # nombre de cases en largeur
hauteur = 2 * Y + 1 # nombre de cases en hauteur
laby = [] # initialisation du labyrinthe
for j in range(hauteur):
laby.append([])
for i in range(largeur):
if j%2 != 0 and i%2 != 0:
laby[-1].append(0) # pièce
else :
laby[-1].append(2) # mur
return laby
X,Y = 10,10
taille_case = 4
laby_test = gene_laby(X, Y)
def affiche_laby(labyrinthe):
global X, Y, taille_case
'''
on utilise la fonction print pour représenter le labyrinthe
le symbole '#' représente un mur, et ' ' pour une pièce
9580╬ 9553║ 9552═
'''
sortie = ""
for j in range(len(labyrinthe)):
for i in range(len(labyrinthe[j])):
if labyrinthe[j][i] in (0, 1):
sortie += " "
else:
sortie += "#"
sortie += "\n"
print(sortie)
```
fgf
```python
affiche_laby(laby_test)
def bascule_porte(labyrinthe, x, y):
if labyrinthe[y][x] == 0:
return False
if x%2 == 0 and y%2 == 0:
return False
if x == 0 or x == len(labyrinthe[0]) - 1 or y == 0 or y == len(labyrinthe):
return False
if labyrinthe[y][x] == 1 :
labyrinthe[y][x] = 2
else :
labyrinthe[y][x] = 1
return True
print(laby_test[1])
print(bascule_porte(laby_test, 2, 1))
print(laby_test[1])
affiche_laby(laby_test)
'''
on commence par générer tableau_laby qui est une liste de liste
'''
tableau_laby = [[0] * X for i in range(Y)]
'''
on commence par générer tableau_laby qui est une liste de liste
'''
from random import randrange, choice
def huntandkill(tableau_laby, laby_test):
global X, Y
actuelle = randrange(0, X), randrange(0, Y) # on choisit un point de départ au hasard
tableau_laby[actuelle[1]][actuelle[0]] = 1 # je mets à 1 la case d'où je démarre
choix = [[0,-1], [0,1], [-1, 0], [1,0]]
while len(choix) > 0:
direction = choice(choix) # on choisit une direction
choix.remove(direction)
nouvelle_case = [actuelle[0] + direction[0], actuelle[1] + direction[1]] # coordonnées de la case à tester
if nouvelle_case[0] >= 0 and nouvelle_case[0] < X and nouvelle_case[1] >= 0 and nouvelle_case[1] < Y:
# alors la nouvelle case est valide
if tableau_laby[nouvelle_case[1]][nouvelle_case[0]] == 0:
# alors la case n'a pas encore été visitée
bascule_porte(laby_test, 2 * actuelle[0] + 1 + direction[0], 2 * actuelle[1] + 1 + direction[1])
actuelle = nouvelle_case
tableau_laby[actuelle[1]][actuelle[0]] = 1 # je mets à 1 la case d'où je démarre
choix = [[0,-1], [0,1], [-1, 0], [1,0]] # je réinitialise les choix de direction
# la première partie s'est arrêtée, je cherche la première case non visitée du tableau
trouve = False
for j in range(Y):
for i in range(X):
if tableau_laby[j][i] == 0:
trouve = True
break
if trouve == True:
break
# alors je redémarre de là et j'ouvre le mur de la case adjacente
actuelle = [i, j]
tableau_laby[actuelle[1]][actuelle[0]] = 1 # je mets à 1 la case d'où je démarre
choix = [[0,-1], [0,1], [-1, 0], [1,0]]
while len(choix) > 0:
direction = choice(choix) # on choisit une direction
choix.remove(direction)
nouvelle_case = [actuelle[0] + direction[0], actuelle[1] + direction[1]] # coordonnées de la case à tester
if nouvelle_case[0] >= 0 and nouvelle_case[0] < X and nouvelle_case[1] >= 0 and nouvelle_case[1] < Y:
# alors la nouvelle case est valide
if tableau_laby[nouvelle_case[1]][nouvelle_case[0]] == 0:
# alors la case n'a pas encore été visitée
bascule_porte(laby_test, 2 * actuelle[0] + 1 + direction[0], 2 * actuelle[1] + 1 + direction[1])
actuelle = nouvelle_case
tableau_laby[actuelle[1]][actuelle[0]] = 1 # je mets à 1 la case d'où je démarre
choix = [[0,-1], [0,1], [-1, 0], [1,0]] # je réinitialise les choix de direction
huntandkill(tableau_laby, laby_test)
affiche_laby(laby_test)