Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C] Problème "d'affichage"

    9 février 2006 à 16:55:53

    Salut,

    J'ai créer un petit RPG en mode console.
    Comme tout le jeu allait être basé sur le même système, j'ai essayé au début de compiler. Après correction de multiples erreurs, j'arrive enfin à lancer le .exe.

    Tout se passe bien a un détail près...

    Je vous laisse compiler / executer le code source pour voir le problème...

    #include <stdio.h>
    #include <stdlib.h>

    int main(int argc, char *argv[])
    {
        long race = 0, arme_principale = 0, choix_actions = 0; // VARIABLES EN RAPPORTS AVEC LE PERSONNAGE ET LE JOUEUR
        long nombre_cc1 = 0, nombre_cc2, degats_critique = 0, degats = 0, degats_totaux = 0; // VARIABLE EN RAPPORTS AVEC LES DGTS AU M
        long degats_j = 0; // VARIABLE EN RAPPORTS AVEC LES DEGATS AU J
        long vie_monstre = 0, vie_joueur = 250, nombre_potions = 3// VARIABLE EN RAPPORTS AVEC LA VIE

        const long MINIM = 5, MAXIM = 50; // VARIABLES POUR PUISSANCE DU COUP CRITIQUE
       
        const long MINIMU = 1, MAXIMU = 100; // VARIABLE POUR PUISSANCE DU MONSTRE
           
      printf("Bienvenue dans War of Dragons (beta) !\n\n");
      printf("Pour commencer, veuillez choisir votre race en entrant le numero associe.\n\n");
     
      printf("1. Humain : Bonne maitrise des armes, chance faible.\n");
      printf("2. Seraphin : Bonne endurance, chance moyenne.\n");
      printf("3. Gobelin : Endurance moyenne, chance elevee.\n\n");
     
                   
      printf("Veuillez entrez un numero : ");
      scanf("%ld", &race);
     
      switch (race)
      {
            case 1:
       printf("Vous avez choisi humain.\n\n");
       break;
            case 2:
       printf("Vous avez choisi seraphin.\n\n");
       break;
            case 3:
        printf("Vous avez choisi gobelin.\n\n");
        break;
            default:
         printf("Erreur dans le choix de la race !\n");
         printf("Le jeu va se fermer !\n\n");
                                           
      system("PAUSE");     
      return 0;
      break;
    }

    printf("Veuillez choisir l'arme principale de votre personnage\n\n");

    printf("1. Epee : degats entre 1 et 30, chance de coup critique faible.\n");
    printf("2. Hache : degats entre 1 et 15, chance de coup critique moyenne.\n");
    printf("3. Lance : degats entre 1 et 7, chance de coup critique elevee.\n\n");


    printf("Veuillez entrer le numero de votre arme principale : ");
    scanf("%ld", &arme_principale);

    switch (arme_principale)
    {
           case 1:
        printf("Vous avez choisi l'epee.\n\n");
        break;
           case 2:
        printf("Vous avez choisi la hache\n\n");
        break;
           case 3:
        printf("Vous avez choisi la lance\n\n");
       break;
            default:
         printf("Erreur dans le choix de l'arme principale !\n");
         printf("Le jeu va se fermer !\n\n");
         
                                                                                   
      system("PAUSE");     
      return 0;
      break;
    }
    printf("Bien ! Vous etes fin pret pour l'aventure !\n\n");
    printf("Un garde vient vous adresser la parole...\n\n");
    printf("Garde : Salutations, le roi souhaite vous mettre a l'epreuve : vous devez\n nettoyer la grotte au nord de la ville...\n\n");

    printf("Vous vous dirigez vers cette grotte et pénetrez dedans...\n\n\n");
    printf("Pour jouer, utilisez les numeros vous permettant de faire des actions.\n\n");

    printf("Un dragonnet vous attaque ! (30 points vie)\n\n");
    vie_monstre = 30;

    printf("Actions : 1. Utiliser epee 2. Utiliser potion [%ld] (rend 50 points de vie)", nombre_potions);
    printf("Votre choix :  ");
    scanf("%ld", &choix_actions);

    do
                {
    switch (choix_actions)
    {
           case 1:
               
                if(arme_principale == 1)                                   
         {
                            const long MIN = 1, MAX = 30;   
                srand(time(NULL));
                degats = (rand() % (MAX - MIN + 1)) + MIN; // DEGATS INFLIGES AU MONSTRE
                }
                      else if(arme_principale == 2)
                            {
                                 const long MIN = 1, MAX = 15;
                                 degats = (rand() % (MAX - MIN + 1)) + MIN; // DEGATS INFLIGES AU MONSTRE       
                                 }
                                else
                                {
                                    const long MIN = 1, MAX = 7;
                                    degats = (rand() % (MAX - MIN + 1)) + MIN; // DEGATS INFLIGES AU MONSTRE
                                    }
                 if(race == 1)
      {
        const long MINI = 1, MAXI = 100;                   
                srand(time(NULL));
                nombre_cc1 = (rand() % (MAXI - MINI + 1)) + MINI;
                           srand(time(NULL));
                nombre_cc2 = (rand() % (MAXI - MINI + 1)) + MINI;
                }
               
        else if(race == 2)
        {
             const long MINI = 1, MAXI = 25;
              srand(time(NULL));
                nombre_cc1 = (rand() % (MAXI - MINI + 1)) + MINI;
                           srand(time(NULL));
                nombre_cc2 = (rand() % (MAXI - MINI + 1)) + MINI;
             }
             else
             {
                 const long MINI = 1, MAXI = 5;
                  srand(time(NULL));
                nombre_cc1 = (rand() % (MAXI - MINI + 1)) + MINI;
                           srand(time(NULL));
                nombre_cc2 = (rand() % (MAXI - MINI + 1)) + MINI;
                 }
               

               
                if(nombre_cc1 == nombre_cc2)
                {
                   srand(time(NULL));         
                   degats_critique = (rand() % (MAXIM - MINIM + 1)) + MINIM;    // PUISSANCE DU COUP CRITIQUE
                   printf("Vous avez fait un coup critique de %ld points de degats !!\n", degats_critique);
                   degats_totaux = degats + degats_critique;
                   printf("Vous infligez en tout %ld degats au dragonnet  !\n\n", degats_totaux);
                   vie_monstre = vie_monstre - degats_totaux;
                   printf("Il reste %ld points de vie au dragonnet !\n\n", vie_monstre);
                   }
                   else
                   {
                   printf("Vous infligez %ld points de degats au dragonnet !!\n", degats);
                   vie_monstre = vie_monstre - degats;
                   printf("Il reste %ld points de vie au dragonnet.\n\n", vie_monstre);
                   }
                   
                   if(vie_monstre >= 1)
                   {
                     srand(time(NULL));
                degats_j = (rand() % (MAXIMU - MINIMU + 1)) + MINIMU;
                printf("Le dragonnet vous inflige %ld points de degats !!\n", degats_j)
                vie_joueur = vie_joueur - degats_j; // CALCUL DU RESTE DES PV DU J
                printf("Il vous reste %ld points de vie.\n\n", vie_joueur);       
                   }
                   break;
               
              case 2:
                   if(nombre_potions > 0)
                   {
               vie_joueur = 250 + 50;
               printf("Vous gagnez 50 points de vie, vous avez %ld points de vie", vie_joueur);   
               nombre_potions = nombre_potions - 1;
               
               }
               else
                   {
                              printf("Il semble que vous ne trouviez plus de potions dans votre sac...");
                              }
                               if(vie_monstre >= 1)
                   {
                     srand(time(NULL));
                degats_j = (rand() % (MAXIMU - MINIMU + 1)) + MINIMU;
                printf("Le dragonnet vous inflige %ld points de degats !!\n", degats_j)
                vie_joueur = vie_joueur - degats_j; // CALCUL DU RESTE DES PV DU J
                printf("Il vous reste %ld points de vie.\n\n", vie_joueur);       
                   }
                              break;
                              }
                                        }while(vie_monstre >= 1 || vie_joueur >= 1);
                                       
                   if(vie_monstre <= 0)
                   {
                                  printf("Felicitations ! Vous avez battu le dragonnet !!");
                                  }
                   else if(vie_joueur <= 0)
                   {
                       printf("Desole, le dragonnet vous a tue...");   
                        system("PAUSE");   
                        return 0;     
                        }           
                   
                   /*
                   ICI SE SITUE LA SUITE DU JEU QUI SERA CREEE QUAND LE BUG
                   DONT JE VOUS PARLE SERA REGLE
                   
                   */

               
               


     system("PAUSE");       
      return 0;
    }




    Regardez ce qu'il se passe quand vous choissisez l'option "Attaquer".

    Donc, ça c'est le problème majeur, ensuite si vous voyez des autres problèmes qui feront que le jeu ne fera pas ce qu'il "devrait" faire merci de me le dire.

    @ bientot ^^
    • Partager sur Facebook
    • Partager sur Twitter
      9 février 2006 à 17:17:43

      tu n'es pas logique ... pourquoi tu mets un switch pour chaque arme ???? tu devrait faire dès que le joueur choisi une arme mettre les variables MINI et MAXI au nombre que tu veux comme sa dans la parti attaquer tu a juste a faire un seul
      (rand() % (MAXI - MINI + 1)) + MINI;


      je sais pas si tu me comprend mais ça t'évitirais pas mal de chose ^^;) .

      puis les potions aussi.. selon ton code elle rajoute 300 pv! tu n'as pas inclu time.h
      mais malgrès tous se que je te dis c'est bien!
      • Partager sur Facebook
      • Partager sur Twitter
        9 février 2006 à 17:25:09

        Peut être que tu peux optimiser ça avec un tableau de pointeurs, par exemple :


        char* Job[3] = {"Humain","Seraphin","Gobelin"};
        scanf("%d",&race);
        if (race >= 1 && race <= 3)
        {
            printf("Vous avez choisi %s.\n\n",Job[race]);
        }
        else
        {
            printf("Erreur dans le choix de la race, le jeu va se fermer\n");
            system("PAUSE");
            return 0;
        }


        et pareil pour les armes.

        Sinon j'ai pas regardé le code plus que ça, mais continue comme ça.
        C'est en pratiquant qu'on fais des progrès ;)
        • Partager sur Facebook
        • Partager sur Twitter
          9 février 2006 à 17:47:12

          Le problème reste le même, même en suivant vos conseils.
          • Partager sur Facebook
          • Partager sur Twitter
            9 février 2006 à 17:58:47

            ton problème c'est que c'est une boucle infinie car elle continue tant que vie_monstre >= 1 || vie_joueur >=1 donc si le nombre passe en dessous ça ne marche plus...je te laisse corrigé.
            • Partager sur Facebook
            • Partager sur Twitter
              9 février 2006 à 18:21:49

              Euh, je comprend pas comment faire alors pour que la boucle ne continue pas si le joueur est mort...

              Sans ça, j'ai mit que la boucle continuait tant que le monstre vivait, et j'ai remarqué qu'il y avait a chaque fois des coups critiques...

              Ce que je trouve étrange...
              • Partager sur Facebook
              • Partager sur Twitter
                9 février 2006 à 19:23:38

                nn en fait tu mets un
                if(vie_joueur <0)
                {
                    vie-joueur = 0;
                }

                • Partager sur Facebook
                • Partager sur Twitter

                [C] Problème "d'affichage"

                × 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