Projets : structure par projet (jeu_de_la_vie, labyrinthe, mastermind, wator)
This commit is contained in:
88
Projets/labyrinthe/JALONS.md
Normal file
88
Projets/labyrinthe/JALONS.md
Normal file
@@ -0,0 +1,88 @@
|
||||
# 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 `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 :**
|
||||
```
|
||||
+--+--+--+
|
||||
| | |
|
||||
+ +--+ +
|
||||
| | |
|
||||
+--+--+--+
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 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) ?
|
||||
|
||||
---
|
||||
|
||||
## 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
|
||||
Reference in New Issue
Block a user