Syntaxe de la POO
On travaille dans cet exercice sur deux classes :
- la classe
Chosepermet de décrire une chose (objet, élément du décor...) utilisée dans un jeu vidéo ; - la classe
Personnagepermet de représenter un personnage du jeu.
La classe Chose
Une Chose est caractérisée par un unique attribut, son genre de type str. Ce genre doit impérativement appartenir à la liste ["livre", "pioche", "pierre", "gateau", "trésor"].
classDiagram
class Chose{
genre : str
}
La classe Personnage
Un Personnage est caractérisé par des attributs :
- un
nom(au formatstr), - une
energie(au formatint, compris entre0et500), - un
inventaire(au formatlist).
La classe Personnage possède aussi plusieurs méthodes qui sont résumées, avec les attributs, dans le diagramme suivant :
classDiagram
class Personnage{
nom : str
energie : int
inventaire : list
prend(truc : Chose) str
mange(truc : Chose) str
parle(personne : Personnage) str
donne(truc : Chose, personne : Personnage) str
}
Dans le diagramme précédent le texte prend(truc : Chose) : str signifie que la classe Personnage possède une méthode prend prenant un argument nommé truc de type Chose et qui renvoie une chaîne de caractère (str).
Complétez le code dans les différents blocs ci dessous avec les instructions valides. Chaque bloc est indépendant des autres et il est possible de le compléter dans le désordre, même s'il est conseillé de le faire dans l'ordre la première fois.
Les deux classes sont déjà définies et vous pouvez les utiliser dans chaque exercice de cette page.
I) Guybrush et Helaine
Guybrush est un pirate et il est marié avec Helaine, la Gouverneure de l'île des pirates.
Créez un personnage nommé 'Guybrush' qui a 100 d'énergie. Ce Personnage doit être affecté à la variable guy.
Créez également un personnage nommé 'Helaine' qui a 200 d'énergie. Ce Personnage doit être affecté à la variable helaine.
Création d'un Personnage
Lors de la création d'un objet type Personnage, on passe en arguments son nom puis son énergie.
>>> batman = Personnage("Batman", 450)
>>> robin = Personnage("Robin", 300)
L'inventaire est créé automatiquement et est initialement vide.
II) Les aventures de Guybrush
En fait, Guybrush n'est pas vraiment pirate. Il rêve de l'être et s'invente de grandes aventures.
Helaine est fatiguée de l'entendre raconter ces histoires, toutes fausses, et lui lance un défi. Elle lui demande d'aller trouver le trésor de l'île aux Singes et de le lui ramener.
Faites parler Guybrush à Helaine puis faites parler Helaine à Guybrush.
Vous affecterez le résultat de ces deux conversations dans des variables conversation1 et conversation2.
Utilisation des méthodes
Il est possible d'appliquer des méthodes à un Personnage. Si perso est un objet de la classe Personnage :
prend:persoprend untruc(de typeChose),mange:persomange untruc(de typeChose),parle:persoparle avec une autrepersonne(de typePersonnage),donne:persodonne untrucà une autrepersonne(respectivement de typesChoseetPersonnage).
Remarque sur le vocabulaire propre à Python
La documentation officielle de Python utilise un vocabulaire différent : les attributs et les méthodes d'un objet sont tous dénommés attributs. La documentation distingue alors attributs données et méthodes.
Toutes ces méthodes renvoient des chaînes de caractères décrivant le résultat de l'action.
>>> batman.prend(bat_manuel)
'Batman prend un(e) livre'
>>> batman.donne(bat_manuel, robin)
'Batman donne un(e) livre à Robin'
Certaines actions sont impossibles. Par exemple perso ne peut pas manger un truc du genre "livre".
>>> robin.mange(bat_manuel)
'Robin ne peut pas manger un(e) livre !'
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
III) Se préparer pour le voyage
Guybrush n'est pas très en forme. Il a besoin de reprendre des forces pour le voyage qui l'attend.
Il se rend à la taverne et y prend un gâteau.
Affectez à la variable gateau un nouvel objet de la classe Chose et de genre 'gâteau'.
Faites en sorte que Guybrush prenne le gâteau et affectez le résultat de cette action dans une variable resultat.
Création d'une Chose
Il est possible de créer une Chose en précisant son genre :
>>> bat_manuel = Chose("livre")
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
IV) Prendre des forces
Guybrush mange le gâteau, ce qui lui redonne de l'énergie.
Affectez l'énergie initiale de Guybrush à la variable nrj.
Faites le ensuite manger le gâteau et affectez le résultat dans la variable resultat.
Enfin, modifiez l'énergie de Guybrush pour qu'elle soit à 199.
Accéder aux attributs d'un objet
Si untel et unetelle sont des objets de type Personnage et truc un objet de type Chose, il est par exemple possible :
-
d'accéder à la valeur d'un attribut en saisissant
inv = untel.inventaire, -
de modifier la valeur d'un attribut en saisissant
unetelle.energie = 125.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
V) Le trésor de l'île aux Singes
Après de multiples périples, bien trop longs pour être racontés ici, Guybrush arrive enfin à trouver le trésor de l'île aux Singes.
Sur le voyage de retour, pris d'hallucinations, il essaie de manger le trésor, qui heureusement n'est pas comestible.
Affectez à la variable tresor une Chose de genre 'trésor'.
Faites en sorte que Guybrush prenne le trésor et affectez le résultat à la variable resultat1.
Enfin, faites en sorte que Guybrush essaie de manger le trésor et affectez le résultat à la variable resultat2.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
VI) Fin de la quête
Victorieux, Guybrush peut enfin ramener le trésor à Helaine, qui pourra le mettre au grenier avec tous ceux qu'elle a déjà trouvés elle-même.
Faites en sorte que Guybrush donne le trésor à Helaine et affectez le résultat à la variable resultat.
Il faut également rajouter des tests à la fin.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
VII) Vers de nouvelles aventures
Vous pouvez utiliser l'IDE ci-dessous pour inventer vos propres aventures avec vos propres personnages.
# Tests (insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)
# Tests(insensible à la casse)(Ctrl+I)
(Alt+: ; Ctrl pour inverser les colonnes)
(Esc)