4.9 KiB
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
- Comprendre comment utiliser les arbres pour structurer une narration.
- Appliquer les concepts de POO pour modéliser des chapitres et des choix.
- 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
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
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
# 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 :
- Inventaire : Ajoutez une classe
Personnagepour gérer un inventaire, des points de vie, etc. (Revoir l'évaluation de POO...) - Sauvegarde : Implémentez un système de sauvegarde pour reprendre l’histoire au dernier chapitre. (Quelle structure ?)
- 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
- Travaillez en groupes pour créer vos propres livres interactifs.
- Testez vos histoires entre vous pour identifier les bugs.
- Présentation finale pour comparer les projets.
Auteur : Florian Mathieu
Licence CC BY NC
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.