Partage
  • Partager sur Facebook
  • Partager sur Twitter

Jeu plus ou moins (Code::block)

Amelioration de mon programme

    28 juillet 2020 à 15:58:32

    Bonjour, je souhaiterai amelioré mon programme du jeu plus ou moins. 
    J'ai tout fait pour empêcher mon programme d'avoir des problème notamment sur quelque points. 
    J'ai , de fait , modifié tout les entier par des  caractère grâce au scanf() .
    en effet si par malheur vous tape un  "a"  a la place d'un chiffre de type int. le programme s'emballe et réalise une boucle infinis ce qui n'est pas voulu.
    Et je ne peux pas faire un tableau de char car si on dépasse le nombre maximum , le programme s'emballe aussi. 

     J'ai donc resolut une grande quantité de probleme , cependant j'ai lu que le fait que fait de depasser le nombe max d'une chaine de caratére pouvait pauser des souci. 

    Ainsi comment amelioré mon jeu plus ou moins pour le rendre encore plus performants. 
    Merci d'avance. 

    #include<stdlib.h>
    #include<stdio.h>
    #include<time.h>
    #include<conio.h>
    #include <stdbool.h>
    
    
    int main(void)
    
    {
    
    char Choose[30];
    char Difficult[25];
    char Max[6];
    int Dmax;
    int i=0;
    int VA;
    int ChercheVA;
    char NbA[30];
    int j=0;
    int verifVAJ2=1;
    char Valtape[30];
    char Again[30];
    int Cptessai=0;
    bool Verif1=0;
    srand(time(NULL));
    
    
    
        do
            {
                Verif1=1;
                Choose[1]='\0';
                printf(" \n Si vous  voulez jouer seul taper 1 sinon taper 2 \n ");
                scanf("%30s",Choose);
                getchar();
                    if(Choose[0] =='1' )
                    {
                      break;
                    }
                    if(Choose[0] =='2')
                    {
                        break;
                    }
                    else
                    {
                     printf(" \n vous avez mal compris! ");
                     Verif1=0;
                    }
        }while( (Choose[0] !='1' || Choose[0] !='2') && (Verif1==0));
    
    printf("\n Vous avez choisi %c joueur(s)",Choose[0]);
    
    
    do{
        do{   // boucle qui va decide de la difficulté du programme
            Verif1=1;
            printf("\n saississez le niveau de difficulte");
            printf(" \n niveau 1 , le nombre est compris entre 1 et 100 ");
            printf(" \n niveau 2 , le nombre est compris entre 1 et 1000 ");
            printf(" \n niveau 3 , le nombre est compris entre 1 et 10000 \n");
            printf("\n");
            scanf("%25s",Difficult);
            getchar();
    
                    if(Difficult[0]=='1')
                  {
    
                        Max[0]='1';
                        Max[1]='0';
                        Max[2]='0';
                        Max[3]='\0';
                        break;
                  }
    
                   if(Difficult[0]=='2')
                  {
    
                        Max[0]='1';
                        Max[1]='0';
                        Max[2]='0';
                        Max[3]='0';
                        Max[4]='\0';
                        break;
                  }
    
                   if(Difficult[0]=='3')
                  {
                        Max[0]='1';
                        Max[1]='0';
                        Max[2]='0';
                        Max[3]='0';
                        Max[4]='0';
                        Max[5]='\0';
                        break;
                  }
                  else
                    {
                    printf("\n Vous vous etes trompe");
                    Verif1=0;
                    }
    
        }while( (Difficult[0] != '1' || Difficult[0] != '2' || Difficult[0] != '3') && (Verif1==0));
    
    printf("\n votre niveau de difficulte est :%c ",Difficult[0]);
    
    Dmax= atoi(Max);
    printf("\n la valeur maximum au nv de difficulte %c est %d ",Difficult[0],Dmax);
    
    
        if(Choose[0]=='1') // si il y a un joueur , l'ordinateur crée une variable aleatoire
            {
             VA=rand()%(Dmax);
    
    
            }
    i=0;
        if(Choose[0]=='2') //si il y a 2 jjoueur , le joueur va devoir crée un nombre par rapport au niveau de diff
            {
               do{
                    do{
                        printf("\n taper un nombre entre 0 et %d ",Dmax);
                        scanf("%30s",NbA);
                        while(NbA[i] != '\0' )
                        {
                            verifVAJ2=1;
                            printf("\n %c",NbA[i]);
                                if( !(NbA[i]>=0x30 && NbA[i]<=0x39) )
                                {
                                verifVAJ2=0;
                                printf(" \n il y a erreur , veuiller retaper un nombre ");
                                break;
                                }
    
                            i++;
                        }
                        }while(verifVAJ2==0);
                    NbA[i+1]='\0';
                    VA =atoi(NbA);
                }while(VA>Dmax);
                    printf(" \n l'unconnue que devra trouver l'autre joueur sera %d ",VA);
            }
    
    Cptessai=0;
    i=0;
    j=0;
        do{   //creation d'une boucle qui va etudié le nombre tapé.
            do{ //creation d'une bouce ui va créer le nombre tapé
                printf("\n taper votre nombre entre 0 et %d \n:",Dmax);
                scanf("%30s",Valtape);
                while(Valtape[j] != '\0' )
                    {
                    verifVAJ2=1;
    
                            if( !(Valtape[j]>='0' && Valtape[j]<=0x39) )
                            {
                            verifVAJ2=0;
                            printf(" \n il y a erreur , veuiller retaper un nombre ");
                            break;
                            }
                        j++;
                        }
                    }while(verifVAJ2==0);
                Valtape[j+1]='\0';
                ChercheVA = (int) atoi(Valtape);
                printf("\n tu as bien tape %d",ChercheVA);
    
    
                    if(ChercheVA > VA)
                    {
                        printf("\n Trop haut");
    
                    }
    
                    if(ChercheVA<VA)
                    {
                         printf("\n Trop bas");
    
                    }
                   if(ChercheVA==VA)
                    {
                        printf("\n bravo tu as reussi au bout de %d coup ",Cptessai+1);
                        break;
    
                    }
                    Cptessai++;
                    j=0;
    
    
        }while(ChercheVA !=VA);
    
                do{
                Again[2]='\0';
                printf("\n si vous voulez recommencer une partie tape 1, sinon tape 2");
                printf("\n faites votre choix : \n");
                scanf("%25s",Again);
    
                }while((Again[0] !='2'|| Again[0] != '1')&& !(Again[2]=='\0'));
    
                if(Again[0]=='1')
                {
                printf("\n Vous allez rejouez , preparez vous :");
                system("pause");
                system("cls");
                }
    
    }while(Again[0] =='1');
    
    
    
    }
    





    -
    Edité par AbcAbc6 28 juillet 2020 à 16:07:35

    • Partager sur Facebook
    • Partager sur Twitter
      28 juillet 2020 à 17:26:36

      Tu trouveras une piste de solution dans le lien suivant:
      http://sdz.tdct.org/sdz/la-saisie-securisee-avec-scanf.html
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        29 juillet 2020 à 7:45:43

        Le probleme a été justement resolut avec des scanf() , cependant , lorsque je tape plusieurs caractére , il passe deux fois dans ma boucles et non qu'une seule fois.... sinon tout les autres beug on été resolut 

        J'avais aussi cette question pourquoi lorsque je fais une scanf("%d",) et que je met une lettre par erreur le programme realise une boucle infinie ? 
         
        PierrotLeFou a écrit:

        Tu trouveras une piste de solution dans le lien suivant:
        http://sdz.tdct.org/sdz/la-saisie-securisee-avec-scanf.html


        -
        Edité par storyboard 29 juillet 2020 à 9:20:56

        • Partager sur Facebook
        • Partager sur Twitter
          29 juillet 2020 à 17:08:22

          Si tu as lu le lien donné par PierrotLeFou, tu as la réponse à ta question.

          Et ce bout de code doit se trouver à de nombreux exemplaires sur le site et le net:

          #include <stdio.h>
          
          void emptyBuffer(void) {
          	int c;
          	
          	while((c=getchar())!='\n' && c!=EOF);
          }
          
          
          int main(void) {
          	int n;
          	int given;
          	
          	do {
          		printf("Donnez n: ");
          		given=scanf("%d",&n);
          		emptyBuffer();
          	} while(!given);
          	
          	return(0);
          
          }
          • Partager sur Facebook
          • Partager sur Twitter

          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

            29 juillet 2020 à 17:30:59

            Bonjour,

            Ce qui serai top aussi dans ton programme serai de parser ton code en plusieurs fonctions pour suivre le principe de responsabilité unique (une fonction qui réalise une tâche). C'est un petit plus mais pour la suite ça te sera très utile.

            • Partager sur Facebook
            • Partager sur Twitter

            Un bon dev est un dev qui sait Googler

              29 juillet 2020 à 17:35:05

              Flingouin a écrit:

              Ce qui serai top aussi dans ton programme serai de parser ton code en plusieurs fonctions

              Sauf qu'à ce stade du tutoriel, les fonctions n'ont pas encore été abordées.

              • Partager sur Facebook
              • Partager sur Twitter

              On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                29 juillet 2020 à 17:50:36

                edgarjacobs a écrit:

                Sauf qu'à ce stade du tutoriel, les fonctions n'ont pas encore été abordées.

                Autant pour moi, je ne savais pas que cela venait d'un tuto.



                • Partager sur Facebook
                • Partager sur Twitter

                Un bon dev est un dev qui sait Googler

                  29 juillet 2020 à 18:02:31

                  Flingouin a écrit:

                  Autant pour moi, je ne savais pas que cela venait d'un tuto.

                  Pas d'importance, mais tu as raison: tout cela demande des fonctions.

                  -
                  Edité par edgarjacobs 29 juillet 2020 à 18:02:45

                  • Partager sur Facebook
                  • Partager sur Twitter

                  On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                    29 juillet 2020 à 20:48:30

                    non je me suis arreter a SDL car pour l'instanst je prefere me consacrer a du langage C simple ett basique pour  bien approfondir les bases .  Mais en effet j'ai pensé a reliser des fonction cependant je voyais pas trop comment m'y prendre ... 



                    -
                    Edité par storyboard 29 juillet 2020 à 20:49:41

                    • Partager sur Facebook
                    • Partager sur Twitter
                      30 juillet 2020 à 14:27:45

                      Bonjour storyboard,

                      Je pense déjà que tu pourrais améliorer ton programme en créant des fonctions qui réalisent chacune un travail spécifique: afficher, lire, calculer, parce que sinon on a du mal à lire ton code.

                      Sur le site, juste après le TP il y a le cours sur les fonctions, et juste après ils proposent de nouveau d'améliorer le TP.

                      Tu pourrais y jeter un œil, cela pourrait t'aider. J'ai fait hier le même TP, après je ne sais pas ce que cela vaut je débute.

                      Malgré tout pour les conditions pour m'assurer que la personne ne ce soit pas pas trompé, je propose de taper Y (pour YES) et je teste Y ou y mais pas plus. Si une autre touche est entrée je considère que l'on sort de la boucle. Cela permet d'avancer en débutant.

                      Je mets mon code ci-dessous, comme je disais je débute c'est à titre d'information (le programme est en C):

                      #include <stdio.h>
                      #include <stdlib.h>
                      #include <time.h>
                      
                      
                      int level ()
                      {
                          const int MIN = 1;
                          int mystery;
                          int go = 1;
                          int MAX = 1;
                          char level = 'a';
                            
                          printf("Which level do you want to play ? \n");
                          printf("Easy, Medium or Hard \n");
                          printf("Enter E for Easy, M for Medium or H for Hard \n");
                          scanf("%s", &level);
                            
                          while (go)
                          {
                              if (level == 'E' || level =='e' || level == 'M' || level == 'm' || level == 'H' || level == 'h')
                                {
                                    go = 0;
                                    if (level == 'E' || level == 'e')
                                        MAX = 10;
                                    else if (level == 'M' || level == 'm')
                                        MAX = 100;
                                    else if (level == 'H' || level == 'h')
                                        MAX = 1000;
                                    else
                                        printf("Error");
                                }
                                
                              else
                              {
                                  printf("Wrong choice, enter again a level selection \n");
                                  scanf("%s", &level);
                              }
                          }
                          
                          srand((int)time(NULL));
                          mystery = (rand()% (MAX + 1 - MIN)) + MIN;
                                
                          return mystery;
                      }
                      
                      void game()
                      {
                          int mystery;
                          int go = 1;
                          int count = 0;
                          
                          mystery = level();
                        
                          do
                          {
                              int choice;
                              printf("Which is the correct number ? ");
                              scanf("%d", &choice);
                              ++count;
                              printf("try %d", count);
                             
                              if(mystery>choice)
                                  printf("\t It is more \n\n");
                              else if (mystery<choice)
                                  printf("\t It is less \n\n");
                              else
                              {
                                  printf("\t Congratulation ! In  %d times \n\n", count);
                                  go = 0;
                              }
                          } while(go);
                      }
                      
                      void multiplayer(int player)
                      {
                          for (int i = 0; i < player; i++)
                          {
                              printf("Player %d your turn ! Let's go ! \n", i + 1);
                              game();
                          }
                              
                      }
                      
                      int main(int argc, const char * argv[])
                      {
                          int newGame = 1;
                          char reply = 'y';
                          int player = 0;
                          
                          printf("How many players ? \n");
                          scanf("%d", &player);
                          
                          while(newGame)
                          {
                              multiplayer(player);
                              printf("Do you want to play a new game ? \n");
                              printf("If yes enter Y, otherwise enter N \n");
                              scanf("%s", &reply);
                              if ((reply =='Y') || (reply =='y'))
                                  newGame = 1;
                              else
                              {
                                  printf("See you soon ^_^ \n");
                                  newGame = 0;
                              }
                      
                          }
                      
                      return 0;
                      }


                      • Partager sur Facebook
                      • Partager sur Twitter
                        30 juillet 2020 à 17:35:58

                        @MathieuSeligmann:
                        Dans ta fonction level, je me serais arrangé pour ne mettre le scanf qu'une fois au début de la boucle.
                        D'ailleurs, j'aurais fait une boucle do ... while plutôt que while seulement, car je suppose que tu veux jouer au moins une fois.
                        Tu pourrais limiter tes tests à majuscule ou minuscule avec les fonctions toupper et tolower:
                        Il serait préférable de suggérer d'écrire les réponses en minuscule.
                        J'aurais remplacé les else if par un switch
                        Dans ton main, tu pourrais sortir de ta boucle le message qui dit que c'est fini

                        -
                        Edité par PierrotLeFou 30 juillet 2020 à 17:51:29

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Le Tout est souvent plus grand que la somme de ses parties.

                          30 juillet 2020 à 17:44:34

                          J'ajoute que

                          • lignes 17 et 37, le format du scanf() doit être %c et pas %s: level est du type char, pas du type char *
                          • le même problème se trouve ligne 99
                          • les lignes 100 à 106 se résument à 
                                    if (reply !='Y' && reply !='y')
                                    {
                                        printf("See you soon ^_^ \n");
                                        newGame = 0;
                                    }
                            


                          Et il ne faut pas croire que les warnings sont là pour faire joli, il faut absolument les corriger

                          -
                          Edité par edgarjacobs 30 juillet 2020 à 17:53:10

                          • Partager sur Facebook
                          • Partager sur Twitter

                          On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                            30 juillet 2020 à 18:06:00

                            Je pourrais également ajouter que les variables newGame et reply font double usage dans le main.
                            Si on remplace la boucle while du main par un do ... while (je sais, c'est une obcession ...)
                            et si on converti reply en minuscule on n'a besoin que de tester si reply vaut 'y' dans le while de la fin.
                            et je sort le "see you soon" de cette boucle.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le Tout est souvent plus grand que la somme de ses parties.

                              31 juillet 2020 à 8:01:20

                              Bonjour,

                              Tout d'abord merci beaucoup pour vos retours.

                              Cela me permet d'apprendre et de m'améliorer.

                              Je n'avais pas vu encore les chaînes de caractère.

                              J'ai bien saisi la différence entre %c et %s, en cherchant sur internet j'ai compris que %s induit un pointeur.

                              Je n'avais pas vu ce chapitre encore. D'autre part je programme sur Xcode et le compilateur ne m'a mis aucun message d'erreur.

                              J'ai repris le code et je l'ai modifié: j'ai intégré un switch, j'ai remplacé une boucle while par un do...while et j'ai modifié les fonctions pour travailler sur ce sujet.

                              Par contre maintenant il y a une erreur que je n'arrive pas à trouver.

                              Quand le joueur souhaite refaire x parties, il clique chaque sur 1 pour rejouer dans la fonction newGame().

                              Quand il finit par cliquer sur 0 pour arrêter j'ai finalement x fois le message qui demande de choisir son choix pour arrêter, alors que normalement avec le premier 0 on devrait sortir de la boucle. Je n'arrive pas à trouver l'erreur. Si quelqu'un pourrait m'aider ? Merci par avance

                              #include <stdio.h>
                              #include <stdlib.h>
                              #include <time.h>
                              
                              int numberGeneration(const int MIN, const int MAX);
                              void level(void);
                              void game(const int MIN, const int MAX);
                              void newGame(void);
                              void multiplayer(int player);
                              
                              int numberGeneration(const int MIN, const int MAX)
                              {
                                  srand((int)time(NULL));
                                  return ((rand()% (MAX + 1 - MIN)) + MIN);
                              }
                              
                              void level(void)
                              {
                                  int level;
                                  
                                  printf("===================================\n");
                                  printf("                                   \n");
                                  printf("              GAME                 \n");
                                  printf("                                   \n");
                                  printf("Which level do you want to play ?  \n");
                                  printf("Press: 1 for Easy (1 to 10)        \n");
                                  printf("       2 for Medium (1 to 100)     \n");
                                  printf("       3 for Hard (1 to 1000)      \n");
                                  printf("                                   \n");
                                  printf("===================================\n");
                              
                                  printf("Select your choice here --> ");
                                  scanf("%d", &level);
                                  printf("\n");
                                  
                                  switch (level)
                                   {
                                       case 1:
                                           game(1,10);
                                           break;
                                       case 2:
                                           game(1,100);
                                           break;
                                       case 3:
                                           game(1,1000);
                                           break;
                                       default:
                                           printf("Invalid key\n");
                                           break;
                                   }
                              }
                              
                              void game(const int MIN, const int MAX)
                              {
                                  int mystery;
                                  int go = 1;
                                  int count = 0;
                                  
                                  mystery = numberGeneration(MIN,MAX);
                                
                                  do
                                  {
                                      int choice;
                                      printf("Which is the correct number ? ");
                                      scanf("%d", &choice);
                                      ++count;
                                      printf("try %d", count);
                                     
                                      if(mystery>choice)
                                          printf("\t It is more \n\n");
                                      else if (mystery<choice)
                                          printf("\t It is less \n\n");
                                      else
                                      {
                                          printf("\t Congratulation ! In  %d times \n\n", count);
                                          go = 0;
                                      }
                                  } while(go);
                                  newGame();
                              }
                              
                              void newGame()
                              {
                                  int newGame = 1;
                                  while(newGame)
                                  {
                                      printf("Do you want to play a new game ? \n");
                                      printf("1 for yes, 0 for no \n");
                                      printf("Select your choice here --> ");
                                      scanf("%d", &newGame);
                                      printf("\n");
                                      if (newGame == 1)
                                          level();
                                      else
                                          newGame = 0;
                                  }
                              }
                              
                              void multiplayer(int player)
                              {
                                  for (int i = 0; i < player; i++)
                                  {
                                      printf("\nPlayer %d your turn ! Let's go ! \n", i + 1);
                                      level();
                                  }
                              }
                              
                              int main(int argc, const char * argv[])
                              {
                                  
                                  int player = 0;
                                  
                                  printf("How many players ? Enter a number here --> ");
                                  scanf("%d", &player);
                                  multiplayer(player);
                                  printf("See you soon ! \n\n");
                                  
                                  return 0;
                              }

                              Cordialement

                              Mathieu

                              • Partager sur Facebook
                              • Partager sur Twitter
                                31 juillet 2020 à 17:28:33

                                e

                                -
                                Edité par Santrhyl 31 juillet 2020 à 17:30:07

                                • Partager sur Facebook
                                • Partager sur Twitter
                                  31 juillet 2020 à 17:54:25

                                  Dans ta fonction game, tu appelles newgame qui appelle level et qui appelle game encore.
                                  Tu fais de la récursivité.
                                  Il faut trouver un autre truc.
                                  La fonction srand() ne doit être appelée qu'une fois dans le main.
                                  Si je fais un mauvais choix pour le niveau, tu ne demandes pas de recommencer.
                                  • Partager sur Facebook
                                  • Partager sur Twitter

                                  Le Tout est souvent plus grand que la somme de ses parties.

                                    31 juillet 2020 à 18:14:06

                                    @MathieuSeligmann: si tu veux qu'on continue à discuter de ton programme, tu ferais mieux de créer ton propre sujet
                                    • Partager sur Facebook
                                    • Partager sur Twitter

                                    On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent

                                      31 juillet 2020 à 18:41:12

                                      @edgarjacobs:
                                      D'accord avec le principe. Mais comme il a déjà posté son code, se serait inutile de recommencer ailleurs.
                                      @MathieuSeligmann:
                                      C'est une bonne idée que de faire des fonctions. Mais il ne faut pas en faire pour le plaisir d'en faire.
                                      Ta fonction numberGeneration est presque inutile si tu enlèves l'appel à srand().
                                      Pour régler ton problème de récursivité et puisque game est toujours appelé avec MIN = 1, je suggère que level() n'appelle pas game mais retourne le maximum.
                                      Je remplacerais l'appel à newGame par une boucle do ... while qui envelopperait celle qui est déjà là.
                                      Je suis même surpris que le compilateur accepte un nom de fonction (newGame) et une variable de même nom dans son code.
                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Le Tout est souvent plus grand que la somme de ses parties.

                                        1 août 2020 à 23:07:51

                                        Santrhyl a écrit:

                                        e

                                        -
                                        Edité par Santrhyl hier à 17:30

                                        Merci, c'est plus clair :D

                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                        Anonyme
                                          2 août 2020 à 1:27:13

                                          MathieuSeligmann a écrit:

                                          Bonjour,

                                          Tout d'abord merci beaucoup pour vos retours.

                                          Cela me permet d'apprendre et de m'améliorer.

                                          Je n'avais pas vu encore les chaînes de caractère.

                                          J'ai bien saisi la différence entre %c et %s, en cherchant sur internet j'ai compris que %s induit un pointeur.

                                          Je n'avais pas vu ce chapitre encore. D'autre part je programme sur Xcode et le compilateur ne m'a mis aucun message d'erreur.

                                          J'ai repris le code et je l'ai modifié: j'ai intégré un switch, j'ai remplacé une boucle while par un do...while et j'ai modifié les fonctions pour travailler sur ce sujet.

                                          Par contre maintenant il y a une erreur que je n'arrive pas à trouver.

                                          Quand le joueur souhaite refaire x parties, il clique chaque sur 1 pour rejouer dans la fonction newGame().

                                          Quand il finit par cliquer sur 0 pour arrêter j'ai finalement x fois le message qui demande de choisir son choix pour arrêter, alors que normalement avec le premier 0 on devrait sortir de la boucle. Je n'arrive pas à trouver l'erreur. Si quelqu'un pourrait m'aider ? Merci par avance

                                          salut,

                                          Ton dernier code est bien mieux que le premier ;)

                                          Mais il y a encore quelles petites choses à virer du code (ou rajouter) :

                                          - des booléens (stdbool existe !) : "newGame == 1" est à bannir de tous tes codes ! ça a aucun sens ! Alors qu'avec un booléen (le best) "newGame == false" est plus claire, avec une macro ou enum "newGame == NON" (pas d'idée de nom ^^') est aussi claire (mais un peu moins à mon goût)

                                          - des macros (je ne sais si tu en avais besoin ici)

                                          - des commentaires !! Personnellement je commente toujours mes prototypes au format doxygen pour que ce très clair pour moi et les utilisateurs de mon code. Et aussi je préfère envoyer balader mes définitions de fonctions en bas du fichier car on s'en fout de la définition d'une fonction (on va la voir seulement lors de sa création ou son débogage, autrement c'est le signe d'un code mal fait). Seul les prototypes, types et le main sont important, le reste on ira le chercher au ctr+F si besoin.

                                          - Faire gaffe au nom des variables (newGame est à la fois une fonction et une variable).

                                          - Avoir des noms de fonctions plus explicite (qui traduit plus une action que décrire à quoi elle se rapporte)

                                          Sache que faire de l'optimisation de ressources est encore loin, ne t'embête avec ça. Un code lisible sera toujours meilleur qu'un code efficace, concentre toi là-dessus ^^

                                          -
                                          Edité par Anonyme 2 août 2020 à 1:30:12

                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            2 août 2020 à 1:47:37

                                            @BrigitteLPB:
                                            newGame == false est plus clair mais il nécessite l'utilisation d'un header (stdbool.h). Ce que les débutants ne voient pas nécessairement.
                                            Même chose pour les macros. C'est à peine s'ils comprennent le pourquoi des include en général, et ils nous fouent le 'stdlib.h' à  toute sauce.
                                            Les enum sont vus beaucoup plus loin dans le cours après les fonctions.
                                            «autrement c'est le signe d'un code mal fait»
                                            C'était la façon de procéder autrefois. Le main se retrouvait toujours en dernier. Maintenant, moi aussi je préfère renvoyer mes fonctions à la fin.
                                            J'ajoute qu'un code qui fonctionne est plus important qu'un code efficace ... mais qui ne fonctionne pas.
                                            • Partager sur Facebook
                                            • Partager sur Twitter

                                            Le Tout est souvent plus grand que la somme de ses parties.

                                              2 août 2020 à 8:22:17

                                              À mon avis, quand on débute, on ne doit pas trop s'embêter à essayer de rendre son code parfait. Le principal est de comprendre ce qu'on a fait et de pouvoir le ré-utiliser. Il y a sûrement mille et une suggestion à faire pour MathieuSeligmann mais je lui conseillerais plutôt de passer au chapitre suivant... :)
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                              Anonyme
                                                3 août 2020 à 12:47:50

                                                robun a écrit:

                                                À mon avis, quand on débute, on ne doit pas trop s'embêter à essayer de rendre son code parfait. Le principal est de comprendre ce qu'on a fait et de pouvoir le ré-utiliser. Il y a sûrement mille et une suggestion à faire pour MathieuSeligmann mais je lui conseillerais plutôt de passer au chapitre suivant... :)


                                                Rendre son code parfait est une chose, le rendre lisible en est une autre. S'il peut apprendre à faire un code lisible et clair maintenant ça lui en serra que plus bénéfique ^^
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  3 août 2020 à 14:12:30

                                                  BrigitteLPB a écrit:

                                                  Rendre son code parfait est une chose, le rendre lisible en est une autre. S'il peut apprendre à faire un code lisible et clair maintenant ça lui en serra que plus bénéfique ^^

                                                  Certes, mais que proposes tu ? 

                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    3 août 2020 à 16:35:20

                                                    Merci be

                                                    aucoup , car je regarde tout vos messages ,  je n'ai pas encore ton niveau rouloute quoi que je m'en rapproche. Mais merci d'avoir partagé ton programme et ton evolutions. De cette manière j'arrive a voir la démarche a voir .

                                                    Merci a tous de me permettre d'evoluer, je ne pensais pas que beaucoup de personnes etait dans mon cas de recherches et j'avais oublié mon propre post. Cela m'as redonné espoir alors Merci Beaucoup. 

                                                    Du coup si je comprend bien dans mon cas precis il faudrait que je realise des fonctions et que j'ameliore mes scanf(). 
                                                    je partagerais mon programme futur pour l'instant l est loin d'etre fini. 
                                                    Merci a tous pour vos retours. 

                                                    -
                                                    Edité par storyboard 3 août 2020 à 16:43:51

                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      3 août 2020 à 20:01:34

                                                      Merci beaucoup pour vos retours.

                                                      Effectivement je n'ai pas utilisé les booléens, je ne savais pas qu'il fallait les appeler avec #include <stdbool.h>

                                                      D'autre part je ne connaissais pas non plus enum. J'ai lu une explication sur la toile.

                                                      J'ai bien saisi son intérêt, merci.

                                                      Après j'ai toujours un problème dans le code que je n'arrive pas à résoudre.

                                                      Si je fais jouer 2 personnes et que le premier joueur joue deux fois d'affilés, j'ai deux fois le message pour quitter qui apparait alors que j'ai déjà renseigné 0 pour sortir, or le choix apparait deux fois, ce qui n'est pas normal.

                                                      Do you want to play a new game ? 
                                                      1 for yes, 0 for no 
                                                      Select your choice here --> 0
                                                      
                                                      Do you want to play a new game ? 
                                                      1 for yes, 0 for no 
                                                      Select your choice here --> 


                                                      Avec l'appel de la fonction newGame(), puis level(), je reviens dans la boucle while pour jouer à nouveau mais à la fin, en tapant sur 0, je devrais sortir de la boucle while.

                                                         if (newGame == 1)
                                                                  level();
                                                              else
                                                                  newGame = 0;

                                                      Merci par avance

                                                      Cordialement

                                                      Mathieu

                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        4 août 2020 à 5:40:47

                                                        Je pense que j'ai déjà répondu à cette question. Tu ne dois pas appeler newGame dans game.
                                                        Dans game(), tu fais une boucle do ... while qui enveloppe l'autre et qui demande à la fin si on veut jouer encore.
                                                        En fait, newGame n'a plus sa raison d'être.

                                                        -
                                                        Edité par PierrotLeFou 4 août 2020 à 5:48:14

                                                        • Partager sur Facebook
                                                        • Partager sur Twitter

                                                        Le Tout est souvent plus grand que la somme de ses parties.

                                                          4 août 2020 à 11:04:17

                                                          Voici ma premiere fonction Nombre de joueurs, j'aimerai savoir comment utiliser corecctement les pointeurs avec des chaine de caractéres. 

                                                          void Nbr_Joueur(char *c, int V)
                                                          {
                                                            do{
                                                                      V=1;
                                                                      c[1]='\0';
                                                                      printf(" \n Si vous  voulez jouer seul taper 1 sinon taper 2 \n ");
                                                                      scanf("%30s",c);
                                                                      getchar();
                                                                          if(c[0] =='1' )
                                                                          {
                                                                            break;
                                                                          }
                                                                          if(c[0] =='2')
                                                                          {
                                                                              break;
                                                                          }
                                                                          else
                                                                          {
                                                                           printf(" \n vous avez mal compris! ");
                                                                           V=0;
                                                                          }
                                                              }while( (c[0] !='1' || c[0] !='2') && (c==0));
                                                             //que faire ensuite ,?????  
                                                          }



                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                          Anonyme
                                                            4 août 2020 à 13:13:48

                                                            Salut

                                                            Une dernière chose pour rendre ton code encore plus lisible. Tu peux ajouter des modules (que tu verras plus tard dans le cours). En bref, tu decoupes ton code en plusieurs fichiers ayant chacun une fonction / utilité dans le code et à l'intérieur tu regroupes toutes les fonctions pour réaliser cette fonctionnalité.

                                                            Pour ton code tu aurais :

                                                            - main : appel la boucle principale du jeu

                                                            - module de jeu : réalise toute la partie technique du jeu (tirage du nombre, plus/moin, gestion des joueurs, ...)

                                                            - module d'affichage : affiche le jeu, les menus, ...

                                                            Je sais que ça peut paraître un peu compliqué à comprendre mais c'est le meilleur code que tu puisse faire (même s'il est lourd pour juste un +/-) car tu dissocie l'affichage du jeu. Par conséquent tu pourras plus facilement changer de méthode d'affichage (je penese a la SDL)

                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                              4 août 2020 à 14:53:46

                                                              storyboard : dans la fonction 'NbrJoueur', à quoi correspondent 'c' et 'V' ? Ça peut être utile de le mettre en commentaire.

                                                              Il me semble que le but de cette fonction est de retourner le nombre de joueurs. Donc elle doit être de type 'int' (ou 'unsigned int', ou autre variante, peu importe) et non 'void', et doit se terminer par « return <un nombre> ».

                                                              while( (c[0] !='1' || c[0] !='2')

                                                              Tu es sûr du || ? Si je tape '1', c[0] sera égal à '1', mais sera différent de '2', donc la condition sera vérifiée. Est-ce vraiment le but ? (Pour qu'elle ne soit pas vérifiée il faudrait que sa négation soit vraie, et sa négation est : c[0] == 1 et c[0] == 2. Bizarre...)

                                                               && (c==0));

                                                              Ça aussi c'est bizarre. Là, je n'ai pas la moindre idée de ce que tu veux faire. ('c' a été défini comme pointeur, donc tu veux que l'adresse du pointeur soit l'adresse 0 ?)

                                                              -
                                                              Edité par robun 4 août 2020 à 17:20:03

                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              Jeu plus ou moins (Code::block)

                                                              × 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