Partage
  • Partager sur Facebook
  • Partager sur Twitter

Petit jeu d'aventure texte, boucle dans une boucle

question pour améliorer un premier programme

    30 août 2014 à 7:04:05

    Bonjour,

    J'ai réalisé un premier programme, un petit jeu et je suis assez content car il fait tout ce que je voulais qu'il fasse.

    La question:

    def func1():
      while True:
       if:
         go to func2()
       else:
         break
    
    def func2():
      while True:
       if:
         go to func3()
       else:
         break

     voilà le code : http://pastebin.com/BfUePuc2

    Il y a certainement un moyen de faire mieux, mais ce que j'ai remarqué c'est qu'à chacune de mes fonctions lieux, je crée une boucle infinie et propose des commandes au joueur, celui-ci peut alors entrer dans une autre fonction lieu et entre de nouveau dans une boucle infinie et ainsi de suite jusqu'aux salles les plus éloignées. Ce qui fais que la boucle précédente n'est pas fermé/cassé et qu'il y a dans la dernière fonction (par exemple kitchen) cinq boucles l'une dans l'autre. (nested?) J'imagine ce n'est pas très bon. En fait j'en sais rien, c'est un problème ? Et si c'est du mauvais code, comment je pourrais réécrire une progression de pièces/lieux en quittant la boucle de la précédente ?

    -
    Edité par mseyne 30 août 2014 à 7:06:07

    • Partager sur Facebook
    • Partager sur Twitter
      30 août 2014 à 9:43:09

      En effet, l'emboitement des boucles while n'est pas excellent si tu ne les quittes jamais. En fait, à chaque fois que tu appelles une fonction B dans une fonction A, le programme attend que la fonction B se termine, puis remonte alors à la fonction A, à l'endroit où il s'était arrêté. Selon ce principe, tu pourrais mettre un break après chaque appel de fonction, ce qui permettra à la fin de l'exécution du programme de quitter toutes les boucles while.

      Cependant, je te conseille de repenser ton programme différemment. Tu pourrais déjà utiliser la POO en créant une classe Joueur par exemple. Cela te permettrait de simplifier la gestion du pseudo, du nombre de mozarella, de couteaux, etc. De plus, tu n'aurais plus à envoyer tous les arguments à chaque fonction, mais uniquement l'objet Joueur.

      De plus, tu peux te rendre compte que toutes tes fonctions possèdent la même structure (message d'introduction, input (), puis gestion du résultat, et enfin redirection vers une autre fonction). Il est alors possible de créer simplement une seule fonction qui gèrerait ce processus. Si tu stockes dans un tuple par exemple tous les messages propres à chaque situation du jeu, il te suffirait alors d'indiquer à la fonction l'id de la situation actuelle, et de récupérer toutes les infos nécessaires dans le tuple. C'est plus compliqué, mais ça compacterait ton code. C'est optionnel cependant, et demande quand même pas mal de travail :-°

      Enfin, pour revenir à ton problème initial des boucles emboîtées, je te propose une solution de ce type :

      id = maFonction(0)
      while id != "END": 
         id = maFonction(id)

      où maFonction redirige vers les différentes parties du jeu en fonction de l'id reçu et renvoie l'id de la situation suivante. Et bien évidemment, elle renvoie un message du type "END" à la fin du jeu. De cette façon, il ne reste plus qu'une seule et unique boucle while :D

      -
      Edité par Mustiwa 30 août 2014 à 9:46:14

      • Partager sur Facebook
      • Partager sur Twitter
        30 août 2014 à 13:50:31

        Merci Mustiwa, je prends les notes et je me relance. En effet je vois que ce qui est répété pourrais être simplifié en une seule fonction. Je vais réécrire un programme en essayant d'éviter ce problème. Et expérimenter la simple boucle avec la variable id. Merci beaucoup. :)
        • Partager sur Facebook
        • Partager sur Twitter

        Petit jeu d'aventure texte, boucle dans une boucle

        × 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