From 121b48f52cb5a95cd7f6074a063e6a10b0384099 Mon Sep 17 00:00:00 2001 From: Florian Mathieu Date: Thu, 23 Jan 2025 22:36:44 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20TP=20Livre=20dont=20vous=20=C3=AAtes=20?= =?UTF-8?q?le=20h=C3=A9ro?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Arbres/TP_LDVELH.md | 147 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 147 insertions(+) create mode 100644 Arbres/TP_LDVELH.md diff --git a/Arbres/TP_LDVELH.md b/Arbres/TP_LDVELH.md new file mode 100644 index 0000000..d0825eb --- /dev/null +++ b/Arbres/TP_LDVELH.md @@ -0,0 +1,147 @@ +### Projet : Créer un "Livre dont vous êtes le héros" + +> Objectif : écrire une histoire où les choix du lecteur influencent le déroulement de l'intrigue. + +--- + +## Objectifs du projet +1. Comprendre comment utiliser les **arbres** pour structurer une narration. +2. Appliquer les concepts de **POO** pour modéliser des chapitres et des choix. +3. Développer un programme qui raconte une histoire interactive. + +--- + +## Étape 1 : L'arbre narratif + +Un **livre dont vous êtes le héros** peut être représenté par un **arbre** : +- Chaque **chapitre** est un **nœud**. +- Chaque **choix** est une **branche** menant à un autre nœud. +- Une **fin d'histoire** correspond à une **feuille** (un nœud sans enfants). + +### Exemple d'arbre +Voici un exemple d'arbre narratif simple : + +``` + Introduction + / \ + Aller au nord Aller au sud + | | + Explorer la cabane Trouver un trésor (fin) + | + Fin +``` + +Dans cet arbre : +- Le chapitre d'introduction propose 2 choix. +- Chaque choix mène à un autre chapitre (ou à une fin). + +--- + +## Étape 2 : Modélisation avec la POO + +On va utiliser des **classes** pour structurer notre code. + +### Classe `Chapitre` +Un chapitre représente une étape de l'histoire. Voici ses caractéristiques : +- **Attributs** : + - `texte` : le contenu du chapitre. + - `choix` : un dictionnaire qui associe une option à un chapitre suivant. +- **Méthodes** : + - `ajouter_choix(choix, chapitre_suivant)` : ajoute un choix possible. + - `suivant(choix)` : retourne le chapitre correspondant au choix. + +### Classe `Livre` +Le livre gère toute l'histoire. Voici ses caractéristiques : +- **Attributs** : + - `chapitre_depart` : le premier chapitre de l'histoire. +- **Méthodes** : + - `lancer()` : démarre l'histoire et permet au lecteur de faire ses choix. + +--- + +## Étape 3 : Implémentation + +Voici un **squelette de code** à compléter pour commencer. + +### Classe `Chapitre` +```python +class Chapitre: + def __init__(self, texte): + self.texte = texte + self.choix = {} # Dictionnaire pour les choix possibles + + def ajouter_choix(self, choix, chapitre_suivant): + self.choix[choix] = chapitre_suivant + + def suivant(self, choix): + return self.choix.get(choix, None) +``` + +### Classe `Livre` +```python +class Livre: + def __init__(self, chapitre_depart): + self.chapitre_depart = chapitre_depart + + def lancer(self): + chapitre_actuel = self.chapitre_depart + while chapitre_actuel: + print(chapitre_actuel.texte) + if not chapitre_actuel.choix: + print("Fin de l'histoire.") + break + print("\nChoix disponibles :") + for i, choix in enumerate(chapitre_actuel.choix.keys(), 1): + print(f"{i}. {choix}") + choix_utilisateur = input("Votre choix : ") + chapitre_actuel = chapitre_actuel.suivant(choix_utilisateur) +``` + +--- + +## Étape 4 : Construire une petite histoire + +Essayons de créer une histoire simple avec ces classes. + +### Exemple +```python +# Création des chapitres +intro = Chapitre("Vous êtes dans une forêt sombre. Que voulez-vous faire ?") +aller_vers_nord = Chapitre("Vous trouvez une cabane abandonnée.") +aller_vers_sud = Chapitre("Vous tombez dans un trou et trouvez un trésor. Fin !") +explorer_cabane = Chapitre("Vous entrez dans la cabane. Fin !") + +# Ajout des choix +intro.ajouter_choix("Aller vers le nord", aller_vers_nord) +intro.ajouter_choix("Aller vers le sud", aller_vers_sud) +aller_vers_nord.ajouter_choix("Explorer la cabane", explorer_cabane) + +# Création du livre et lancement +livre = Livre(intro) +livre.lancer() +``` + +--- + +## Étape 5 : Ajouter des fonctionnalités avancées + +Pour ceux qui veulent aller plus loin, voici des idées de fonctionnalités bonus : +1. **Inventaire** : Ajoutez une classe `Personnage` pour gérer un inventaire, des points de vie, etc. (Revoir l'évaluation de POO...) +2. **Sauvegarde** : Implémentez un système de sauvegarde pour reprendre l’histoire au dernier chapitre. (Quelle structure ?) +3. **Génération aléatoire** : Ajoutez des éléments imprévisibles dans l’histoire grâce à des choix aléatoires (rappel : `random`). + +--- + +## Étape 6 : Présentation des projets + +1. Travaillez en groupes pour créer vos propres livres interactifs. +2. Testez vos histoires entre vous pour identifier les bugs. +3. **Présentation finale** pour comparer les projets. + +--- + +Auteur : Florian Mathieu + +Licence CC BY NC + +Licence Creative Commons
Ce cours est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International. \ No newline at end of file