TPNoté
Étant donné le diagramme de classe UML suivant :
1. Implémentez le diagramme de classe.
Quelques consignes :
a. Les classes Character et Player sont abstraites
b. La méthode attack dans Character est abstraite
c. La méthode isAlive() retourne true si les pv (points de vie) du personnage sont
supérieur à 0, false sinon.
d. La méthode takeDamage soustrait le nombre de damages passés en
paramètre aux pv du personnage.
2. Implémentez la méthode attack dans les différentes classes filles.
a. Dans la classe Enemy, la méthode inflige 5 dégâts au personnage passé en
paramètre (vous pouvez utiliser la méthode takeDamage pour ça)
b. Dans la classe Player, la méthode inflige 10 dégâts au personnage passé en
paramètre et augmente l’expérience de 10.
c. Dans la classe Wizard, la méthode vérifie d’abord que le nombre de pm
(point de magie) soit supérieur à 10 avant de faire l’attaque. Chaque attaque
diminue le nombre de pm de 10.
3. Dans la classe Enemy, vous allez ajouter un attribut loot (qui correspond à un objet
tenu par l’ennemi) qui sera un enum (que vous devez créer) pouvant contenir les
valeurs POTION ou MANA_POTION. Ajoutez un paramètre au constructeur de Enemy
pour passer ce loot.
4. Créez une classe de test (main) qui contiendra une liste de personnages dans laquelle
vous ajouterez deux personnages (utilisez le polymorphisme pour pouvoir ajouter un
Knight et un Wizard dans cette liste). Et créez aussi un ennemi. Vous pouvez
1/2
Pr [Link]
instancier les différents objets de la manière suivante :
5. Dans votre classe Main, écrire une fonction qui prend en paramètre une liste de
joueurs et détermine si au moins un est vivant.
La signature de la fonction peut être la suivante :
6. Implémentez maintenant dans le main une logique de jeu.
a. Le jeu se termine si tous les personnages (2 dans notre exemple) ou
l’ennemi n’ont plus de point de vie (isAlive() retourne false). Utilisez la
méthode définie à la question précédente.
b. A chaque tour, chaque personnage vivant attaque. Si après l’attaque
l’ennemi est toujours vivant, il attaque le personnage à son tour.
7. On va maintenant vouloir afficher à la fin du jeu, l’état de nos deux personnages et de
l’ennemi. Implémentez et surcharger les méthodes toString pour afficher pour chaque
classe ses attributs.
8. Concernant les deux instances de la classe Player, on veut les afficher par ordre de
pv décroissant. Implémenter l’interface Comparable dans Character pour comparer
deux characters selon leurs pv.
9. Modifier la méthode main pour afficher l’état de l'ennemi et de nos deux players.
Pour afficher dans l’ordre de pv, utiliser la méthode statique [Link]() qui
prend en paramètre une liste d'instance implémentant Comparable (ce qui est le cas
grâce à la question précédente.
10. Dans le constructeur de Character, ajoutez une vérification et déclenchez une
exception (IllegalStateException par exemple) si l’argument (pv) est inférieur à 0.
2/2
Pr [Link]