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

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
vivelesgrecs Messages postés 71 Statut Membre 4
 
merci beaucoup je vais tester
0
vivelesgrecs Messages postés 71 Statut Membre 4
 
ça me renvoie ReferenceError: getRandomIntInclusive is not defined
Personnage.attaquer()
<anonyme>
0
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
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
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
vivelesgrecs Messages postés 71 Statut Membre 4
 
ça a marché, merci beaucoup !
0
vivelesgrecs Messages postés 71 Statut Membre 4
 
sujet résolu !
0