Prérequis : cloner ce dépôt.
Héraclès doit maintenant vaincre le sanglier d'Érymanthe 🐗, énorme bête qui terrifie les habitants du mont Erymanthe en Arcadie.
Les caractéristiques de force et de dextérité du sanglier sont bien supérieures aux tiennes, impossible de le battre dans ces conditions, tes poings ne suffiront pas ! Il va falloir que tu t'équipes en conséquence !
Tout d'abord, il va falloir t'ajouter une épée.
- Créé une nouvelle classe
Weapon
dans le dossier src/. - Celle-ci va correspondre à l'arme dont tu vas équiper les combattants. Elle doit avoir un nom et une propriété
damage
initialisée à 10. - Pour ajouter l'arme au personnage, dans la classe
Fighter
, on crée une propriétéweapon
. Celle-ci sera initialisée ànull
. - Dans le fichier index.js, instancie un objet de type
Weapon
avec le nom "Épée", un dommage de 10. Ensuite associe-le à Héraclès. - Pour le moment, l'épée a été attribuée mais elle ne t'apporte aucun avantage. Retourne dans la class
Fighter
, nous allons modifier un peu le comportement de la méthodefight()
. Créé tout d'abord une méthodegetDamage()
. Celle-ci doit retourner la force (strength) du Fighter, à laquelle tu vas ajouter les dommages provenant de l'arme (dans le cas où il en porte une). - Dans la méthode
fight()
, utilise cette méthodegetDamage()
pour déterminer les dégâts infligés par le combattant. Ainsi les dégâts infligés (via lerand()
) seront compris entre 1 etgetDamage()
(la force + les dégâts de l'arme) et non plus juste la force.
Tout ce calcul pourrait être réalisé directement dans
fight()
, mais l'utilisation de la méthodegetDamage()
permet de simplifier la méthodefight()
et de déporter la logique de calcul des dommages ailleurs. De plus, il est maintenant possible d'utilisergetDamage()
indépendamment defight()
, ce qui sera utile par la suite.
Tu vas refaire quasiment la même chose pour gérer cette fois-ci un bouclier. Les étapes sont ici volontairement données dans les grandes lignes.
- Créé une classe
Shield
avec une propriétéprotection
initialisée à 10. - Dans
Fighter
, ajoute une propriétéshield
. - Puis créé une méthode
getDefense()
, additionnant la dextérité et la protection du bouclier (si le héros en porte un). Cette méthode sera également utilisée dansfight()
(à la place du simple appel àdefender.dexterity
) afin que le bouclier puisse jouer son rôle protecteur. - Comme pour l'arme, pense à instancier un bouclier et à l'associer à Héraclès.
Relance le combat avec node index.js
, tu fais maintenant beaucoup plus de dégâts et tu es mieux protégé, tu devrais gagner le combat sans trop de difficultés !