Decorator
Stratégie temps réel : Soldats armés
Nous allons nous intéresser ici à la modélisation d'un noyau d'un jeu de type STR (stratégie temps réel). Pour ce faire, considérons tout d'abord la mise en oeuvre de différents types de soldats selon la spécification suivante :
- Il y aura au moins deux catégories de soldats : les fantassins (infantryman) et les cavaliers (horseman).
- Les soldats disposeront de matériel d'armement qui sera au moins constitué de boucliers (shields) et d'épées (swords). Ces armements pourront être ajoutés et retirés dynamiquement au soldat au cours de la partie.
- La vivacité des soldats sera mesurée au moyen de points de vie (health points).
- Tout soldat sera capable de porter des coups (strike) avec une efficacité qui doit dépendre de l'armement et de la catégorie du soldat. Porter un coup correspondra à retourner sa force de frappe et à modifier (si nécessaire) les armes et la vivacité du soldat (usure des armes).
- Tout soldat sera capable de parer les coups ( parry ) de ses adversaires avec une efficacité qui doit dépendre de l'armement et de la catégorie du soldat. Le fait de parer un coup pourra détériorer les armes mais aussi réduire les points de vie du Soldat.
Un combat à entre deux adversaires se déroulera de la manière suivante:
void fight(Soldat s1, Soldat s2) {
Soldat attack = s1;
Soldat defend = s2;
while(s1.isAlive() && s2.isAlive()) {
defend.parry(attack.strike());
Soldat tmpSwap = attack;
attack = defend;
defend = tmpSwap;
}
if (s1.isAlive())
System.out.println("Soldier 1 Won");
else
System.out.println("Soldier 2 Won");
}
exercice 1: Architecture Objet
Élaborez et implémentez une architecture objet correspondant à la spécification ci-dessus, en utilisant le modèle de conception Décorateur afin d'équiper les soldats avec leur matériel d'armement, et de modifier ainsi leur capacités d'attaque et de défense.
exercice 2: Use case
Nous voulons modéliser les cas d'utilisation suivant:
Acteurs: Un soldat de type HorseMan **hm** et un Soldat de type InfantryMan **im**.
Scénario:
- **hm** porte un coup à **im**
- **hm** récupère un bouclier et **im** une épée.
- **im** porte un coup à **hm**
- puis **im** récupère une épée et **hm** un bouclier.
- **hm** porte un coup à **im** puis
- **im** porte un coup à **hm**.
Donnez le diagramme de séquence modélisant ce cas d'utilisation.
exercice 3: Implémentation
Implémentez votre architecture en Java.
exercice 4: Test de recette
Implémentez le test de recette associé à notre cas d'utilisation.