15 views
''' 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)