J'ai réussi le projet, mais en regardant la correction, une chose m'a étonnée.
Comment savoir qui attaquer, si l'on ne met que "personne" comme paramètre ?
J'ai du mal à comprendre le lien entre le mot "personnage" et le guerrier ou le magicien suivant qui attaque.
Dans mon code, j'ai mis "attaquer(Guerrier)" pour le magicien et "attaquer(Magicien)" pour le guerrier. Avec la même chose pour les points santé, pseudo... dans la fonction "attaquer" et "coupSpecial".
Voici ma version (similaire pour le guerrier) :
class Magicien extends Personnage {
constructor(pseudo) {
super(pseudo, "magicien", 170, 90);
}
attaquer(Guerrier) {
Guerrier.sante -= this.attaque;
console.log(this.pseudo + " attaque " + Guerrier.pseudo + " en lançant un sort (" + this.attaque + " dégâts)");
this.evoluer();
Guerrier.verifierSante();
}
coupSpecial(Guerrier) {
Guerrier.sante -= this.attaque * 5;
console.log(this.pseudo + " attaque avec son coup spécial puissance des arcanes " + Guerrier.pseudo + " (" + this.attaque * 5 + " dégâts)");
this.evoluer();
Guerrier.verifierSante();
}
}
Dans votre code, vous utilisez le paramètre Guerrier dans les méthodes attaquer et coupSpecial de la classe Magicien. Cependant, vous pouvez renommer ce paramètre pour qu'il soit plus générique et représente n'importe quel personnage que le magicien attaque. Par exemple, vous pouvez le nommer cible :
class Magicien extends Personnage {
constructor(pseudo) {
super(pseudo, "magicien", 170, 90);
}
attaquer(cible) {
cible.sante -= this.attaque;
console.log(this.pseudo + " attaque " + cible.pseudo + " en lançant un sort (" + this.attaque + " dégâts)");
this.evoluer();
cible.verifierSante();
}
coupSpecial(cible) {
cible.sante -= this.attaque * 5;
console.log(this.pseudo + " attaque avec son coup spécial puissance des arcanes " + cible.pseudo + " (" + this.attaque * 5 + " dégâts)");
this.evoluer();
cible.verifierSante();
}
}
Maintenant, vous pouvez passer n'importe quel objet de type Personnage en tant que paramètre lors de l'appel des méthodes attaquer et coupSpecial. Le nom Guerrier ne représente plus spécifiquement un guerrier, mais plutôt la cible de l'attaque.
Par exemple :
const magicien = new Magicien("Merlin");
const guerrier = new Guerrier("Arthur");
magicien.attaquer(guerrier); // Le magicien attaque le guerrier
magicien.coupSpecial(guerrier); // Le magicien utilise son coup spécial contre le guerrier
Cela permet de rendre votre code plus flexible et réutilisable, car le magicien peut maintenant attaquer n'importe quel personnage, et pas seulement un guerrier spécifique.
OK merci
Effectivement, je n'ai pensé qu'à la fonction, mais la réponse à ma question est là (entre autres) :
gandalf.attaquer(thor);