User Tools

Site Tools


2016_2017:s3:concprogobjet:td:td7

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
2016_2017:s3:concprogobjet:td:td7 [2016/11/05 23:10]
blay [Jeu]
2016_2017:s3:concprogobjet:td:td7 [2016/12/05 10:26]
blay [Rendu]
Line 2: Line 2:
  
  
-voici quelques exercices simples mettant en jeu des DP+voici quelques exercices simples mettant en jeu deux DPs.
  
-===== Jeu =====+===== Partie 1 =====
 /* decorateur ​ /* decorateur ​
 */ */
Line 11: Line 11:
  
 Les personnages savent se battre en utilisant des armes qui peuvent être des dagues, des épées et des boucliers. Les personnages savent se battre en utilisant des armes qui peuvent être des dagues, des épées et des boucliers.
-Une arme a une force d'​attaque et une force protectrice.+Une arme a une force d'​attaque et une force protectrice ​((Elle a d'​autres propriétés que nous ne discutons pas ici, mais une épée n'est pas manipuler de la même manière qu'un bouclier, etcDonc en fonction du fait qu'il s'agit d'une épée ou d'un bouclier, on aura des comportements différents,​ mais c'est une autre "​histoire"​.))
 Pour l'​instant on considère ces forces comme des constantes :  Pour l'​instant on considère ces forces comme des constantes : 
   * dague : force : 20, protection : 10   * dague : force : 20, protection : 10
Line 17: Line 17:
   * bouclier : force : 5, protection : 20   * bouclier : force : 5, protection : 20
  
-L’utilisateur du jeu doit avoir la possibilité d’ordonner à un personnage ​de se battre contre ​un autreCelui qui est attaqué (B) voit sa vitalité décroitre d'un coefficient ​qui correspond à la force de l'​attaquant - sa propre force protectrice.+Au début de sa vie un personnage ​un coefficient de vitalité de 100. 
 +Il est affaibli au cours de sa vie, ce qui réduit son coefficient ​de vitalité.
  
-En fonction du jeu, il est possible d'​améliorer les armes en leur associant un amplificateur ou une force protectrice supplémentaire. Il est également possible d'​enchanter une arme ce qui a pour effet de multiplier la puissance de frappe et protectrice par un coefficient fonction du sortilège.+L’utilisateur du jeu doit avoir la possibilité d’ordonner à un personnage de se battre contre un autre. Celui qui est attaqué (B) voit sa vitalité décroitre d'un coefficient qui correspond à la force de l'​attaquant (force de son arme) - sa propre force protectrice (force protectrice de son arme). 
 + 
 +En fonction du jeu, il est possible d'​améliorer les armes en leur associant un amplificateur ou  une force protectrice supplémentaire, de coefficient donné (opération plus). Il est également possible d'​enchanter une arme ce qui a pour effet de multiplier la puissance de frappe et protectrice par un coefficient fonction du sortilège. ​ 
 +On veut pouvoir ainsi ajouter en fonction des jeux que nous diffuserons différentes manières d'"​améliorer"​ les armes (les rendre invisibles, leur donner une puissance seulement pendant un temps donné, leur puissance dépend de l'​état du jeu, etc.)
  
 Ces armes modifiés sont manipulables comme des armes normales. ​ Ces armes modifiés sont manipulables comme des armes normales. ​
  
 +A un moment donné du jeu, un personnage ne manipule qu’une seule arme, au moins dans un premier temps. Cependant, il peut changer d’arme plusieurs fois au cours du déroulement du jeu.
  
-Au début de sa vie un personnage a un coefficient ​de vitalité de 100. +On suppose que chaque ​personnage ​est associé ​à une arme par défaut (Orcs : épée ; Troll : dague ; Tauren : bouclierHumain : épée).
-Il est affaibli au cours de sa viece qui réduit son coefficient de vitalité.+
  
-un moment donné du jeu, un personnage ​ne manipule qu’une seule arme. Cependant, il peut changer ​d’arme ​plusieurs fois au cours du déroulement du jeu.+  * Définir ​un diagramme de classe permettant de représenter cette situation 
 +  * Tester vos classes avec le scénario suivant : 
 +   - Créer ​un personnage ​nommé « Diablon » de type « Tauren » avec une corne de 15 cm; 
 +   - Créer un personnage nommé « Azag» de type « Orc » avec des oreilles de 5 cm; 
 +   - L’utilisateur demande à Diablon ​d'​attaquer Azag, cela n'a aucun effet; 
 +   - Lutilisateur demande à Azag d'​attaquer Diablon, qui perd 5 points de vitalité;​ 
 +   - On modifie l'arme associée à Diablon en la rendant magique avec un coefficient ​de 2; 
 +   - Diablon attaque Azag qui perd 5 points de vitalité;​ 
 +   - On modifie l'arme associée à Diablon en lui ajoutant un amplificateur de coefficient 3; 
 +   ​- ​ Diablon attaque Azag qui perd 8 points de vitalité;​ 
 +   - .... 
 +   - L’utilisateur crée un personnage nommé « ArKor» de type « Troll », bière préférée « Heineken ». 
 +   - etc.
  
 +//​Facultatif :// On aimerait à présent que la force d'une arme soit proportionnelle à la vitalité de l'​attaquant et la force protectrice proportionnelle à la vitalité de celui qui reçoit le coup.
 +
 +**Remarques :** 
 +   * que se passe-t-il si un personnage est attaqué avec une force inférieure à sa capacité à se protéger?
 +   * quelles sont les conséquences d'un ordre différent d'​applications des "​décoration"​ ?
 +
 +===== Partie 2 =====
 +/* Fabrique
 +*/
 +
 +Au fur et à mesure que le jeu est mis sur le marché, pour "​créer du hype", on veut pouvoir ajouter de nouvelles armes, y compris des extensions, sans modifier l'​ensemble du jeu.
 +L'​idée est de :
 +  - ne pas modifier les classes d'​armes définies précédemment;​
 +  - pouvoir créer des armes à partir de leur type et avec un nom donné (ex: créer une épée de nom //​excalibur//​);​
 +  - retrouver une arme à partir de son nom;
 +  - améliorer des armes (ex : amplifier excalibur d'un comportement magique de force 10).
 +
 +
 +exemple de scenario de test : 
 +<code java>
 +        WeaponFactory wf = new WeaponFactory();​
 +        Weapon w = wf.createWeapon("​SWORD","​excalibur"​);​
 +        w = wf.improve("​AMPLIFIED","​excalibur",​ 5);
 +        assertEquals(30,​w.strength());​
 +        assertEquals(5,​w.protection());​
 +        w = wf.improve("​Magic","​excalibur",​ 10);
 +        assertEquals(300,​w.strength());​
 +        assertEquals(50,​w.protection());​
 +</​code>​
         ​         ​
-L’utilisateur du jeu doit avoir la possibilité ​d’ordonner à un personnage ​de se battre.  +         
-Selon l’arme manipulée ​par le personnage lorsqu’il reçoit cet ordreun comportement spécifique sera déclenché, par exempleDagues +Les Personnages au début sont créés en fonction des classes ​d'armes prévues. Modifier votre code pour ne plus dépendre ​de ces classes d'​implémentation
-On suppose que chaque ​personnage ​est associé ​à une arme par défaut (Orcs épée ​; Troll : dague ; Tauren : bouclier, Humain : épée)+ 
- Définir un diagramme ​de classe permettant ​de représenter cette situation +===== Partie 3 ===== 
- Tester vos classes avec le scénario suivant ​+ 
-L’utilisateur crée ​un personnage ​nommé « Diablon » de type « Tauren » avec une corne de 15 cm. +On désire pouvoir manipuler des personnages individuels et également des groupes tels que armés, des bataillons ou des hordes. Une armée est composée de généraux et de bataillons. 
-L’utilisateur demande au personnage ​de se battre+ 
-L’utilisateur crée ​un personnage nommé « Azag» ​de type « Orc » avec des oreilles ​de 5 cm +Lors d'une attaque ​par groupesa force est proportionnelle à la force de ses attaquants. L'​attaque par une horde est ainsi la somme des forces de chacun des personnages qui constitue la hordemultipliée ​par 0.75; pour un batailloncette force est multipliée par 1,5. Pour une armée, sa force est la somme des éléments qui la compose. 
-L’utilisateur demande au personnage de se battre+ 
-L’utilisateur crée ​un personnage nommé « ArKor» de type « Troll »bière préférée « Heineken ». +De même pour la puissance protectrice. 
-L’utilisateur demande au personnage ​de se battre. + 
-L’utilisateur crée ​un personnage nommé « Kir» de type « Humain» avec des yeux bleus+===== Partie 4 ===== 
-L’utilisateur demande au personnage de se battre+On veut pouvoir créer des personnages automatiquement,​ sans modifier les personnages définis précédemment. 
-L’utilisateur change ​l’arme ​de Diablon ​et lui confie une épée. +La création d'​un ​personnage a un coût : Humain ​10; Troll : 5; Tauren: ​2; etc
-L’utilisateur demande à Diablon ​de se battre.+La coût de création d'un groupe dépend du type de groupe ​pour une Horde, c'est la somme du coût des personnages qui la composent, multipliée par 0.75. 
 +  * Ainsi create("​Humain",​ "​Arthur",​Joueur) (i) retourne ​un personnage ​"​Humain",​ (ii) associe ce personnage au Joueur, et  (iii) décrémente la bourse du joueur ​de la somme correspondante.  
 +  * De même CreateGroup("​Horde",​ "​Hunts",​ joueur, "​Troll",​ 50) crée une horde de 50 Trolls dont le coût pour le joueur est de (50*5)*0.75 = 187.5. Des noms différents sont donnés par défaut à chacun des membres ​de la Horde
 +  ​* ​ CreateGroup("​Bataillon",​ "​57Rima",​ joueur, "​Tauren",​ 50) crée un bataillon ​de 50 Tauren dont le coût pour le joueur est de (50*2)= 100 .Des noms différents sont donnés par défaut à chacun des membres du bataillon
 +  * Créer une armée est un peu plus complexe. CreateGroup("​Armee"​,"​ArmeeNapoleon",​joueur,"​Humain"​) crée une armée dont le général est un humain, qui est crée avec un nom par défautSon coût est alors du coût de l'​humain multiplié par 1.2 soit 12. Il est ensuite possible de créer ​un nouveau bataillon ou autre et de les lui ajouter sans coût supplémentaire
 + 
 + 
 +//Bien sûr, les personnages ​se déplacent, les groupes aussi, etcmais ce sera pour une autre année.// 
 + 
 +===== Rendu ===== 
 + 
 +    - un diagramme UML qui visualise uniquement les classes/​interfaces dont votre code dépend directement. 
 +          * le diagramme vise à visualiser ​l'​architecture ​de votre solution  
 +                    * les attributs faisant référence à des classes/​interfaces sont uniquement représentés sous la forme d'​associations (rôle, cardinalité,​ orientée) 
 +                    * pas de getter ​et setter 
 +                    * pas de classes non directement utilisées par exemple. 
 +                    * les différents patterns apparaissent sous forme d'​annotations 
 +          * le diagramme peut être obtenu par reverse-engineering mais doit être adapté pour répondre aux points précédents.  
 +    - les codes sources des classes que vous avez créées ou modifiées exclusivement. 
 + 
 +La date du rendu au plus tard : 6/12 à 23h45 
 + 
 + 
 +Sur [[http://​jalon.unice.fr/​cours/​blay/​Cours-blay-20150930110548/​BoiteDepot-blay-20161122213044309075?​mode_etudiant=false|Jalon]] avec comme nom pour l'​archive :  Gr <​numeroGroupe>​ + Nom des étudiants dans le groupe 
 + 
  
-On aimerait à présent que la force d'une arme soit proportionnelle à la vitalité de l'​attaquant et la force protectrice proportionnelle à la vitalité de celui qui reçoit le coup. 
2016_2017/s3/concprogobjet/td/td7.txt · Last modified: 2016/12/05 11:11 by blay