Mini-Projet : Le Gestionnaire de Compagnons de Donjon¶
1. Le Concept¶
L’objectif est de créer un programme qui permet de gérer une équipe de héros (Guerriers, Mages, Archers) qui partent explorer un donjon. On doit pouvoir ajouter des héros, les faire agir, et sauvegarder/charger l’état de l’équipe dans un fichier texte pour ne pas perdre la progression.
2. Structure des Classes (L’architecture OO)¶
Le projet repose sur une hiérarchie de classes :
-
Classe de base :
Hero- Attributs :
nom(string),points_de_vie(int). - Méthodes :
__init__: Initialise le nom et les PV (points de vie).__repr__: Doit retourner une chaîne de caractères formatée pour la sauvegarde (ex:Hero|Aragorn|100).action(): Une méthode qui affiche un message générique (ex: “[Nom] se prépare…”).
- Attributs :
-
Classes enfants (Héritage) :
- Classe
Guerrier(hérite deHero) :- Attribut :
force(int). __init__: Appellesuper().__init__et initialise la force.__repr__: Retourne le type, le nom, les PV et la force (ex:Guerrier|Aragorn|100|15).action()(Polymorphisme) : Affiche “[Nom] donne un coup d’épée puissant !”
- Attribut :
- Classe
Magicien(hérite deHero) :- Attribut :
mana(int). __init__: Appellesuper().__init__et initialise le mana.__repr__: Retourne le type, le nom, les PV et le mana (ex:Magicien|Gandalf|80|50).action()(Polymorphisme) : Affiche “[Nom] lance un sort de feu !”
- Attribut :
- Classe
3. La Persistance (Fichiers Texte)¶
Le fichier de sauvegarde (ex: donjon.txt) doit utiliser le format Type|Nom|PV|AttributSpecial. Exemple de contenu
du fichier :
Fonctions de gestion de fichier :
sauvegarder(liste_heros, nom_fichier): Parcourt la liste des objets et écrit chaquerepr(objet)sur une nouvelle ligne dans le fichier.charger(nom_fichier): Lit le fichier ligne par ligne. Pour chaque ligne :- On découpe la ligne avec le séparateur
|. - On regarde le premier élément (le type).
- On recrée l’objet correspondant avec les autres informations (en convertissant les nombres en
int). - On retourne la liste des objets recréés.
- On découpe la ligne avec le séparateur
4. L’Interface Console (Le Menu)¶
Le programme doit tourner dans une boucle while et proposer les options suivantes :
- Afficher l’équipe : Parcourt la liste et affiche les informations de chaque héros (vous pouvez redéfinir
__str__dans chaque classe et l’utiliser pour l’affichage). - Ajouter un héros : Demander à l’utilisateur le type (1: Guerrier, 2: Magicien), le nom, et les statistiques de base.
- Faire agir l’équipe (Polymorphisme) : Parcourir la liste des héros et appeler la méthode
.action()de chacun. - Sauvegarder l’équipe : Écrire la liste dans le fichier.
- Charger l’équipe : Lire le fichier et remplacer la liste actuelle par celle chargée.
- Quitter.
5. Extensions¶
Si vous avez terminé le projet et que vous souhaitez aller plus loin, voici deux défis supplémentaires pour tester votre logique :
1. Ajout de la classe Archer (Héritage)
- Créez une nouvelle classe enfant
Archerqui hérite deHero. - L’archer possède un attribut unique :
portee(la distance de tir). - Redéfinissez sa méthode
__repr__pour inclure cette donnée afin qu’elle soit sauvegardable dans le fichier. - Redéfinissez sa méthode
action()pour qu’elle affiche : “[Nom] tire une flèche à une distance de [portee] mètres !”
2. Gestion de la survie et des dégâts (Logique métier)
- Méthode de dégâts : Ajoutez une méthode
recevoir_degats(montant)dans la classe parenteHero. Cette méthode doit soustraire le montant despoints_de_vieactuels. - État de santé : Un héros est considéré comme “Inconscient” si ses
points_de_vietombent à 0 ou moins. - Affichage dynamique : Modifiez la façon dont l’équipe est affichée (dans les
__str__) pour qu’un héros dont les PV sont \(\le 0\) soit affiché avec la mention “(Inconscient)” à côté de son nom. - Conséquence : Modifiez la méthode
action()de chaque classe pour que, si le héros est “Inconscient”, il ne puisse plus agir (le message d’action ne doit pas s’afficher).