2.8 KiB
2.8 KiB
Jalons - Labyrinthe
Progression suggérée sur ~10 séances (septembre → février)
Phase 1 - Modélisation (Séances 1-2)
Objectif : Représenter un labyrinthe en Python.
- Étudier la classe
Mazedans../src/maze.py: comment est codé le labyrinthe ? Quelles méthodes sont disponibles ? - Choisir une représentation : dictionnaire
{cellule: [voisins accessibles]}ou grille 2D avec murs - Écrire
creer_grille(n, m)→ grille n×m avec tous les murs fermés - Écrire
afficher(grille)→ affichage terminal avec+,-,|,
Exemple de représentation :
+--+--+--+
| | |
+ +--+ +
| | |
+--+--+--+
Phase 2 - Génération (Séances 3-4)
Objectif : Générer un labyrinthe parfait aléatoirement.
Algorithme DFS récursif (backtracking) :
- Partir d'une cellule aléatoire, la marquer comme visitée
- Choisir aléatoirement un voisin non visité
- Supprimer le mur entre les deux cellules
- Appeler récursivement depuis le voisin
- Si aucun voisin non visité : revenir en arrière (backtrack)
- Implémenter
generer_dfs(grille, cellule)de manière récursive - Tester sur un labyrinthe 5×5, puis 20×20
- Observer : le labyrinthe est-il toujours parfait (sans cycle) ?
Phase 3 - Résolution (Séances 5-6)
Objectif : Trouver le chemin de l'entrée à la sortie.
- Implémenter
resoudre_bfs(grille, entree, sortie)→ plus court chemin (largeur d'abord) - Implémenter
resoudre_dfs(grille, entree, sortie)→ premier chemin trouvé (profondeur d'abord) - Comparer les deux : même longueur de chemin ? Même rapidité ?
- Afficher le chemin dans le labyrinthe (ex. cellules marquées
*)
Point clé : dans un labyrinthe parfait, BFS et DFS trouvent tous les deux le chemin (unique), mais BFS garantit qu'il est le plus court.
Phase 4 - Affichage graphique (Séances 7-8)
Objectif : Visualiser la génération et la résolution.
- Choisir une bibliothèque graphique (Pyxel, tkinter, pygame)
- Afficher le labyrinthe avec des rectangles
- Animer la génération cellule par cellule
- Afficher le chemin solution en couleur
Phase 5 - Finitions et documentation (Séances 9-10)
Objectif : Préparer le rendu et le Grand Oral.
- Nettoyer le code, ajouter des docstrings
- Mesurer les performances : temps de génération selon la taille (10×10, 50×50, 100×100)
- Compléter le
SUIVI.md - Préparer 2-3 questions pour le Grand Oral
Idées d'extension avancée
- A* : heuristique distance de Manhattan pour guider la recherche vers la sortie
- Kruskal : algorithme de génération alternatif (union-find)
- Résolution par algo génétique : utiliser le framework du projet
mastermind/ - Labyrinthe 3D : extension vers une grille à 3 dimensions
Auteur : Florian Mathieu - Licence CC BY NC