Discussions

attaquer(personnage) : mais lequel !?

Image

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();
    }
}
3 réponses
Image
Louis-Nicolas Leuillet
Le 02/11/2023 à 15:47

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.

Meilleure réponse
Image
Pablo Gonzalez
Le 02/11/2023 à 15:51

OK merci

Image
Pablo Gonzalez
Le 02/11/2023 à 15:54

Effectivement, je n'ai pensé qu'à la fonction, mais la réponse à ma question est là (entre autres) :

gandalf.attaquer(thor);
Image
Inscrivez-vous ou connectez-vous pour participer à la discussion.
Discussion résolue

Informations

Créée le 2 novembre 2023 15:40
Dernière activité le 2 novembre 2023 15:54