Files
TermNSI/Projets/labyrinthe/JALONS.md

89 lines
2.8 KiB
Markdown
Raw Normal View History

2026-06-18 19:03:42 +02:00
# Jalons - Labyrinthe
> Progression suggérée sur ~10 séances (septembre → février)
---
2026-06-18 19:03:42 +02:00
## Phase 1 - Modélisation (Séances 1-2)
**Objectif :** Représenter un labyrinthe en Python.
- Étudier la classe `Maze` dans `../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 :**
```
+--+--+--+
| | |
+ +--+ +
| | |
+--+--+--+
```
---
2026-06-18 19:03:42 +02:00
## Phase 2 - Génération (Séances 3-4)
**Objectif :** Générer un labyrinthe parfait aléatoirement.
**Algorithme DFS récursif (backtracking) :**
1. Partir d'une cellule aléatoire, la marquer comme visitée
2. Choisir aléatoirement un voisin non visité
3. Supprimer le mur entre les deux cellules
4. Appeler récursivement depuis le voisin
5. 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) ?
---
2026-06-18 19:03:42 +02:00
## 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.
---
2026-06-18 19:03:42 +02:00
## 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
---
2026-06-18 19:03:42 +02:00
## 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
---
2026-06-18 19:03:42 +02:00
Auteur : Florian Mathieu - Licence CC BY NC