Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Plusieurs return ? Possible ?

Et une autre question : Comment mettre fin au programme ?

    14 janvier 2006 à 14:03:31

    Bonjour,

    J'essaye de faire un mini-jeu en C, pour info, je suis au niveau du cours de m@teo21, mais j'ai lu quelques trucs sur le forum, mais rien qui n'ait pu résoudre mon problème.

    Je m'en reviens donc à votre sympathie !
    J'ai 2 questions qui me posent problème :

    Peut-on, dans une fonction, retourner plusieurs fonctions ?


    Je m'explique, j'ai fait une fonction de combat (PV du monstre -= PA du joueur et inversément), mais, j'aimerais que, après le combat, la fonction retourne 3 choses

    Je vous donne ma fonction :

    long combat (long pointsDeVieDuJoueur, long pointsDAttaqueDuJoueur, long niveauMonstre, long pointsDExperienceDuJoueur)
    {
      long PVMONSTREMIN = 8;
      long PVMONSTREMAX = 20;
      long PAMONSTREMIN = 1;
      long PAMONSTREMAX = 5;
      long pointsDAttaqueDuMonstre = 0;
      long pointsDeVieDuMonstre = 0;
     
      switch (niveauMonstre)
      {
             case 1:
                    PVMONSTREMIN = 4;
                    PVMONSTREMAX = 7;
                    PAMONSTREMIN = 1;
                    PAMONSTREMAX = 2;
                    pointsDExperienceDuJoueur++;
                    break;
              case 2:
                    PVMONSTREMIN = 2;
                    PVMONSTREMAX = 6;
                    PAMONSTREMIN = 2;
                    PAMONSTREMAX = 3;
                    pointsDAttaqueDuJoueur--;
                    printf("Beeurrk ! Ce machin s'attaque à vos armes ! Vous n'avez plus que %d PA", pointsDAttaqueDuJoueur);
                    pointsDExperienceDuJoueur+=2;
              default:
                      PVMONSTREMIN = 8;
                      PVMONSTREMAX = 20;
                      PAMONSTREMIN = 1;
                      PAMONSTREMAX = 5;
                      pointsDExperienceDuJoueur+=3;
      }                               
       
      srand(time(NULL));
      pointsDAttaqueDuMonstre = (rand() % (PAMONSTREMAX - PAMONSTREMIN + 1)) + PAMONSTREMIN;

      pointsDeVieDuMonstre = (rand() % (PVMONSTREMAX - PVMONSTREMIN + 1)) + PVMONSTREMIN;

      printf("Vous etes face a un monstre ! Il a %d PV et %d PA\n\n", pointsDeVieDuMonstre, pointsDAttaqueDuMonstre);
     
      system("PAUSE");
     
      combatderoulement (pointsDeVieDuJoueur, pointsDAttaqueDuJoueur, pointsDAttaqueDuMonstre, pointsDeVieDuMonstre);
     
      system("PAUSE");     
      return ??? ; // ICI, J'AIMERAIS RETOURNER 3 CHOSES
    }


    à cette ligne (une des dernières) :

    return ??? ; // ICI, J'AIMERAIS RETOURNER 3 CHOSES


    J'aimerais, comme je l'ai indiqué, retourner 3 choses :
    • Les points d'expérience du joueur
    • Les points d'attaque du joueur
    • Les points de vie du joueur


    Est-ce possible ?
    Si oui, comment ?

    Merci d'avance, mais, j'ai un autre problème :

    Dans la fonction combat, une autre fonction intervient :
    long combatderoulement (long pointsDeVieDuJoueur, long pointsDAttaqueDuJoueur, long pointsDAttaqueDuMonstre, long pointsDeVieDuMonstre);

    Et c'est dans cette dernière que mon problème s'est manifesté, j'aimerais pouvoir finir le programme si le monstre a battu le joueur, je vous donne la fonction :

    long combatderoulement (long pointsDeVieDuJoueur, long pointsDAttaqueDuJoueur, long pointsDAttaqueDuMonstre, long pointsDeVieDuMonstre)
    {
         while (pointsDeVieDuJoueur > 0 && pointsDeVieDuMonstre > 0)
         {
               pointsDeVieDuJoueur -= pointsDAttaqueDuMonstre;
               pointsDeVieDuMonstre -= pointsDAttaqueDuJoueur;
               printf("Vous n'avez plus que %d points de vie, le monstre n'en a plus que %d \n\n", pointsDeVieDuJoueur, pointsDeVieDuMonstre);
               system("PAUSE");
         }
         
         //tant qu'une des deux personnes n'est pas morte, on enleve des PV
         
         if (pointsDeVieDuJoueur == 0)
         {
                                 printf("Vous avez perdu, le monstre vous a battu\n");
         // c'est ici que j'aimerais finir mon programme
         }
         else
         {
                                 printf("BRAVO ! Vous avez battu le monstre ! Mais il ne vous reste plus que %d PV\n", pointsDeVieDuJoueur);
         }
         
         //on informe le joueur de celui qui a péri
         
         return pointsDeVieDuJoueur;
    }


    C'est à cette ligne-ci :

    printf("Vous avez perdu, le monstre vous a battu\n");
         // c'est ici que j'aimerais finir mon programme

    Au milieu, +
    Existe-t-il une fonction qui permettrait d'arrêter le programme ?
    Du genre la fonction die() en PHP ?

    Merci beaucoup d'avance pour toutes vos réponses !
    • Partager sur Facebook
    • Partager sur Twitter
      14 janvier 2006 à 14:32:12

      Faut attendre les structures et/ou les pointeurs.
      • Partager sur Facebook
      • Partager sur Twitter
        14 janvier 2006 à 14:38:38

        Pour arrêter un programme en C ou en C++ il faut utiliser la fonction exit. Elle prend pour argument un entier qui sera renvoyé au système après avoir terminé le programme. Si l'execution s'est déroulée correctement, on renvoie Zér0 par exit(0). Sinon, on renvoie une autre valeur entière.
        Il faut inclure stdlib.h pour pouvoir se servir de la fonction exit.

        Pour ton autre problème, voici un semblant de solution.
        Lorsqu'une instruction return est executée, le programme sort de la fonction dans tous les cas. Donc mettre plusieurs return à la suite ne sert à rien.
        Tu peux envisager de renvoyer une structure au lieu de renvoyer plusieurs variables. Par exemple :
        typedef struct
        {
            int xp, att, vie;
        }ma_structure;

        ma_structure* combat (int pointsDeVieDuJoueur, int pointsDAttaqueDuJoueur, int niveauMonstre, int pointsDExperienceDuJoueur)

        J'ai remplacé les long par des int car saches qie dans ton cas, la valeur d'un int est suffisemment grande. Elle s'étale je crois de -65535 à 65534 ou quelque chose dans le genre.
        • Partager sur Facebook
        • Partager sur Twitter
          14 janvier 2006 à 14:51:29

          La valeur est garantie d'être /au moins/ :

          — minimum value for an object of type int
          INT_MIN -32767 // −(215 − 1)
          — maximum value for an object of type int
          INT_MAX +32767 // 215 − 1

          Ca peut être plus mais si vous utilisez quelque chose dans cet intervalle, vous êtes sûr que partout où l'implémentation C est conforme, votre programme marchera bien.
          • Partager sur Facebook
          • Partager sur Twitter
            14 janvier 2006 à 15:31:39

            Par contre dans ton code :


            long PVMONSTREMIN = 8;
              long PVMONSTREMAX = 20;
              long PAMONSTREMIN = 1;
              long PAMONSTREMAX = 5;


            Essaie de renommer en majuscule car ce ne sont pas des constantes
            • Partager sur Facebook
            • Partager sur Twitter

            [C] Plusieurs return ? Possible ?

            × 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