Partage
  • Partager sur Facebook
  • Partager sur Twitter

Récuperer return d'une fonction dans une autre

Sujet résolu
    26 mars 2017 à 21:06:23

    Bonjour,

    je suis novice en JS et je tente de réécrire un programme en objet.

    C'est un petit jeu de déplacement.

    Auparavant j'avais 2 fonctions, move(), qui gère les règles de déplacement générales et moveBot() qui appelle move() afin de faire se déplacer un bot.

    La fonction move() renvoie false dès qu'un déplacement est interdit (ex : un mur ou le bord du plateau).

    Ce qui me permettait de faire se déplacer le bot de manière simpliste (dès qu'un obstacle est rencontré, il tourne à droite) avec ce code :

    //déplacement du bot
    var goTop = true;
    var goBottom = true;
    var goLeft = true;
    var goRight = true;
    function moveBot(){
        //go Right !
        if(goRight){
            if(!move("dumbbot", "right", elementsSize)){
                goRight = false;
            }
        } else {
            if(goBottom){
                if(!move("dumbbot", "bottom", elementsSize)){
                    goBottom = false;
                }
            } else {
                if(goLeft){
                    if(!move("dumbbot", "left", elementsSize)){
                        goLeft = false;
                    }
                } else {
                    if(goTop){
                        if(!move("dumbbot", "top", elementsSize)){
                            goRight = true;
                            goBottom = true;
                            goLeft = true;
                        }
                    }
                }
            }
        }
    }


    Maintenant, j'ai passé la move() comme fonction d'un objet Person que voila  (je laissé juste la logique générale de la fonction move() pour ne pas surcharger, car le code est fonctionnel - les persos se déplacent bien - et je ne pense pas que le probleme vienne de là)

    function Person(parent, id, top, left) {
        Items.call(this, parent, id, top, left);
    }
    
    Person.prototype = Object.create(Items.prototype);
    
    Person.prototype.constructItem = function () {
        Items.prototype.constructItem.call(this);
    };
    
    
    Person.prototype.move = function(direction, distance) {   
    var moveOk = true
    if(problème quelconque){ moveOk = false;}
        return moveOk;
    };


    Depuis, la fonction moveBot() execute bien move() pour faire se déplacer le bot, mais la valeur true ou false de moveOk n'est pas récupérée et le bot tourne alors en rond considérant rencontrer un obstacle à chaque mouvement.

    Voila la fonction moveBot() modifiée

    //bot move
    var goTop = true;
    var goBottom = true;
    var goLeft = true;
    var goRight = true;
    function moveBot(){
        //go Right !
        if(goRight){
            if(!dumbbot0.move("right")){
                goRight = false;
            }
        } else {
            if(goBottom){
                if(!dumbbot0.move("bottom")){
                    goBottom = false;
                }
            } else {
                if(goLeft){
                    if(!dumbbot0.move("left")){
                        goLeft = false;
                    }
                } else {
                    if(goTop){
                        if(!dumbbot0.move("top")){
                            goRight = true;
                            goBottom = true;
                            goLeft = true;
                        }
                    }
                }
            }
        }
    }
    



    Une idée pour récupérer la valeur de moveOK ?

    Merci d'avance :)

    -
    Edité par b.one 26 mars 2017 à 21:08:59

    • Partager sur Facebook
    • Partager sur Twitter
      27 mars 2017 à 14:01:25

      J'ai fini par résoudre le problème : la classe DumbBot héritant de la classe Person qui possede la methode move(), j'ai juste eu a mettre un return devant l'appel de la methode move() de la classe Person dans la classe DumbBot :

      DumbBot.prototype.move = function (direction, distance) {
          return Person.prototype.move.call(this, direction, distance);
      };
      



      • Partager sur Facebook
      • Partager sur Twitter

      Récuperer return d'une fonction dans une autre

      × 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