Niveau Bonus – Labyrinthe Magique 🗝️
Pars à l’aventure dans un labyrinthe généré aléatoirement. Apprends la POO, la gestion de grilles, et crée un jeu captivant 100% Python, sans GUI ni JS !
Introduction
Les labyrinthe fascinent depuis toujours ! Dans ce challenge, tu vas coder un générateur de labyrinthe use du backtracking, puis un joueur console qui se déplace avec ZQSD et doit trouver la sortie.
Objectif
Au terme de cette activité, tu maîtriseras :
- La génération procédurale (algorithme de backtracking).
- La représentation d’une grille en Python (listes de listes).
- Le contrĂ´le du joueur via
input()et affichage ASCII. - La création d’une classe
Labyrintheet d’une classeJoueur.
Étapes Progressives
- Implémenter une grille vide de taille NxM avec des murs (#) et des chemins ( ).
- Coder l’algorithme de backtracking pour creuser le labyrinthe.
- Créer la classe
Joueuravec position initiale (0,0). - Afficher le labyrinthe + joueur (
P) dans la console. - Gérer les touches ZQSD pour déplacer le joueur.
- Détecter la victoire à l’arrivée (N-1,M-1).
- Ajouter un compte de déplacements et afficher le score.
- Bonus : chronomètre pour faire le meilleur temps.
Tutoriels & Astuces
Backtracking Simplifié
def creuser(laby, x, y):
directions = [(1,0),(-1,0),(0,1),(0,-1)]
random.shuffle(directions)
for dx,dy in directions:
nx, ny = x + 2*dx, y + 2*dy
if 0 <= nx < H and 0 <= ny < W and laby[nx][ny] == '#':
laby[x+dx][y+dy] = ' '
laby[nx][ny] = ' '
creuser(laby, nx, ny)
Affichage ASCII
for row in laby:
print(''.join(row))
Gestion des touches
move = input("Déplacer (Z/Q/S/D): ").upper()
if move == 'Z': x -= 1
elif move == 'S': x += 1
# etc.
Mini-Projet
Pousse ton labyrinthe plus loin :
- Génère des labyrinthe de taille variable par niveaux.
- Ajoute des pièges (T) qui renvoient au début.
- Collecte des clés (K) pour ouvrir des portes (D).
- Crée un système de vies limitées.
- Option chronomètre + hall of fame (scores.json).
Ressources
- Algorithme backtracking – GeeksforGeeks (en français)
- Python curses pour déplacements fluides
- Mix Python – Tutoriel console games
Solutions
Voir un squelette complet…
# initialisation du labyrinthe
H, W = 21, 21
laby = [['#']*W for _ in range(H)]
# creuser depuis (1,1)
laby[1][1] = ' '
creuser(laby, 1, 1)
# joueur
y, x = 1, 1
# boucle
while True:
afficher(laby, x, y)
m = input().upper()
# mouvements...
if (x,y) == (W-2,H-2):
print("Victoire !")
break