Python – Niveau Bonus : Labyrinthe Magique 🗝️

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 Labyrinthe et d’une classe Joueur.

Étapes Progressives

  1. Implémenter une grille vide de taille NxM avec des murs (#) et des chemins ( ).
  2. Coder l’algorithme de backtracking pour creuser le labyrinthe.
  3. Créer la classe Joueur avec position initiale (0,0).
  4. Afficher le labyrinthe + joueur (P) dans la console.
  5. Gérer les touches ZQSD pour déplacer le joueur.
  6. Détecter la victoire à l’arrivée (N-1,M-1).
  7. Ajouter un compte de déplacements et afficher le score.
  8. 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).

🚀 Je commence l'aventure !

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
© 2025 LFI Dubai – Niveau Bonus Labyrinthe. Bonne aventure !