Problème random javascript

Résolu/Fermé
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 - 18 mars 2016 à 19:09
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 - 22 mars 2016 à 18:10
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
18 mars 2016 à 23:57
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 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
19 mars 2016 à 16:49
merci beaucoup je vais tester
0
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
Modifié par vivelesgrecs le 21/03/2016 à 07:37
ça me renvoie ReferenceError: getRandomIntInclusive is not defined
Personnage.attaquer()
<anonyme>
0
Utilisateur anonyme > vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017
21 mars 2016 à 08:48
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 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
21 mars 2016 à 17:15
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
21 mars 2016 à 17:52
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 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
21 mars 2016 à 18:57
ça a marché, merci beaucoup !
0
vivelesgrecs Messages postés 56 Date d'inscription vendredi 11 mars 2016 Statut Membre Dernière intervention 8 avril 2017 4
22 mars 2016 à 18:10
sujet résolu !
0

Discussions similaires