Partage
  • Partager sur Facebook
  • Partager sur Twitter

zPlus

Août - Revisitez vos classiques !

    8 août 2012 à 0:20:07

    Mois : Août
    Sujet : Aléatoire, gestion du temps et des fichiers, pratique du C


    zPlus


    Connaissez-vous le plus ou moins ? C'est un petit jeu inconnu de ce site qui est censé vous faire deviner un nombre en vous donnant des indices.

    Bref, vous le connaissez tous très bien, même trop parfois (n'est-ce pas damjuve ?). ;)
    Je vous propose aujourd'hui de revisiter ce mythique jeu en lui ajoutant maintes améliorations, comme le mode multijoueur ou la gestion des scores par exemple. Je précise juste les règles de bases au cas où :

    • Le programme génère un nombre entre 0 et 100 ;
    • Vous essayez de deviner ce nombre en entrant des nombres ;
    • Le programme compare votre réponse avec le nombre généré précédemment puis vous dit ensuite si son nombre est inférieur, supérieur ou égal au vôtre. Si c'est égal, on quitte, sinon, on recommence.

    1) La base


    Compétences minimales requises : Partie 2 : les bases

    Donnez-moi le code minimal pour effectuer ceci :

    Quel est le nombre mystère : 50
    C'est plus !
    
    Quel est le nombre mystère : 75
    C'est moins !
    
    Quel est le nombre mystère : 63
    C'est moins !
    
    Quel est le nombre mystère : 57
    Bravo !

    Pour commencer, votre programme devra tirer un nombre aléatoire compris entre 0 et 100.
    Je vous conseille fortement d'utiliser les fonctions pour arriver à vos fins, en effet,

    • Elles sont réutilisables. Plus besoin de recopier bêtement du code plusieurs fois de suite ! Avec une fonction, il suffit d'écrire une seule fois la fonction et ensuite de l'appeler autant de fois que l'on veut.
    • Elles sont plus facilement maintenables : si votre fonction est inadaptée, il suffit d'en changer le code. C'est beaucoup plus rapide que de modifier plusieurs exemplaires d'une même suite d'instruction, surtout s'ils sont disséminés n'importe comment dans tout le programme.
    • Elles permettent de mieux s'organiser : en divisant le code en fonctions, on peut ainsi séparer les différentes opérations et mieux s'y retrouver lors de la relecture du code. C'est quand même plus agréable de lire un code bien aéré qu'une gigantesque suite d'instructions de 2000 lignes dans laquelle tout est mélangé n'importe comment.


    Afin de tirer un nombre pseudo-aléatoire, vous devez inclure l'header time.h afin d'utiliser la fonction time et stdlib.h pour les fonctions rand et srand.
    La fonction srand utilise son argument comme "graine" pour la génération d'une nouvelle liste (séquence) de nombres pseudo-aléatoires, qui seront fournis par rand. Ces séquences sont reproductibles en appelant srand avec la même valeur de graine. Il faut donc que la graine envoyée à srand soit différente à chaque exécution afin que la séquence de nombre pseudo-aléatoires soit différente. La fonction time renvoi le nombre de secondes écoulé depuis le 1er janvier 1970 : ce nombre est donc différent à chaque exécution (du moins si elles ont au moins une seconde d'écart entre elles), c'est donc pour cela que l'on l'utilise avec la fonction srand.

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void)
    {
        int n = 0, m = 0, l = 0;
    
        srand(time(NULL));
    
        n = rand(); /* Génère un nombre entre 0 et RAND_MAX */
        m = rand() % 50; /* Génère un nombre entre 0 et 50 */
        l = (rand() % (50 - 25 + 1)) + 25; /* Génère un nombre entre 25 et 50 */
    
        printf("n = %d\nm = %d\nl = %d", n, m, l);
    
        return 0;
    }
    

    Faites bien attention, on utilise la fonction srand qu'une seule fois dans le code, au début du main.


    Bonus n°1 : Créer une IA qui résout ce jeu avec le moins d'essais possibles (vous pouvez laisser votre programme tirer un nombre au hasard ou même choisir manuellement - dans le jeu bien sûr - la valeur de la variable max par exemple).


    2) Quelques petites améliorations


    Compétences minimales requises : Partie 2 : les bases

    Jusque-là, votre programme devrait prendre tout au plus 30 lignes. Dans ces lignes, vous devriez surement avoir une boucle avec trois conditions, je vous interdis de dupliquer tout ça. La plus grande erreur de la plupart des débutants est de copier/coller cette boucle afin de créer plusieurs niveaux de difficulté, ou pour le mode multijoueur par exemple. Tout cela rend votre code difficile à maintenir (si vous voulez ajouter un niveau par exemple), long, et pas clair du tout. Au lieu de se compliquer la vie, il vous suffit de changer la valeur de la variable max avant la boucle principale du jeu.

    Voici ce que je vous propose de faire :

    • Programmez un menu qui propose pour le moment le mode solo, le mode multijoueur (actuellement indisponible) et la possibilité de quitter ;
    • Donnez le choix de choisir la valeur de la variable max depuis un menu de difficulté (très facile : 10, facile : 100, intermédiaire : 1000, etc.) ;
    • Ajoutez le mode multijoueur (évitez le plus possible la répétition de votre code souvenez-vous) : le joueur numéro 1 choisit le nombre mystère, on efface la console, et le joueur numéro 2 doit essayer de le trouver ;
    • Proposez la possibilité de rejouer ;
    • Le tout en utilisant les fonctions pardi !

    Afin d'effacer la console de manière à peu près portable (qui fonctionne sur plusieurs systèmes d'exploitation, comme Windows, ou GNU/Linux par exemple), utilisez ceci, même si vous ne comprenez pas ce code :

    #include <stdio.h>
    #include <stdlib.h>
    
    #ifdef __WIN32__
        #define clear() system("cls")
    
    #else /* Le reste, UNIX en particulier */
        #define clear() system("clear")
    #endif
    
    int main(void)
    {
        int n = 0;
    
        scanf("%d", &n); /* On demande un nombre à l'utilisateur */
        clear(); /* On efface la console */
        printf("n = %d\n", n); /* On affiche ce nombre */
    
        return 0;
    }
    


    Bonus n°2 : Pour le mode multijoueur, déterminez l'intervalle dans lequel se trouve le nombre proposé par le premier joueur; par exemple :

    >>> 68
    Le nombre mystere se trouve entre 0 et 100
    
    >>> 7
    Le nombre mystere se trouve entre 0 et 10
    
    >>> 48792
    Le nombre mystere se trouve entre 0 et 100000

    N'utilisez pas plusieurs simples if / else if à la suite; essayez de trouver l'intervalle avec un algorithme non naïf.
    Ce bonus sera utile pour la partie numéro 4.

    3) Statistiques quand tu nous tiens...


    Compétences minimales requises : Partie 2 : les bases + time.h et ses fonctions

    Ici, je vous demande d'ajouter un compteur d'essais et de gérer le temps. Lorsque l'utilisateur aura trouvé le nombre mystère, votre programme lui donnera des statistiques. Tant qu'à faire, indiquez à chaque essai à quels essais le joueur en est.

    Voici un exemple :

    Vous avez mis 6 essais pour trouver le nombre 42, le tout en 17 secondes.
    Ce qui fait en moyenne 2.8s par essais.


    Je vous recommande d'utiliser la fonction time et la fonction difftime, présentés dans le tutoriel de Craki, afin de manipuler le temps.
    Pour afficher seulement <math>\(n\)</math> chiffres après la virgule, je vous invite à lire cette partie du nouveau / second tutoriel C.


    4) La gestion des fichiers, et plus si affinité...


    Compétences minimales requises : Partie 3 : Les agrégats et leur gestion + Partie 2 : Techniques « avancées » du langage C

    Notre programme grandi vite, il vous donne la possibilité de faire un certain nombre d'actions et vous donne même quelques résultats. Cependant, tout cela se perd à la fermeture du programme. Pourquoi ne pas enregistrer le tout ? Voici ce que j'attends de vous :

    • Au démarrage, demander le pseudo du joueur (on le nommera désormais par son pseudo) sous forme d'un menu listant les joueurs déjà enregistrés (si la liste est nulle, on demande directement de pseudo du joueur) : "1. paraze" | "2. informaticienzero" par exemple ;
    • Pour le mode "1 joueur" : afficher ses stats' (j'y reviens après) ;
    • Pour le mode "2 joueurs" idem sauf que l'on demande de la même manière le pseudo du joueur 2 et que l'on n’affiche pas les statistiques du joueur 1 ;
    • Commencer le jeu !
    • Quand le joueur souhaite quitter le jeu, enregistrer informations (statistique) suivantes :
      • Le nombre de parties jouées (utile pour calculer la moyenne : ((nb_partie * moyenne) + nb_essais) / ++nb_partie;).
      • Le score, à vous de voir comment vous le calculerez ;
      • La moyenne totale à chaque intervalle :
        • Du nombre d'essais ;
        • Du temps utilisé pour trouver le nombre mystère (17s par exemple) ;
        • Du temps utilisé par essais (2.8s par exemple).
      • Le maximum à chaque intervalle :
        • Du nombre d'essais ;
        • Du temps utilisé pour trouver le nombre mystère (32s par exemple) ;
        • Du temps utilisé par essais (4.7s par exemple).
      • Le minimum à chaque intervalle :
        • Du nombre d'essais ;
        • Du temps utilisé pour trouver le nombre mystère (15s par exemple) ;
        • Du temps utilisé par essais (2.4s par exemple).
    • Un menu plus complet :
      • 1 joueur ;
      • 2 joueurs ;
      • Options :
        • Changer son pseudo (on les liste sous forme d'un menu encore une fois) ;
        • Supprimer son avancement ;
        • Afficher les statistiques ;
        • Quitter (le menu option).
      • Classement : affiche la liste décroissante des meilleurs joueurs (comparez tout simplement les scores) ;
      • Quitter.

    Héhé. :soleil:

    Si vous avez crée une IA, ajoutez dans le menu principal un mode IA, vous pouvez aussi enregistrer ses scores si vous avez envie, vous pourrez ensuite comparez vos scores avec ceux de l'IA.


    Bonus n°3 : Programmer tout ce programme en mode graphique (avec la SDL par exemple).


    Bonne chance !


    Edit : J'ai insisté sur l'utilisation des fonctions et leurs utilités.
    Edit 2 : Ajout du bonus de l'IA.
    Edit 3 : Ajout du bonus de la mise-à-jour de l'intervalle.
    Edit 4 : Suppression du dernier bonus ajouté (après réflexion, Maëlan à bel et bien raison).
    • Partager sur Facebook
    • Partager sur Twitter
      8 août 2012 à 10:13:36

      Bouh, le vilain prétexte pour faire de la pub. :p

      Allez, histoire de me marrer un coup, je participe !

      ( C’est bien en réponse à ça ? )
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        8 août 2012 à 10:16:16

        je pense que oui ;)
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          8 août 2012 à 10:48:34

          Voila pour le niveau 1 :


          #include <stdio.h>
          #include <stdlib.h>
          #include <time.h>
          
          #define MAX 100
          
          int main(void)
          {
              int nb_mystere = 0, nb_choisi = 0;
          
              srand((unsigned)time(NULL));
              nb_mystere = rand() % MAX;
          
              do
              {
                  printf("Quel est le nombre mystere : ");
                  scanf("%d", &nb_choisi);
                  while(getchar() != '\n');
          
                  if(nb_choisi < nb_mystere)
                  {
                      puts("C'est plus !\n");
                  }
                  else if(nb_choisi > nb_mystere)
                  {
                      puts("C'est moins !\n");
                  }
              }while(nb_choisi != nb_mystere);
          
              puts("Bravo !");
          
              return 0;
          }
          


          Pour le niveau 4 bonus n°2, pourra-t-on utiliser l'Api Windows ?

          -
          Edité par Anonyme 24 juillet 2020 à 13:34:56

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            8 août 2012 à 11:18:26

            niveau 3 fait un peu à l'arrache ^^ :

            #include <stdio.h>
            #include <stdlib.h>
            #include <time.h>
            
            #ifdef __WIN32__
            #define clear() system("cls")
            
            #else 
            #define clear() system("clear")
            #endif
            
            int difficulte(void)
            {
                int choix;
                int max;
                
                printf("Veuillez choisir votre niveau de difficulté : \n\n1. Facile (entre 0 et 10)\n2. Normal (entre 0 et 100)\n3. Difficile (entre 0 et 1000)\n\nVotre choix ? ");
                scanf("%d", &choix);
                putchar('\n');
                
                if (choix == 1) 
                    max = 10;
                else if (choix == 2)
                    max = 100;
                else 
                    max = 1000;
                
                return max;
            }
            
            void intervalle(int nb)
            {
                printf("Le nombre mystere se trouve entre 0 et 10%s\n\n", (nb <= 10) ? "" : (nb <= 100) ? "0" : "00");
            }
            
            void solo(int estSolo)
            {
                time_t debut;
                time_t fin;
                int nbAleatoire;
                int nbEntre;
                int max;
                int min;
                int nbCoups;
                double temps;
                
                min = 0;
                nbCoups = 0;
                
                if (estSolo != 1) {
                    max = difficulte();
                    nbAleatoire = (rand() % (max - min + 1)) + min;
                }
                else
                {
                    printf("JOUEUR 1 : Entrez le nombre mystère : ");
                    scanf("%d", &nbAleatoire);
                    clear();
                    intervalle(nbAleatoire);
                }
                
                time(&debut);
                
                do {
                    printf("%sQuel est le nombre mystère : ", (estSolo == 1) ? "JOUEUR 2 : " : "");
                    scanf("%d", &nbEntre);
                    
                    printf("%s\n", (nbEntre == nbAleatoire) ? "Bravo !\n" : (nbEntre < nbAleatoire) ? "C'est plus !" : "C'est moins !");
                    nbCoups++;
                    
                } while (nbEntre != nbAleatoire);    
                
                time(&fin);
                
                temps = difftime(fin, debut);
                
                printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\nCe qui fait en moyenne %.1fs par essais.\n\n", nbCoups, nbAleatoire, temps, temps / (double)nbCoups);
            }
            
            void multi(void)
            {
                solo(1);
            }
            
            void menu(void)
            {
                int choix;
                int continuer;
                
                continuer = 1;
                
                while (continuer) {
                    printf("Bienvenu(e) dans le jeu du Plus ou Moins !\n\n\nVeuillez sélectionner le mode de jeu : \n\n1. Solo\n2. Multijoueurs\n3. Quitter\n\nVotre choix ? ");
                    scanf("%d", &choix);
                    
                    putchar('\n');
                    
                    (choix == 1) ? solo(0) : (choix == 2) ? multi() :  exit(0);
                    
                    printf("Voulez-vous rejouer (1/0) ? ");
                    scanf("%d", &continuer);
                    
                    putchar('\n');
                }
            }
            
            int main (void)
            {
                srand((unsigned int)time(NULL));
            
                menu();
                
                return EXIT_SUCCESS;
            }
            


            EDIT : amélioration de la fonction intervalle
            • Partager sur Facebook
            • Partager sur Twitter
              8 août 2012 à 11:45:25

              J'ai édité le premier message afin d'insister sur l'utilité des fonctions.

              Citation : Maëlan

              Bouh, le vilain prétexte pour faire de la pub. :p

              Allez, histoire de me marrer un coup, je participe !

              ( C’est bien en réponse à ça ? )


              Meuh non, faire de la pub ? Moi ?
              Merci de ta future participation et oui, c'est bien le sujet de damjuve qui m'a inspiré. ^^


              @Blodangan : je n'ai que deux choses à redire (je chipote hein) :
              1. Comme je suis maniaquo-dépressif dans le domaine des warnings, j'aurai bien aimé que tu cast (à la fin) le retour de la fonction time en unsigned ou unsigned int (comme tib92) ;
              2. Pourquoi utiliser la fonction printf à la ligne 16 alors que partout ailleurs tu utilises puts ?

              Tiens aussi, je ne pense pas que ce soit absolument nécessaire de vider le buffer, non ?


              @tib92 : C'EST NUL.

              Non allez sérieux... c'est pas trop mal. ^^

              • Tu fais un petit mix de deux styles d'indentation : lignes 50-53 et lignes 54-60 ;
              • Ton menu n'est pas top top, si tu veux rajouter un menu option à ton grand menu tu seras obligé de tout changer ;
              • Ta fonction intervalle laisse un peu à désirer, si le joueur 1 entre 4242 par exemple, elle ne fonctionne plus (j'ai dis que je voulais un petit algo') ;
              • Tu gères assez bizarrement tes deux modes, solo et multi', j'aurai plus vu cela (c'est vite-fait hein) :

                fonction solo()
                    actions_specifiques_au_menu_solo
                    boucle_du_jeu()
                fin fonction
                
                fonction multi()
                    actions_specifiques_au_menu_multi
                    boucle_du_jeu()
                fin fonction

              • Lignes 38-45, tu aurais pu rassembler 2-3 variables non ? Mais bon ça, tu fais un peu comme tu veux ; :-°
              • Ton code manque de prototype.

              Merci pour vos deux participations !
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                8 août 2012 à 11:50:20

                merci de ton commentaire :) :

                Citation

                Tu fais un petit mix de deux styles d'indentation : lignes 50-53 et lignes 54-60 ;



                ouai c'est Xcode qui fait ça automatiquement et je sais pas trop pourquoi mais tu as raison

                Citation

                Ta fonction intervalle laisse un peu à désirer, si le joueur 1 entre 4242 par exemple, elle ne fonctionne plus (j'ai dis que je voulais un petit algo') ;



                je sais mais je ne m'embête pas à gérer les erreurs de l'utilisateur ;)

                Citation

                Ton code manque de prototype.



                Certes mais comme les fonctions sont avant le main je n'en ai pas mis ^^
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  8 août 2012 à 11:59:35

                  Je prend en compte les commentaires mais pour le moment je viens de finir le niveau 2 (au début ça partais bien mais...) :

                  #include <stdio.h>
                  #include <stdlib.h>
                  #include <time.h>
                  
                  #ifdef __WIN32__
                      #define clear() system("cls")
                  #else
                      #define clear() system("clear")
                  #endif
                  
                  int Menu(void);
                  void Jouer(int nb_mystere, int nb_joueur);
                  int MenuDifficulte(void);
                  int ChoixNb(void);
                  
                  int main(void)
                  {
                      srand((unsigned)time(NULL));
                  
                      switch(Menu())
                      {
                          case 1:
                              Jouer(rand() % MenuDifficulte(), 1);
                              break;
                          case 2:
                              Jouer(ChoixNb(), 2);
                              break;
                          case 3:
                              return 0;
                              break;
                      }
                  
                      return 0;
                  }
                  
                  int Menu(void)
                  {
                      int choix = 0;
                  
                      puts("1/ Mode 1 joueur");
                      puts("2/ Mode 2 joueur");
                      puts("3/ Quitter\n");
                  
                      while(choix <= 0 || choix >= 4)
                      {
                          printf("Choix : ");
                          scanf("%d", &choix);
                          while(getchar() != '\n');
                      }
                  
                      clear();
                  
                      return choix;
                  }
                  
                  void Jouer(int nb_mystere, int nb_joueur)
                  {
                      int nb_choisi = 0, rejouer = 1;
                  
                      do
                      {
                          printf("Quel est le nombre mystere : ");
                          scanf("%d", &nb_choisi);
                          while(getchar() != '\n');
                  
                          if(nb_choisi < nb_mystere)
                          {
                              puts("C'est plus !\n");
                          }
                          else if(nb_choisi > nb_mystere)
                          {
                              puts("C'est moins !\n");
                          }
                          else
                          {
                              printf("Bravo !\n\nRejouer (1 pour oui) : ");
                              scanf("%d", &rejouer);
                              while(getchar() != '\n');
                  
                              if(rejouer == 1)
                              {
                                  clear();
                                  if(nb_joueur == 1)
                                  {
                                      nb_mystere = rand() % MenuDifficulte();
                                  }
                                  else
                                  {
                                      nb_mystere = ChoixNb();
                                  }
                              }
                          }
                      }while(rejouer == 1);
                  }
                  
                  int MenuDifficulte(void)
                  {
                      int niveau = 0;
                  
                      puts("Niveau 1 : entre 0 et 10");
                      puts("Niveau 2 : entre 0 et 100");
                      puts("Niveau 3 : entre 0 et 1000");
                      puts("Niveau 4 : entre 0 et 10000");
                      puts("Niveau 5 : entre 0 et 100000\n");
                  
                      while(niveau <= 0 || niveau >= 6)
                      {
                          printf("Choississez votre niveau de difficulte : ");
                          scanf("%d", &niveau);
                          while(getchar() != '\n');
                      }
                  
                      clear();
                  
                      switch(niveau)
                      {
                          case 1:
                              return 10;
                          case 2:
                              return 100;
                          case 3:
                              return 1000;
                          case 4:
                              return 10000;
                          case 5:
                              return 100000;
                      }
                  
                      return 0;
                  }
                  
                  int ChoixNb(void)
                  {
                      int nb_mystere = 0, tmp = 0, intervalle = 1;
                  
                      while(nb_mystere <= 0)
                      {
                          printf("Joueur 1, choississez le nombre mystere : ");
                          scanf("%d", &nb_mystere);
                          while(getchar() != '\n');
                      }
                  
                      tmp = nb_mystere;
                  
                      while(tmp > 0)
                      {
                          tmp /= 10;
                          intervalle *= 10;
                      }
                  
                      clear();
                  
                      printf("Le nombre mystere se trouve entre 0 et %d\n\n", intervalle);
                  
                      return nb_mystere;
                  }
                  

                  -
                  Edité par Anonyme 24 juillet 2020 à 13:35:25

                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 août 2012 à 12:00:34

                    Citation : tib92


                    Citation

                    Ta fonction intervalle laisse un peu à désirer, si le joueur 1 entre 4242 par exemple, elle ne fonctionne plus (j'ai dis que je voulais un petit algo') ;



                    je sais mais je ne m'embête pas à gérer les erreurs de l'utilisateur ;)


                    http://www.youtube.com/watch?v=07IQcxW7dg4

                    Il ne s'agit pas d'une erreur, il n'y a aucune contrainte dans l'énoncé concernant ce point. En plus ça fait travailler. ;)
                    Je dois y aller, @toute.
                    • Partager sur Facebook
                    • Partager sur Twitter
                    Anonyme
                      8 août 2012 à 12:07:27

                      Pour mon premier code j'utilise printf pour ne pas avoir un retour à la ligne (puts) et ainsi que l'utilisateur rentre son nombre à coté des : :D , pour le cast en unsigned du retour de time avec srand je ne le savais pas, je n'ai aucun warning (je n'aime pas les warning) et pour le vidage de buffer c'est au cas ou l'utilisateur rentre une chaine de caractere.

                      -
                      Edité par Anonyme 24 juillet 2020 à 13:35:49

                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 août 2012 à 13:51:29

                        Coucou tout le monde !

                        Je participe ! et j'éditerai mon message près avoir fais le niveau 4 :D (à demain :-° )

                        PS : @tib92 : Tu es sous MAC, <3 !
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Supergun - Un 2 Players Arena . Live coding sur twitch.tv/Uriopass
                        Anonyme
                          8 août 2012 à 14:17:01

                          Voila pour le niveau 3 :


                          #include <stdio.h>
                          #include <stdlib.h>
                          #include <time.h>
                          
                          #ifdef __WIN32__
                              #define clear() system("cls")
                          #else
                              #define clear() system("clear")
                          #endif
                          
                          int Menu(void);
                          void Jouer(int nb_mystere, int nb_joueur);
                          int MenuDifficulte(void);
                          int ChoixNb(void);
                          
                          int main(void)
                          {
                              srand((unsigned)time(NULL));
                          
                              switch(Menu())
                              {
                                  case 1:
                                      Jouer(rand() % MenuDifficulte(), 1);
                                      break;
                                  case 2:
                                      Jouer(ChoixNb(), 2);
                                      break;
                                  case 3:
                                      return 0;
                                      break;
                              }
                          
                              return 0;
                          }
                          
                          int Menu(void)
                          {
                              int choix = 0;
                          
                              puts("1/ Mode 1 joueur");
                              puts("2/ Mode 2 joueur");
                              puts("3/ Quitter\n");
                          
                              while(choix <= 0 || choix >= 4)
                              {
                                  printf("Choix : ");
                                  scanf("%d", &choix);
                                  while(getchar() != '\n');
                              }
                          
                              clear();
                          
                              return choix;
                          }
                          
                          void Jouer(int nb_mystere, int nb_joueur)
                          {
                              int nb_choisi = 0, rejouer = 1, compteur = 0;
                              double temps = 0.0;
                              time_t debut;
                          
                              time(&debut);
                          
                              do
                              {
                                  printf("Quel est le nombre mystere : ");
                                  scanf("%d", &nb_choisi);
                                  while(getchar() != '\n');
                          
                                  compteur++;
                          
                                  if(nb_choisi < nb_mystere)
                                  {
                                      printf("C'est plus (%d essais) !\n\n", compteur);
                                  }
                                  else if(nb_choisi > nb_mystere)
                                  {
                                      printf("C'est moins (%d essais) !\n\n", compteur);
                                  }
                                  else
                                  {
                                      temps = difftime(time(NULL), debut);
                                      puts("Bravo !\n");
                                      printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\n", compteur, nb_mystere, temps);
                                      printf("Ce qui fait en moyenne %.1f par essais.\n", temps / compteur);
                          
                          
                                      printf("\nRejouer (1 pour oui) : ");
                                      scanf("%d", &rejouer);
                                      while(getchar() != '\n');
                          
                                      if(rejouer == 1)
                                      {
                                          clear();
                                          if(nb_joueur == 1)
                                          {
                                              nb_mystere = rand() % MenuDifficulte();
                                          }
                                          else
                                          {
                                              nb_mystere = ChoixNb();
                                          }
                          
                                          compteur = 0;
                                          time(&debut);
                                      }
                                  }
                              }while(rejouer == 1);
                          }
                          
                          int MenuDifficulte(void)
                          {
                              int niveau = 0;
                          
                              puts("Niveau 1 : entre 0 et 10");
                              puts("Niveau 2 : entre 0 et 100");
                              puts("Niveau 3 : entre 0 et 1000");
                              puts("Niveau 4 : entre 0 et 10000");
                              puts("Niveau 5 : entre 0 et 100000\n");
                          
                              while(niveau <= 0 || niveau >= 6)
                              {
                                  printf("Choississez votre niveau de difficulte : ");
                                  scanf("%d", &niveau);
                                  while(getchar() != '\n');
                              }
                          
                              clear();
                          
                              switch(niveau)
                              {
                                  case 1:
                                      return 10;
                                  case 2:
                                      return 100;
                                  case 3:
                                      return 1000;
                                  case 4:
                                      return 10000;
                                  case 5:
                                      return 100000;
                              }
                          
                              return 0;
                          }
                          
                          int ChoixNb(void)
                          {
                              int nb_mystere = 0, tmp = 0, intervalle = 1;
                          
                              while(nb_mystere <= 0)
                              {
                                  printf("Joueur 1, choississez le nombre mystere : ");
                                  scanf("%d", &nb_mystere);
                                  while(getchar() != '\n');
                              }
                          
                              tmp = nb_mystere;
                          
                              while(tmp > 0)
                              {
                                  tmp /= 10;
                                  intervalle *= 10;
                              }
                          
                              clear();
                          
                              printf("Le nombre mystere se trouve entre 0 et %d\n\n", intervalle);
                          
                              return nb_mystere;
                          }
                          


                          Petite anecdote, en jouant pour l'essayer, j'ai eu :

                          Quel est le nombre mystere : 1
                          Bravo !
                          
                          Vous avez mis 1 essai pour trouver le nombre 1, le tout en 1 seconde.
                          Ce qui fait en moyenne 1.0 par essais.
                          
                          Rejouer (1 pour oui) : 1

                          -
                          Edité par Anonyme 24 juillet 2020 à 13:36:37

                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 août 2012 à 15:08:48

                            Citation : Blodangan

                            Voila pour le niveau 3 :


                            #include <stdio.h>
                            #include <stdlib.h>
                            #include <time.h>
                            
                            #ifdef __WIN32__
                                #define clear() system("cls")
                            #else
                                #define clear() system("clear")
                            #endif
                            
                            int Menu(void);
                            void Jouer(int nb_mystere, int nb_joueur);
                            int MenuDifficulte(void);
                            int ChoixNb(void);
                            
                            int main(void)
                            {
                                srand((unsigned)time(NULL));
                            
                                switch(Menu())
                                {
                                    case 1:
                                        Jouer(rand() % MenuDifficulte(), 1);
                                        break;
                                    case 2:
                                        Jouer(ChoixNb(), 2);
                                        break;
                                    case 3:
                                        return 0;
                                        break;
                                }
                            
                                return 0;
                            }
                            
                            int Menu(void)
                            {
                                int choix = 0;
                            
                                puts("1/ Mode 1 joueur");
                                puts("2/ Mode 2 joueur");
                                puts("3/ Quitter\n");
                            
                                while(choix <= 0 || choix >= 4)
                                {
                                    printf("Choix : ");
                                    scanf("%d", &choix);
                                    while(getchar() != '\n');
                                }
                            
                                clear();
                            
                                return choix;
                            }
                            
                            void Jouer(int nb_mystere, int nb_joueur)
                            {
                                int nb_choisi = 0, rejouer = 1, compteur = 0;
                                double temps = 0.0;
                                time_t debut;
                            
                                time(&debut);
                            
                                do
                                {
                                    printf("Quel est le nombre mystere : ");
                                    scanf("%d", &nb_choisi);
                                    while(getchar() != '\n');
                            
                                    compteur++;
                            
                                    if(nb_choisi < nb_mystere)
                                    {
                                        printf("C'est plus (%d essais) !\n\n", compteur);
                                    }
                                    else if(nb_choisi > nb_mystere)
                                    {
                                        printf("C'est moins (%d essais) !\n\n", compteur);
                                    }
                                    else
                                    {
                                        temps = difftime(time(NULL), debut);
                                        puts("Bravo !\n");
                                        printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\n", compteur, nb_mystere, temps);
                                        printf("Ce qui fait en moyenne %.1f par essais.\n", temps / compteur);
                            
                            
                                        printf("\nRejouer (1 pour oui) : ");
                                        scanf("%d", &rejouer);
                                        while(getchar() != '\n');
                            
                                        if(rejouer == 1)
                                        {
                                            clear();
                                            if(nb_joueur == 1)
                                            {
                                                nb_mystere = rand() % MenuDifficulte();
                                            }
                                            else
                                            {
                                                nb_mystere = ChoixNb();
                                            }
                            
                                            compteur = 0;
                                            time(&debut);
                                        }
                                    }
                                }while(rejouer == 1);
                            }
                            
                            int MenuDifficulte(void)
                            {
                                int niveau = 0;
                            
                                puts("Niveau 1 : entre 0 et 10");
                                puts("Niveau 2 : entre 0 et 100");
                                puts("Niveau 3 : entre 0 et 1000");
                                puts("Niveau 4 : entre 0 et 10000");
                                puts("Niveau 5 : entre 0 et 100000\n");
                            
                                while(niveau <= 0 || niveau >= 6)
                                {
                                    printf("Choississez votre niveau de difficulte : ");
                                    scanf("%d", &niveau);
                                    while(getchar() != '\n');
                                }
                            
                                clear();
                            
                                switch(niveau)
                                {
                                    case 1:
                                        return 10;
                                    case 2:
                                        return 100;
                                    case 3:
                                        return 1000;
                                    case 4:
                                        return 10000;
                                    case 5:
                                        return 100000;
                                }
                            
                                return 0;
                            }
                            
                            int ChoixNb(void)
                            {
                                int nb_mystere = 0, tmp = 0, intervalle = 1;
                            
                                while(nb_mystere <= 0)
                                {
                                    printf("Joueur 1, choississez le nombre mystere : ");
                                    scanf("%d", &nb_mystere);
                                    while(getchar() != '\n');
                                }
                            
                                tmp = nb_mystere;
                            
                                while(tmp > 0)
                                {
                                    tmp /= 10;
                                    intervalle *= 10;
                                }
                            
                                clear();
                            
                                printf("Le nombre mystere se trouve entre 0 et %d\n\n", intervalle);
                            
                                return nb_mystere;
                            }
                            



                            Petite anecdote, en jouant pour l'essayé, j'ai eu :

                            Quel est le nombre mystere : 1
                            Bravo !
                            
                            Vous avez mis 1 essai pour trouver le nombre 1, le tout en 1 seconde.
                            Ce qui fait en moyenne 1.0 par essais.
                            
                            Rejouer (1 pour oui) : 1



                            Blodangan


                            Blodangan is #1 :lol:
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 août 2012 à 15:54:50

                              Voilà pour les premiers niveaux. Il ne me manque encore que la partie avec les fichiers. :)

                              #include <stdio.h>
                              #include <wchar.h>
                              #include <time.h>
                              #include <locale.h>
                              #include <limits.h>
                              
                              
                              
                              
                              
                              #ifdef  _WIN32
                              	#include <windows.h>
                              #endif
                              
                              
                              
                              
                              
                              void setConsoleOutputEncoding(int set);
                              
                              unsigned log2(unsigned n);
                              
                              int power(int b, unsigned p);
                              
                              int alea(int max);
                              
                              int getNum(unsigned* nump);
                              
                              unsigned askNum(const wchar_t* msg);
                              
                              unsigned choose(unsigned min, unsigned max, const wchar_t* msg);
                              
                              void clearConsole(void);
                              
                              
                              
                              int main(void) {
                              	unsigned max, ans, try;
                              	unsigned mode, diff;
                              	unsigned tries;
                              	clock_t chrono;
                              	
                              	/* Initialisations obscures. */
                              	setlocale(LC_ALL, "");
                              	setConsoleOutputEncoding(1);
                              	srand(time(NULL));
                              	
                              	
                              	while(0x6142) {
                              		/* Choix du mode de jeu (ou fin du jeu). */
                              		fputws(
                              		  L"Modes de jeu :\n"
                              		  L"  0. IA         (programme / programme)\n"
                              		  L"  1. solo       (programme / joueur)\n"
                              		  L"  2. 2 joueurs  (joueur    / joueur)\n"
                              		  L"  3. Quitter le jeu.\n",
                              		  stdout
                              		  );
                              		mode = choose(0, 3, NULL);
                              		if(mode == 3)
                              			break;
                              		
                              		/* Choix de la difficulté. */
                              		fputws(
                              		  L"Difficulté :\n"
                              		  L"  0. personnalisé                    (0 - n)\n"
                              		  L"  1. facile                          (0 - 10)\n"
                              		  L"  2. moyen                           (0 - 100)\n"
                              		  L"  3. difficile                       (0 - 1000)\n"
                              		  L"  4-9. de plus en plus diabolique !  (0 - 10^n)\n",
                              		  stdout
                              		  );
                              		diff = choose(0, 9, NULL);
                              		
                              		/* Tirage des paramètres. */
                              		max = (diff)
                              		  ? power(10, diff)
                              		  : askNum(L"Maximum : ");
                              		
                              		if(mode == 2) {
                              			ans = choose(0, max, L"Entrez le nombre mystère : ");
                              			clearConsole();
                              		}
                              		else
                              			ans = alea(max);
                              		
                              		/* Jeu. */
                              		tries = 0;
                              		chrono = clock();
                              		do {
                              			tries++;
                              			try = askNum(L"Tentez un nombre : ");
                              			wprintf(
                              			  L" -> %u : c'est %ls.\n",
                              			  try,
                              			  (try < ans)
                              				? L"plus"
                              				: (try > ans)
                              				  ? L"moins"
                              				  : L"ça"
                              			  );
                              		} while(try != ans);
                              		chrono = clock() - chrono;
                              		
                              		wprintf(
                              		  L"La réponse était %u.\n"
                              		  L"Vous avez trouvé en %u coups et %.2fs"
                              		  L" (soit une moyenne de %.2fs par coup).\n"
                              		  L"Vous pouviez réussir en %u coup au maximum.\n",
                              		  ans,
                              		  tries,
                              		  (double)chrono / CLOCKS_PER_SEC,
                              		  (double)chrono / CLOCKS_PER_SEC / tries,
                              		  log2(max) + 1
                              		  );
                              	}
                              	
                              	setConsoleOutputEncoding(0);
                              	
                              	return 0;
                              }
                              
                              
                              
                              unsigned log2(unsigned n) {
                              	unsigned r;
                              	
                              	for(r = UINT_MAX;  n;  n /= 2)
                              		r++;
                              	
                              	return r;
                              }
                              
                              
                              
                              int power(int b, unsigned p) {
                              	int acc;
                              	
                              	for(acc = 1;  p;  p /= 2) {
                              		if(p % 2)
                              			acc *= b;
                              		b *= b;
                              	}
                              	
                              	return acc;
                              }
                              
                              
                              
                              int alea(int max) {
                              	return rand() % (max+1);
                              }
                              
                              
                              
                              int getNum(unsigned* nump) {
                              	int r;
                              	wint_t c;
                              	
                              	r = wscanf(L"%u", nump);
                              	/* On débarrasse la table.  */
                              	while((c = fgetwchar()) != L'\n'  &&  c != WEOF);
                              	
                              	return r == 1;
                              }
                              
                              
                              
                              unsigned askNum(const wchar_t* msg) {
                              	unsigned num;
                              	int r;
                              	
                              	do {
                              		if(msg)
                              			fputws(msg, stdout);
                              		r = getNum(&num);
                              	} while(!r);
                              	
                              	return num;
                              }
                              
                              
                              
                              unsigned choose(unsigned min, unsigned max, const wchar_t* msg) {
                              	unsigned choice;
                              	
                              	if(!msg)
                              		msg = L"Votre choix : ";
                              	
                              	do
                              		choice = askNum(msg);
                              	while(choice < min   ||  choice > max);
                              	
                              	return choice;
                              }
                              
                              
                              
                              void clearConsole(void) {
                              	system(
                               #ifdef _WIN32
                              	  "cls"
                               #else
                              	  "clear"
                               #endif
                              	);
                              }
                              
                              
                              
                              void setConsoleOutputEncoding(int set) {
                               #ifdef _WIN32
                              	
                              	static UINT oldCP;
                              	
                              	if(set) {
                              		oldCP = GetConsoleOutputCP();
                              		SetConsoleOutputCP(GetACP());
                              	} else
                              		SetConsoleOutputCP(oldCP);
                              	
                               #else
                              	
                              	return;
                              	
                               #endif
                              }
                              


                              ( ♥ le thème Bespin de Notepad++ ♥ )
                              ( et ♥ tcc ♥ )
                              • Partager sur Facebook
                              • Partager sur Twitter
                                8 août 2012 à 16:52:36

                                Mon code pour le niveau 2 (la flemme de faire les autres) :
                                #include <stdio.h>
                                #include <stdlib.h>
                                #include <time.h>
                                
                                /* Constantes pour les valeurs maximal en fonction du niveau */
                                #define MAX_EASY   10
                                #define MAX_MEDIUM 100
                                #define MAX_HARD   1000
                                
                                /* Macro pour effacer l'écran */
                                #ifdef _WIN32
                                    #define clear() system("cls")
                                #else
                                    #define clear() system("clear")
                                #endif
                                
                                /* type bool */
                                typedef char bool;
                                #define true  1
                                #define false 0
                                
                                /* Énumérations */
                                typedef enum numberPlayer{PLAYER_1 = 1, PLAYER_2} numberPlayer;
                                typedef enum levelChoice{EASY = 1, MEDIUM, HARD} levelChoice;
                                
                                /* Prototypes */
                                void clearBuffer(void); /* Vide stdin */
                                int getNumber(char const* text); /* Obtient un int depuis stdin */
                                bool inTheRange(int value, int min, int max); /* Renvoi vrai si value
                                est entre min et max */
                                
                                numberPlayer menu(void); /* Le menu principal (choix du nombre de
                                joueur) */
                                int selectMax(void); /* Choix de  la difficulté (1 joueur) */
                                int chooseNumber(void); /* Choix du nombre secret (2 joueurs) */
                                int makeSecretNumber(int max); /* Tire aléatoirement un nombre entre 1
                                et max */
                                int makeMax(int secretNumber); /* Détermine la borne maximal en
                                fonction du nombre secret */
                                
                                void play(int secretNumber); /* Fait deviner secretNumber */
                                bool replay(void); /* On rejoue ? */
                                
                                int main(void)
                                {
                                    int secretNumber = 0;
                                    srand((unsigned)time(NULL));
                                
                                    do
                                    {
                                        clear();
                                        switch(menu())
                                        {
                                        case PLAYER_1:
                                            clear();
                                            secretNumber = makeSecretNumber(selectMax());
                                            clear();
                                            break;
                                
                                        case PLAYER_2:
                                            clear();
                                            secretNumber = chooseNumber();
                                
                                            clear();
                                            printf("-- Joueur 2 --\n\n");
                                
                                            printf("Le nombre est compris entre 0 et %d.\n",
                                                   makeMax(secretNumber));
                                            break;
                                        }
                                        play(secretNumber);
                                        putchar('\n');
                                    }
                                    while(replay());
                                
                                    return EXIT_SUCCESS;
                                }
                                
                                void clearBuffer(void)
                                {
                                    char c;
                                    while( (c = getchar()) != '\n' && c != EOF);
                                }
                                
                                int getNumber(char const* text)
                                {
                                    int n, ret;
                                    do
                                    {
                                        if(text != NULL)
                                        {
                                            printf("%s", text);
                                            fflush(stdout);
                                        }
                                        ret = scanf("%d", &n);
                                        clearBuffer();
                                
                                        if(feof(stdin))
                                        {
                                            printf("\n\n EOF\n");
                                            exit(EXIT_FAILURE);
                                        }
                                    }
                                    while(ret == 0);
                                    return n;
                                }
                                
                                bool inTheRange(int value, int min, int max)
                                {
                                    return value >= min && value <= max;
                                }
                                
                                numberPlayer menu(void)
                                {
                                    numberPlayer player;
                                    printf("Menu principal.\n"
                                           "\t%d > Mode 1 Joueur.\n"
                                           "\t%d > Mode 2 Joueurs.\n\n",
                                           (int)PLAYER_1, (int)PLAYER_2);
                                
                                    do player = getNumber("Votre choix : ");
                                    while(!inTheRange(player, PLAYER_1, PLAYER_2));
                                
                                    return player;
                                }
                                
                                int selectMax(void)
                                {
                                    int level;
                                    printf("Choix de la difficulté.\n"
                                           "\t%d > Facile (0 - %d).\n"
                                           "\t%d > Moyen (0 - %d).\n"
                                           "\t%d > Dur (0 - %d).\n\n",
                                           (int)EASY, MAX_EASY,
                                           (int)MEDIUM, MAX_MEDIUM,
                                           (int)HARD, MAX_HARD);
                                
                                    do level = getNumber("Votre choix : ");
                                    while(!inTheRange(level, EASY, HARD));
                                
                                    return (level == 1) ? MAX_EASY:
                                           (level == 2) ? MAX_MEDIUM:
                                           MAX_HARD;
                                }
                                
                                int chooseNumber(void)
                                {
                                    int n;
                                    printf("-- Joueur 1 --\n\n");
                                
                                    do n = getNumber("Entrez un nombre positif : ");
                                    while(n < 0);
                                
                                    return n;
                                }
                                
                                int makeSecretNumber(int max)
                                {
                                    return rand()%(max+1);
                                }
                                
                                int makeMax(int secretNumber)
                                {
                                    int max;
                                    for(max = 10; max < secretNumber; max *= 10);
                                    return max;
                                }
                                
                                void play(int secretNumber)
                                {
                                    int number;
                                
                                    do
                                    {
                                        number = getNumber("Entrez un nombre : ");
                                
                                        if(number > secretNumber)
                                            printf("C'est moins.\n");
                                        else if (number < secretNumber)
                                            printf("C'est plus.\n");
                                        else
                                            printf("Bravo.\n");
                                    }
                                    while(number != secretNumber);
                                }
                                
                                bool replay(void)
                                {
                                    int n;
                                    do n = getNumber("Rejouer ? (1 = oui, 0 = non) : ");
                                    while(!inTheRange(n, 0, 1));
                                    return n;
                                }
                                


                                Citation : paraze

                                Le tout en utilisant les fonctions pardi !


                                Je pense que ça devrait aller niveau fonction :lol:

                                EDIT: Code modifié.
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  8 août 2012 à 17:51:11

                                  Quelques remarques « à l'arrache », mes excuses si le ton est un peu sec où que certains éléments ont déjà été communiqués (j'ai vraiment survolé, notamment pour les derniers participants).

                                  @tib
                                  • On s'en fiche des mises en formes, les affichages de '\n' en plein milieu c'est pas très utile.
                                  • Tu pourrais faire du switch au lieu de faire du if (ou à la limite avec un tableau de correspondance), c'est toujours plus adapté.
                                  • Tu pourrais adapter un peu plus le type de tes variables, t'as du int un peu partout alors que ton utilisation relève du non signé.
                                  • Ta fonction intervalle n'est pas du tout pertinente AMHA. Tu pourrais utiliser le même tableau de correspondance que la fonction difficulté pour faciliter la maintenance.
                                  • Tu pourrais centraliser les affichages, là tu fais des fonctions « pour le plaisir de faire des fonctions », mais il n'y a aucune réutilisabilité par exemple.
                                  • C'est bizarre de séparer déclaration/initialisation, surtout que tu déclares une variable par ligne (d'ailleurs, ta fonction solo me semble comprendre beaucoup de variables, tu pourrais découper ça par les données).
                                  • De la même manière, j'aime pas trop cette manière de fonctionner avec des booléens en paramètre de fonctions, c'est difficile à documenter et ce n'est pas très naturel pour l'utilisateur. Tu pourrais centraliser ton jeu en lui-même dans une fonction et switcher sur les éléments dépendants du menu directement dans la fonction appelante.
                                  • Les ternaires pour les affichages, c'est pareil, on s'en fiche de la mise en forme.
                                  • Tu devrais limiter la taille de tes lignes, c'est très désagréable de scroller pour tout afficher.
                                  • Pourquoi initialiser ta variable continuer et pas utiliser une do ... while ?
                                  • Ton ternaire (imbriqué !) dans la fonction menu, c'est un peu dégueulasse et vraiment pas naturel. Dans ces cas-là, on utilise un if, tout simplement.

                                  @Bloodagan (niveau 3)
                                  • Les appels de fonction imbriqués à outrance, c'est pas génial.
                                  • À la limite, si tu pouvais centraliser un peu plus ce qui est spécifique à case 1, case 2, etc. ça serait mieux, car tu es en train de faire une grosse duplication de tests que tu pourrais pourtant regrouper.
                                  • À quoi sert ton case 3, étant donné que tu quittes de toute manière ?
                                  • Il faudrait utiliser quelques constantes symboliques pour tes menus, là si je veux rajouter un choix (genre « mode 1.5 joueur »), ça va chambouler tout ton code : il y a donc un problème.
                                  • T'as des répétitions dans l'appel de récupération du nombre aléatoire, ce qui signifie que ton code est mal organisé quelque part.
                                  • Je trouve ta fonction jouer mal foutue, j'ai eu du mal à la lire car les imbrications n'y sont pas naturelles.
                                  • T'as des initialisations de variables vraiment inutiles.
                                  • T'augmentes ta complexité pour pas grand chose.

                                  @fscorpio
                                  • Tu effaces l'écran en permanence, ça ne va pas plaire à l'utilisateur (et c'est inutilement répétitif).
                                  • Pourquoi tu utilises des fonctions d'affichages sur des fichiers ? Ça me semble inutilement compliqué.
                                  • Tu sembles vouloir sécuriser tes entrées, mais tu ne testes pas scanf par rapport à EOF.
                                  • L'opérateur virgule, c'est vraiment illisible. Pourquoi ignores-tu volontairement des structures comme do ... while ?
                                  • T'as quelques répétitions dans tes menus (pareil, tu pourrais regrouper un peu tes constantes numériques dans du symbolique).

                                  Dans l'ensemble, je trouve que le principe du jeu en lui-même force certains participants à faire des affichages (à outrance, genre des fins de ligne tout le temps et des effacements d'écran intempestifs) n'importe où, et qu'il est difficile de faire quelque chose d'élégant pour coder ça. Maintenant, il pourrait être intéressant de s'appuyer sur les derniers niveaux (création d'un format de fichier texte p.ex.). Personnellement, des +/-, j'en ai vu trop sur le forum, maintenant j'en fait une ingestion ! :p
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                  Staff désormais retraité.
                                    8 août 2012 à 18:29:26

                                    Citation

                                    Tu effaces l'écran en permanence, ça ne va pas plaire à l'utilisateur (et c'est inutilement répétitif).

                                    Je ne vois pas vraiment pourquoi, c'est un jeu après tout, ça me parait normal.
                                    Quand je joue à un jeu (graphique) avec des menus, en choisissant une option un autre menu s'affiche, c'est cet effet que je voulais reproduire.

                                    Citation

                                    Pourquoi tu utilises des fonctions d'affichages sur des fichiers ? Ça me semble inutilement compliqué.

                                    Tu parles de la ligne 87 (fputs) ?
                                    puts rajoute un \n à la fin de la ligne et printf est un peu "lourd".
                                    Corrigé, j'ai utiliser printf partout pour uniformiser mon code.

                                    Citation

                                    Tu sembles vouloir sécuriser tes entrées, mais tu ne testes pas scanf par rapport à EOF.

                                    Tu veux dire que je pourrais me retrouver avec une boucle infinie dans ma fonction getNumber ?
                                    Je vais essayer de corriger.
                                    Je pense que c'est bon.

                                    Citation

                                    L'opérateur virgule, c'est vraiment illisible. Pourquoi ignores-tu volontairement des structures comme do ... while ?

                                    Parce que j'aime bien cette petite virgule :p
                                    Je corrige ça.
                                    Corrigé

                                    Citation

                                    T'as quelques répétitions dans tes menus (pareil, tu pourrais regrouper un peu tes constantes numériques dans du symbolique).

                                    J'ai pas compris ce que tu voulais dire, de quelle constantes tu parles ?

                                    EDIT en vert.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      8 août 2012 à 18:39:53

                                      Citation : fscorpio

                                      Je ne vois pas vraiment pourquoi, c'est un jeu après tout, ça me parait normal.
                                      Quand je joue à un jeu (graphique) avec des menus, en choisissant une option un autre menu s'affiche, c'est cet effet que je voulais reproduire.


                                      Bah, déjà que cette macro m'horripile (même à coup d'inclusions conditionnelles, je trouve ça vraiment inutile). J'veux dire, c'est pas naturel de faire appel à l'invite de commande. Toi qui qualifie la fonction printf de « lourde », ça devrait normalement encore plus te choquer, d'autant plus que system... Voilà quoi, que se passe-t-il si je lance le programme en root et que crée un gentil script (p.ex. qui efface tous les fichiers du système) portant le même nom ? Bref, en fait, je ne comprends pas l'objectif de « mettre joliment le programme en forme ». L'objectif ici c'est de programmer, pas de faire des affichages classes, non ? (après, je me trompe peut-être dans la visée de l'exercice)

                                      Citation : fscorpio

                                      Tu parles de la ligne 87 (fputs) ?
                                      puts rajoute un \n à la fin de la ligne et printf est un peu "lourd".


                                      Un peu « lourde » ? Mouais, à la limite c'est toujours mieux d'uniformiser (là, t'auras pas de lourdeur, d'autant plus que la plupart des boucles que tu réalises dans ton programme sont bien plus ralentissantes). Tu sais, printf est à la base de la plupart des libstdC, il y a des normes de codage qui préconisent même son utilisation dans tous les cas, car il y a très peu de chances qu'elle soit boguée... Donc, de là à dénigrer son utilisation sur des entrées non formatées, je trouve ça pas vraiment rentable.

                                      Citation : fscorpio

                                      J'ai pas compris ce que tu voulais dire, de quelle constantes tu parles ?


                                      J'évoque l'éventuelle utilisation des énumérations (voire des macroconstantes) pour centraliser tes codes de menu. Par exemple tu fais des case sur des nombres en dur (« 1 », « 2 »), mais le lecteur du programme ne sait pas à quoi cela correspond !
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                      Staff désormais retraité.
                                        8 août 2012 à 19:03:27

                                        Citation : Lucas-84

                                        déjà que cette macro m'horripile (même à coup d'inclusions conditionnelles, je trouve ça vraiment inutile). J'veux dire, c'est pas naturel de faire appel à l'invite de commande.

                                        Ouais je sais, normalement pour "effacer" l'écran j'utilise des \n, mais là system était indiqué dans l'énoncé.

                                        Citation : Lucas-84

                                        que se passe-t-il si je lance le programme en root et que crée un gentil script (p.ex. qui efface tous les fichiers du système) portant le même nom ?

                                        C'est ça que t'appelle gentil :lol:
                                        Autant lancer directement le script ! (mais je comprends la remarque)

                                        Citation : Lucas-84

                                        L'objectif ici c'est de programmer, pas de faire des affichages classes, non ?

                                        Alors autant virer la fonction system.

                                        Citation : Lucas-84

                                        Tu sais, printf est à la base de la plupart des libstdC, il y a des normes de codage qui préconisent même son utilisation dans tous les cas, car il y a très peu de chances qu'elle soit boguée...

                                        Je ne savais pas, j'en prend note.
                                        Mais dans ce cas, à quoi sert puts/putchar ?

                                        Citation : Lucas-84

                                        Par exemple tu fais des case sur des nombres en dur (« 1 », « 2 »), mais le lecteur du programme ne sait pas à quoi cela correspond !

                                        OK.
                                        C'est fait.

                                        Merci.

                                        EDIT en vert.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          8 août 2012 à 19:15:32

                                          Citation : fscorpio

                                          Alors autant virer la fonction system.


                                          Ah, mais, moi, je ne suis pas contre de virer ça de l'énoncé. Je trouve pas ça super de cautionner une telle utilisation (après, je ne veux pas jouer les rabats-joie sur un exercice vraiment pour débutant).

                                          Citation : fscorpio

                                          Mais dans ce cas, à quoi sert puts/putchar ?


                                          Bah, à ce dont tu te sers : un affichage non formaté. Après, ça peut être une question davantage philosophique qu'autre chose (parce qu'au niveau des perfs, ça peut se discuter, voir ici p.ex., sans compter que tu utilises fputs). Maintenant, sur un sujet fréquenté par des débutants, il est peut-être ici préférable d'utiliser des fonctions simples (printf, tout le monde connaît), et faire passer l'uniformité devant le reste. Après, c'est sûrement une question subjective, mais si jamais tu te posais la question...
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                          Staff désormais retraité.
                                            9 août 2012 à 0:40:48

                                            Hey !
                                            Que de participations c'est super ! :D

                                            Puisque personne n'a critiqué le code de Maëlan, je m'y colle.

                                            • main.c:162: undefined reference to `fgetwchar' ;
                                            • Tu as aussi oublié d'inclure sdtlib.h ;
                                            • Trop d'espaces tue l'espace ;

                                            Ben sinon c'est bien, un peu trop de ternaires et de warnings à mon gout mais bon. ^^
                                            Et c'est bien pensé pour le coup du "Vous auriez pu trouver le nombre 42 <math>\(n\)</math> essais".

                                            Si certains se demande pour ai-je voulu que l'on efface la console et toussa, c'est pour trois raisons : c'est mieux que 100 \n, pour le mode multijoueur c'est plus pratique et beaucoup de débutants se demande comment effacer la console.
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                              9 août 2012 à 9:17:12

                                              Citation : paraze

                                              Puisque personne n'a critiqué le code de Maëlan, je m'y colle.

                                              • main.c:162: undefined reference to `fgetwchar' ;
                                              • Tu as aussi oublié d'inclure sdtlib.h ;
                                              • Trop d'espaces tue l'espace ;

                                              Ben sinon c'est bien, un peu trop de ternaires et de warnings à mon gout mais bon. ^^



                                              J’étais trop content d’avoir échappé à l’ œil inquisiteur de Lucas-84. :p

                                              Désolé pour les warnings, je ne les vois pas du tout : je en suis pas chez moi et je compile avec tcc, téléchargé vite fait, et j’ai pas pris le temps de regarder les options (fgetwchar marche pour moi o_O ). Je vais corriger ça. Pareil pour stdlib.h, tcc ne me dit rien donc je pensais en pas en avoir besoin.
                                              Espace ?

                                              Citation : paraze

                                              Si certains se demande pour ai-je voulu que l'on efface la console et toussa, c'est pour trois raisons : c'est mieux que 100 \n, pour le mode multijoueur c'est plus pratique et beaucoup de débutants se demande comment effacer la console.



                                              Sinon, il y a ça (le lien parle d’autre chose, mais avec ce truc il y moyen de cacher la saisie si je en me trompe pas).
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                9 août 2012 à 10:57:19

                                                Citation : paraze

                                                Si certains se demande pour ai-je voulu que l'on efface la console et toussa, c'est pour trois raisons : c'est mieux que 100 \n, pour le mode multijoueur c'est plus pratique et beaucoup de débutants se demande comment effacer la console.


                                                On s'en fiche, on ne va pas distribuer le jeu, non ? L'important, c'est le découpage en fonctions/factorisation et autres concepts de débutants. Après, si c'est pour montrer un exemple pratique de la compilation conditionnelle, pourquoi pas. Mais bon, je ne suis pas certain que ça recquiert de bonnes habitudes chez le débutant (qui va sortir cette « horreur » dans tous ses projets).

                                                Citation : Maëlan

                                                J’étais trop content d’avoir échappé à l’ œil inquisiteur de Lucas-84. :p


                                                • Bon, tes machins sur l'encodage avec des -w, c'est soulant à lire, on dirait du néerlandais.
                                                • Tes if (!p) avec p pointeur, ce n'est pas très sémantique (Oui, je sais, moi aussi je faisais ça avant. Mais ça, c'était avant.). Que perds-tu à expliciter un peu plus le typage de tes expressions (Ça relève plus de la subjectivité, mais tant qu'à faire...).
                                                • Dans la fonction askNum, à quoi te sert ta variable r ?
                                                • Pour ton tirage aléatoire, il y aura un léger biais.
                                                • Quelques énumérations/macros pour faire des menus un peu plus maintenables ?
                                                • D'ailleurs, dans le cas d'un mode « 2 joueurs », il y aura un choix de difficulté, non ?
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                Staff désormais retraité.
                                                  9 août 2012 à 12:18:01

                                                  Citation : Lucas-84

                                                  Citation : Maëlan

                                                  J’étais trop content d’avoir échappé à l’ œil inquisiteur de Lucas-84. :p


                                                  • Bon, tes machins sur l'encodage avec des -w, c'est soulant à lire, on dirait du néerlandais.
                                                  • Tes if (!p) avec p pointeur, ce n'est pas très sémantique (Oui, je sais, moi aussi je faisais ça avant. Mais ça, c'était avant.). Que perds-tu à expliciter un peu plus le typage de tes expressions (Ça relève plus de la subjectivité, mais tant qu'à faire...).
                                                  • Dans la fonction askNum, à quoi te sert ta variable r ?
                                                  • Pour ton tirage aléatoire, il y aura un léger biais.
                                                  • Quelques énumérations/macros pour faire des menus un peu plus maintenables ?
                                                  • D'ailleurs, dans le cas d'un mode « 2 joueurs », il y aura un choix de difficulté, non ?


                                                  Flûte.

                                                  • Je ne suis pas navré d’utiliser wchar_t. Non non, c’est bien du C, rassure-toi. ^^
                                                  • Pour le if(!p), j’ai suivi le chemin inverse de toi. Avant, je comparais toujours à NULL, mais maintenant je préfère cette forme (équivalente, et plus courte donc un peu plus lisible — et pour moi, ça garde son sens puisque ça teste un code d’erreur de la même façon que si le retour était un entier). Qu’entends-tu par « expliciter le typage […] » ? Tu parles toujours de la même chose ?
                                                  • Dans askNum, la variable r sert à redemander tant que la saisie de l’utilisateur est invalide.
                                                  • Quel est le biais dans le tirage aléatoire ? Tu fais allusion à ça ?
                                                  • Un système de menu plus mieux est prévu pour la prochaine mouture. :) Ce sera bien plus lourd à coder à la base, mais après je pourrai envisager des trucs du genre conio, libcaca ou même SDL.
                                                  • Le choix de difficulté en mode 2 joueurs est voulu. Le joueur qui choisit ne pourra pas mettre un nombre supérieur au maximum. Si tu veux, ça remplace un peu le bonus n°1 (qui n’est pas génial je trouve).
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter
                                                    9 août 2012 à 12:48:34

                                                    Tu parles du bonus 2 je pense, j'en ai rajouter un. ;)
                                                    • Partager sur Facebook
                                                    • Partager sur Twitter
                                                      9 août 2012 à 13:33:01

                                                      Citation : paraze

                                                      Tu parles du bonus 2 je pense, j'en ai rajouter un. ;)



                                                      Ouep (hou que c’est vilain de piquer les idées des autres).
                                                      • Partager sur Facebook
                                                      • Partager sur Twitter
                                                        9 août 2012 à 13:44:00

                                                        Mais (presque) pas du tout !

                                                        Si tu parles du tuto de ce tutoriel ben j'ai vu l'exemple de l'IA du +/- bien après l'avoir personnellement réalisé à mes débuts. :p
                                                        • Partager sur Facebook
                                                        • Partager sur Twitter
                                                        Anonyme
                                                          9 août 2012 à 13:52:01

                                                          voici mon nouveau code pour le niveau 3 il beaucoup plus "propre" que le premier que j'avais réalisé beaucoup trop vite celui-ci je l'ai fais à tête reposé avec un papier et un crayon :) :

                                                          #include <stdio.h>
                                                          #include <stdlib.h>
                                                          #include <time.h>
                                                          
                                                          #ifdef __WIN32__
                                                          #define clear() system("cls")
                                                          
                                                          #else /* Le reste, UNIX en particulier */
                                                          #define clear() system("clear")
                                                          #endif
                                                          
                                                          void difficulte(void);              
                                                          int menu(void);
                                                          int aleatoire(void);
                                                          unsigned choisirNbMystere(void);        /* Prototypes */
                                                          void solo(void);
                                                          void multi(void);
                                                          int rejouer(void);
                                                          void jeu(unsigned nbMystere, int estIA);
                                                          
                                                          unsigned max;                           
                                                          unsigned min = 0;
                                                          
                                                          int main (void)
                                                          {
                                                              srand((unsigned int)time(NULL));
                                                              
                                                              do {
                                                                  switch (menu()) {
                                                                      case 1:
                                                                          solo();
                                                                          break;
                                                                      case 2:
                                                                          multi();
                                                                          break;
                                                                      default:
                                                                          return EXIT_SUCCESS;
                                                                          break;
                                                                  }
                                                              } while (rejouer()); 
                                                                         
                                                              return EXIT_SUCCESS;
                                                          }
                                                          
                                                          void difficulte(void)
                                                          {
                                                              int niveau;
                                                              
                                                              puts("Niveau de difficulté ? ");
                                                              puts("1. Facile (entre 0 et 10)");
                                                              puts("2. Normal (entre 0 et 100)");
                                                              puts("3. Difficile (entre 0 et 1000)");
                                                              
                                                              scanf("%d", &niveau);
                                                              
                                                              switch (niveau) {
                                                                  case 1:
                                                                      max = 10;
                                                                      break;
                                                                  case 2:
                                                                      max = 100;
                                                                      break;
                                                                  default:
                                                                      max = 1000;
                                                                      break;
                                                              }
                                                          }
                                                          
                                                          int menu(void)
                                                          {
                                                              int choix;
                                                              
                                                              puts("Bienvenu(e) dans le jeu du Plus ou Moins !");
                                                              puts("Votre choix ? ");
                                                              puts("1. Solo");
                                                              puts("2. Multi");
                                                              puts("3. Quitter");
                                                                  
                                                              scanf("%d", &choix);
                                                              
                                                              return choix;
                                                          }
                                                          
                                                          int aleatoire(void)
                                                          {
                                                              return (rand() % (max - min + 1)) + min;
                                                          }
                                                          
                                                          unsigned choisirNbMystere(void)
                                                          {
                                                              unsigned mystere;
                                                              unsigned temp;
                                                              int intervalle = 1;
                                                              
                                                              puts("Entrez le nombre mystère : ");
                                                              scanf("%d", &mystere);
                                                              
                                                              clear();
                                                              
                                                              temp = mystere;
                                                              
                                                              while (temp > 0) {
                                                                  temp /= 10;
                                                                  intervalle *= 10;
                                                              }
                                                              
                                                              printf("Le nombre mystere se trouve entre 0 et %d\n", intervalle);
                                                              
                                                              return mystere;
                                                              
                                                          }
                                                          
                                                          void solo(void)
                                                          {
                                                              difficulte();
                                                              jeu(aleatoire(), 0);
                                                          }
                                                          
                                                          void multi(void)
                                                          {
                                                              jeu(choisirNbMystere(), 0);
                                                          }
                                                          
                                                          int rejouer(void)
                                                          {
                                                              int continuer;
                                                              
                                                              puts("Voulez-vous rejouer ? (1/0)");
                                                              scanf("%d", &continuer);
                                                              
                                                              return continuer;
                                                          }
                                                          
                                                          void jeu(unsigned nbMystere, int estIA)
                                                          {
                                                              time_t debut;
                                                              time_t fin;
                                                              double temps;
                                                              unsigned nbEntre;
                                                              unsigned nbCoups = 0;
                                                              
                                                              time(&debut);
                                                              
                                                              do {
                                                                  printf("Quel est le nombre mystère : ");
                                                                  scanf("%d", &nbEntre);
                                                                  
                                                                  if (nbEntre > nbMystere)
                                                                      printf("C'est moins !");
                                                                      
                                                                  else if (nbEntre < nbMystere) 
                                                                      printf("C'est plus !");
                                                                  else
                                                                      printf("Bravo !");
                                                                  
                                                                  nbCoups++;
                                                                  
                                                                  putchar('\n');
                                                                  
                                                              } while (nbEntre != nbMystere);
                                                              
                                                              time(&fin);
                                                              
                                                              temps = difftime(fin, debut);
                                                              
                                                              printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\nCe qui fait en moyenne %.1fs par essais.\n\n", nbCoups, nbMystere, temps, temps / (double)nbCoups);
                                                          }
                                                          


                                                          PS : pour l'algo qui permet de déterminer l'intervalle je venais de regarder le code de Blodangan, donc je n'ai malheureusement pas pu cherchais pas moi même :(
                                                          • Partager sur Facebook
                                                          • Partager sur Twitter
                                                            9 août 2012 à 14:13:29

                                                            À plusieurs reprises tu alternes les types int et unsigned.
                                                            Tu n'utilises pas (pour le moment) la variable estIA.
                                                            Je n'aime pas trop les printf à rallonge mais ça, c'est toi qui voit. De même pour time(&fin); (fin = time(NULL);).


                                                            Citation

                                                            PS : pour l'algo qui permet de déterminer l'intervalle je venais de regarder le code de Blodangan, donc je n'ai malheureusement pas pu cherchais pas moi même


                                                            Est-ce que tu comprends son code ? :)
                                                            • Partager sur Facebook
                                                            • Partager sur Twitter
                                                            Anonyme
                                                              9 août 2012 à 14:35:17

                                                              Citation

                                                              À plusieurs reprises tu alternes les types int et unsigned.



                                                              oui je corrige

                                                              Citation

                                                              Tu n'utilises pas (pour le moment) la variable estIA.



                                                              oui parce que j'avais juste fais un test mais j'ai oublié de l'enlever

                                                              Citation

                                                              De même pour time(&fin); (fin = time(NULL);)



                                                              les deux formes sont équivalents non ?

                                                              Citation

                                                              Est-ce que tu comprends son code ? :)



                                                              oui au niveau de la compréhension je n'ai aucun problème :)

                                                              donc voici le nouveau code :

                                                              #include <stdio.h>
                                                              #include <stdlib.h>
                                                              #include <time.h>
                                                              
                                                              #ifdef __WIN32__
                                                              #define clear() system("cls")
                                                              
                                                              #else /* Le reste, UNIX en particulier */
                                                              #define clear() system("clear")
                                                              #endif
                                                              
                                                              void difficulte(void);              
                                                              unsigned menu(void);
                                                              unsigned aleatoire(void);
                                                              unsigned choisirNbMystere(void);        /* Prototypes */
                                                              void solo(void);
                                                              void multi(void);
                                                              unsigned rejouer(void);
                                                              void jeu(unsigned nbMystere);
                                                              
                                                              unsigned max;                           
                                                              unsigned min = 0;
                                                              
                                                              int main (void)
                                                              {
                                                                  srand((unsigned int)time(NULL));
                                                                  
                                                                  do {
                                                                      switch (menu()) {
                                                                          case 1:
                                                                              solo();
                                                                              break;
                                                                          case 2:
                                                                              multi();
                                                                              break;
                                                                          default:
                                                                              return EXIT_SUCCESS;
                                                                              break;
                                                                      }
                                                                  } while (rejouer()); 
                                                                             
                                                                  return EXIT_SUCCESS;
                                                              }
                                                              
                                                              void difficulte(void)
                                                              {
                                                                  unsigned niveau;
                                                                  
                                                                  puts("Niveau de difficulté ? ");
                                                                  puts("1. Facile (entre 0 et 10)");
                                                                  puts("2. Normal (entre 0 et 100)");
                                                                  puts("3. Difficile (entre 0 et 1000)");
                                                                  
                                                                  scanf("%d", &niveau);
                                                                  
                                                                  switch (niveau) {
                                                                      case 1:
                                                                          max = 10;
                                                                          break;
                                                                      case 2:
                                                                          max = 100;
                                                                          break;
                                                                      default:
                                                                          max = 1000;
                                                                          break;
                                                                  }
                                                              }
                                                              
                                                              unsigned menu(void)
                                                              {
                                                                  unsigned choix;
                                                                  
                                                                  puts("Bienvenu(e) dans le jeu du Plus ou Moins !");
                                                                  puts("Votre choix ? ");
                                                                  puts("1. Solo");
                                                                  puts("2. Multi");
                                                                  puts("3. Quitter");
                                                                      
                                                                  scanf("%d", &choix);
                                                                  
                                                                  return choix;
                                                              }
                                                              
                                                              unsigned aleatoire(void)
                                                              {
                                                                  return (rand() % (max - min + 1)) + min;
                                                              }
                                                              
                                                              unsigned choisirNbMystere(void)
                                                              {
                                                                  unsigned mystere;
                                                                  unsigned temp;
                                                                  unsigned intervalle = 1;
                                                                  
                                                                  puts("Entrez le nombre mystère : ");
                                                                  scanf("%d", &mystere);
                                                                  
                                                                  clear();
                                                                  
                                                                  temp = mystere;
                                                                  
                                                                  while (temp > 0) {
                                                                      temp /= 10;
                                                                      intervalle *= 10;
                                                                  }
                                                                  
                                                                  printf("Le nombre mystere se trouve entre 0 et %d\n", intervalle);
                                                                  
                                                                  return mystere;
                                                                  
                                                              }
                                                              
                                                              void solo(void)
                                                              {
                                                                  difficulte();
                                                                  jeu(aleatoire());
                                                              }
                                                              
                                                              void multi(void)
                                                              {
                                                                  jeu(choisirNbMystere());
                                                              }
                                                              
                                                              unsigned rejouer(void)
                                                              {
                                                                  unsigned continuer;
                                                                  
                                                                  puts("Voulez-vous rejouer ? (1/0)");
                                                                  scanf("%d", &continuer);
                                                                  
                                                                  return continuer;
                                                              }
                                                              
                                                              void jeu(unsigned nbMystere)
                                                              {
                                                                  time_t debut;
                                                                  time_t fin;
                                                                  double temps;
                                                                  unsigned nbEntre;
                                                                  unsigned nbCoups = 0;
                                                                  
                                                                  time(&debut);
                                                                  
                                                                  do {
                                                                      printf("Quel est le nombre mystère : ");
                                                                      scanf("%d", &nbEntre);
                                                                      
                                                                      if (nbEntre > nbMystere)
                                                                          printf("C'est moins !");
                                                                          
                                                                      else if (nbEntre < nbMystere) 
                                                                          printf("C'est plus !");
                                                                      else
                                                                          printf("Bravo !");
                                                                      
                                                                      nbCoups++;
                                                                      
                                                                      putchar('\n');
                                                                      
                                                                  } while (nbEntre != nbMystere);
                                                                  
                                                                  time(&fin);
                                                                  
                                                                  temps = difftime(fin, debut);
                                                                  
                                                                  printf("Vous avez mis %d essais pour trouver le nombre %d, le tout en %.0f secondes.\nCe qui fait en moyenne %.1fs par essais.\n\n", nbCoups, nbMystere, temps, temps / (double)nbCoups);
                                                              }
                                                              
                                                              • Partager sur Facebook
                                                              • Partager sur Twitter

                                                              zPlus

                                                              × 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