Problème random javascript

Résolu
vivelesgrecs Messages postés 71 Statut Membre -  
vivelesgrecs Messages postés 71 Statut Membre -
Bonjour,

j'ai un pb avec ma commande random en JavaScript. dans ma console de Firefox, ça me renvoie :SyntaxError: missing formal parameter.
la ligne de code concernée est :
var degats = function getRandomIntInclusive(this.force/2, this.force) {
return Math.floor(Math.random() * (this.force - this.force/2 +1)) + this.force/2;}


2 réponses

  1. Utilisateur anonyme
     
    Bonjour

    Ce n'est pas avec Random que tu as un problème, c'est avec la manière d'écrire une fonction.
    Les paramètres formels (ceux qui sont entre parenthèses dans la définition de la fonction) doivent être des simples noms de variables, pas des expressions :

    // définition de la fonction :
    function getRandomIntInclusive(force1,force2) {
      return Math.floor(Math.random() * (force2 - force1 +1)) + force1;}
    
    // appel de la fonction : 
    var degats =getRandomIntInclusive(this.force/2, this.force);
    
    0
    1. vivelesgrecs Messages postés 71 Statut Membre 4
       
      merci beaucoup je vais tester
      0
    2. vivelesgrecs Messages postés 71 Statut Membre 4
       
      ça me renvoie ReferenceError: getRandomIntInclusive is not defined
      Personnage.attaquer()
      <anonyme>
      0
      1. Utilisateur anonyme > vivelesgrecs Messages postés 71 Statut Membre
         
        Pourtant, getRandomIntInclusive est définie dans le code que je t'ai donné.
        C'est donc que tu essayes de l'appeler depuis un endroit où elle est hors de portée.
        Pas possible d'en dire plus sans connaître le contexte,
        0
    3. vivelesgrecs Messages postés 71 Statut Membre 4
       
      voila le contexte:
       /*
      Mini-jeu de rôle
      */
      
      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 = // définition de la fonction :
      function getRandomIntInclusive(force1,force2) {
        return Math.floor(Math.random() * (force2 - force1 +1)) + force1;}
      
      // appel de la fonction : 
      var degats = getRandomIntInclusive(this.force/2, 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;
      };
      // 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, 25);
      
      var joueur2 = Object.create(Joueur);
      joueur2.initJoueur("Glacius", 130, 30);
      
      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, 20, "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());
      0
  2. Utilisateur anonyme
     
    En fait, tu définis une fonction inutilement puisque tu ne l'appelles qu'une seule fois. De plus, tu avais mal inclus le code que j'avais donné, puisque tu avais laissé un var degats= avant la définition de la fonction.
    Enfin, tu avais défini la fonction au milieu du code, ce qui n'est pas interdit mais n'offre pas grand intérêt dans ton cas, si ce n'est de nuire à la lisibilité.
    Je pense que depuis le début, tu n'avais pas besoin de fonction, tu pouvais écrire directement :
    var degats =  Math.floor(Math.random() * (this.force - this.force/2 +1)) + this.force/2;

    Mais il est possible qu'il y ait d'autre problèmes, je n'ai pas regardé le détail du code ligne à ligne.
    0
    1. vivelesgrecs Messages postés 71 Statut Membre 4
       
      ça a marché, merci beaucoup !
      0
    2. vivelesgrecs Messages postés 71 Statut Membre 4
       
      sujet résolu !
      0