Partage
  • Partager sur Facebook
  • Partager sur Twitter

Javascript problème avec le cours sur la POO

problème avec un combat

    22 novembre 2017 à 1:47:33

    Bonjour à tous, alors voilà j'ai fini le chapitre 8 du cours sur JavaScript mais une question me reste et ça concerne un des exercices,il s'agit de crée un combat entre des personnages tout fonctionne bien quand les valeur indiqué par le cours sont respecté mais si l'on fait en sorte que le monstre tue le joueur 2 et que le joueur 1 tue le monstre alors ça indiquera que le joueur 2 a aussi tué le monstre et il gagne le même xp et les même objet... Voici le code avec les valeurs changer pour correspondre à ce que je viens de dire :

    var Personnage = {
        // Initialise le personnage
        initPerso: function (nom, sante, force) {
            this.nom = nom;
            this.sante = sante;
            this.force = force;
            // L'inventaire est géré sous la forme d'une propriété de type objet
            this.inventaire = {
                or: 10,
                cles: 1
            };
        },
        // Attaque un personnage cible
        attaquer: function (cible) {
            if (this.sante > 0) {
                var degats = this.force;
                console.log(this.nom + " attaque " + cible.nom + " et lui fait " + degats + " points de dégâts");
                cible.sante = cible.sante - degats;
                if (cible.sante > 0) {
                    console.log(cible.nom + " a encore " + cible.sante + " points de vie");
                } else {
                    cible.sante = 0;
                    console.log(cible.nom + " est mort !");
                }
            } else {
                console.log(this.nom + " ne peut pas attaquer : il est mort...");
            }
        }
    };
    
    var Joueur = Object.create(Personnage);
    // Initialise le joueur
    Joueur.initJoueur = function (nom, sante, force) {
        this.initPerso(nom, sante, force);
        this.xp = 0; // L'expérience du joueur est toujours initialisée à 0
    };
    // Renvoie la description du joueur
    Joueur.decrire = function () {
        var description = this.nom + " a " + this.sante + " points de vie, " +
            this.force + " en force, " + this.xp + " points d'expérience, " +
            this.inventaire.or + " pièces d'or et " + this.inventaire.cles + " clé(s)";
        return description;
    };
    // Combat un adversaire
    Joueur.combattre = function (adversaire) {
        this.attaquer(adversaire);
        if (adversaire.sante === 0) {
            console.log(this.nom + " a tué " + adversaire.nom + " et gagne " +
                adversaire.valeur + " points d'expérience, ainsi que " +
                adversaire.inventaire.or + " pièces d'or et " +
                adversaire.inventaire.cles + " clé(s)");
            this.xp += adversaire.valeur;
            // L'inventaire de la victime est transféré à son vainqueur
            this.inventaire.or += adversaire.inventaire.or;
            this.inventaire.cles += adversaire.inventaire.cles;
        }
    };
    
    var Adversaire = Object.create(Personnage);
    // Initialise les propriétés de l'adversaire
    Adversaire.initAdversaire = function (nom, sante, force, race, valeur) {
        this.initPerso(nom, sante, force);
        this.race = race;
        this.valeur = valeur;
    };
    
    var joueur1 = Object.create(Joueur);
    joueur1.initJoueur("Aurora", 150, 45);
    
    var joueur2 = Object.create(Joueur);
    joueur2.initJoueur("Glacius", 130, 20);
    
    console.log("Bienvenue dans ce jeu d'aventure ! Voici nos courageux héros :");
    console.log(joueur1.decrire());
    console.log(joueur2.decrire());
    
    var monstre = Object.create(Adversaire);
    monstre.initAdversaire("ZogZog", 40, 130, "orc", 10);
    
    console.log("Un affreux monstre arrive : c'est un " + monstre.race + " nommé " + monstre.nom);
    
    monstre.attaquer(joueur1);
    monstre.attaquer(joueur2);
    
    joueur1.combattre(monstre);
    joueur2.combattre(monstre);
    
    console.log(joueur1.decrire());
    console.log(joueur2.decrire());

    Bienvenue dans ce jeu d'aventure ! Voici nos courageux héros :
    Aurora a 150 points de vie, 45 en force, 0 points d'expérience, 10 pièces d'or et 1 clé(s)
    Glacius a 130 points de vie, 20 en force, 0 points d'expérience, 10 pièces d'or et 1 clé(s)
    Un affreux monstre arrive : c'est un orc nommé ZogZog
    ZogZog attaque Aurora et lui fait 130 points de dégâts
    Aurora a encore 20 points de vie
    ZogZog attaque Glacius et lui fait 130 points de dégâts
    Glacius est mort !
    Aurora attaque ZogZog et lui fait 45 points de dégâts
    ZogZog est mort !
    Aurora a tué ZogZog et gagne 10 points d'expérience, ainsi que 10 pièces d'or et 1 clé(s)
    Glacius ne peut pas attaquer : il est mort...
    Glacius a tué ZogZog et gagne 10 points d'expérience, ainsi que 10 pièces d'or et 1 clé(s)
    Aurora a 20 points de vie, 45 en force, 10 points d'expérience, 20 pièces d'or et 2 clé(s)
    Glacius a 0 points de vie, 20 en force, 10 points d'expérience, 20 pièces d'or et 2 clé(s)

    Voilà je me demandais comment faire pour que personnage qui meure n'est plus d'action liée au combat peut importe les stats, j'ai aussi essayé avec des conditions mais ça pose toujours problèmes ailleurs...

    Merci de votre réponse

    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2017 à 12:37:35

      Salut,

      Tu peux modifier la fonction combattre comme suit :

      Joueur.combattre = function (adversaire) {
      	if (this.sante > 0) {
      		this.attaquer(adversaire);
      		if (adversaire.sante === 0) {
      			console.log(this.nom + " a tué " + adversaire.nom + " et gagne " +
      				adversaire.valeur + " points d'expérience, ainsi que " +
      				adversaire.inventaire.or + " pièces d'or et " +
      				adversaire.inventaire.cles + " clé(s)");
      			this.xp += adversaire.valeur;
      			// L'inventaire de la victime est transféré à son vainqueur
      			this.inventaire.or += adversaire.inventaire.or;
      			this.inventaire.cles += adversaire.inventaire.cles;
      		}
      	}
      };



      • Partager sur Facebook
      • Partager sur Twitter
        22 novembre 2017 à 21:08:35

        Merci pour ta réponse

        c'est bon j'ai trouver!

         en utilisant ta condition est celle la ça fonctionne dans toutes les situation :

        Joueur.combattre = function (adversaire) {
            if(this.sante>0){ 
        if(adversaire.sante>0){
        this.attaquer(adversaire); if (adversaire.sante === 0) { console.log(this.nom + " a tué " + adversaire.nom + " et gagne " + adversaire.valeur + " points d'expérience, ainsi que " + adversaire.inventaire.or + " pièces d'or et " + adversaire.inventaire.cles + " clé(s)"); this.xp += adversaire.valeur; // L'inventaire de la victime est transféré à son vainqueur this.inventaire.or += adversaire.inventaire.or; this.inventaire.cles += adversaire.inventaire.cles; } } } };

        -
        Edité par Lelamarouge 22 novembre 2017 à 21:20:54

        • Partager sur Facebook
        • Partager sur Twitter

        Javascript problème avec le cours sur la POO

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown