Version simplifiée du jeu de Mastermind

Version simplifiée du jeu de Mastermind - C - Programmation

Marsh Posté le 14-05-2008 à 16:36:34    

Bonjour,

 

Voilà on a un devoir à faire sur la création d'un jeu Mastermind, l'énoncé est le suivant :
Le jeu se présente sous la forme d'un plateau ayant 12 rangées de 5 trous pouvant accueillir des pions de numéros différents (1, 2, 3, 4, 5, 6, 7, 8) :
* L'ordinateur fabrique une combinaison secrète de 5 pions choisies parmis 8 numéros.
* L'utilisateur cherche par tatonnements succéssifs, à trouver la combinaison secrète. Après chaque essai, l'ordinateur donne 2 explications :
          * le nombre de pions bien choisies et bien placées. Pour cela il affiche le chiffre 2 à la position du numéros correcte.
          * le nombre de pions bien choisies mais mal placées. Pour cela il affiche le chiffre 1 à la position du numéros.
          * Sinon sur les autres pions il affiche 0.
12 essais maximum.

 

Voilà ce que j'ai fait :

Code :
  1. #include<stdio.h>
  2. #include<time.h>
  3. int gagne (int chiffretrouve[]);
  4. int rechercherchiffre(int a, int combinaison[], int chiffretrouve[]);
  5. int lirechiffre;
  6. int a, b;
  7. int main(){
  8.    srand(time(NULL));
  9.    int c = rand()%8;
  10.    int combinaison = '45738';
  11.    int chiffretrouve[5] = {0};
  12.    long couprestant = 12;
  13.    long i = 0;
  14.    return 0;
  15.  
  16. while (couprestant > 12 && !gagne(chiffretrouve))
  17. {
  18.      printf ("\n\n Quel est la combinaison? \n\n" );
  19.      for (i = 0; i < 5; i++)
  20.      {
  21.          if (chiffretrouve[i]);
  22.             printf("\n\n %i \n\n", combinaison[i]);
  23.          else
  24.               printf("\n\n 0 \n\n" );
  25.               }
  26. printf ("\n\n Entrez 5 chiffres entre 1 et 8 \n\n" );
  27. c = scanf ("%i", c);
  28. if (!recherchechiffre (c, combinaison, chiffretrouve))
  29. {
  30.                      couprestant --;
  31.                      }
  32. if (gagne(chiffretrouve))
  33.   printf("\n\n Gagné la combinaison était bien : %i \n\n", combinaison);
  34. else
  35.    printf("\n\n Perdu la combinaison était : %i \n\n", combinaison);
  36. return 0;
  37. }
  38. int gagne (int chiffretrouve[])
  39. {
  40.    long i = 0;
  41.    int joueurgagne = 1;
  42.    for (i = 0; i < 5; i++)
  43.    {
  44.        if (chiffretrouve[i] ==0)
  45.        joueurgagne = 0;
  46.        }
  47.    return joueurgagne;
  48. }
  49. int recherchechiffre (int c, int combinaison, int chiffretrouve[])
  50. {
  51.    long i = 0;
  52.    int bonchiffre = 0;
  53.    for (i = 0; combinaison[i] != 0; i++)
  54.    {
  55.        if (c == combinaison[i])
  56.        {
  57.             bonchiffre = 1;
  58.             chiffretrouve[i] = 1;
  59.        }
  60.    return bonchiffre;
  61. }
  62. return (rand()%(b-a)+a)
  63. }
 

//
Je n'arrive pas les pointeurs ainsi que mettre 2 et 1.
Merci

Message cité 1 fois
Message édité par Elmoricq le 14-05-2008 à 16:45:04
Reply

Marsh Posté le 14-05-2008 à 16:36:34   

Reply

Marsh Posté le 14-05-2008 à 16:40:47    

Pas du C++, je déplace dans la sous-catégorie "C".

Reply

Marsh Posté le 14-05-2008 à 23:31:22    

Ah tiens c'est le même devoir que le mien !


Message édité par noamaq le 14-05-2008 à 23:33:02
Reply

Marsh Posté le 15-05-2008 à 07:18:48    


Mais pas de question claire, helas.

Reply

Marsh Posté le 28-03-2009 à 15:33:49    

C bien ms essai unpeu un mode multijoueur controler par le tps.et tu me fais signe a wilbert_tsagueu@yahoo.fr. ca me casse la tete!

Reply

Marsh Posté le 01-04-2009 à 08:54:34    

sean_scotty a écrit :

C bien ms essai unpeu un mode multijoueur controler par le tps.et tu me fais signe a wilbert_tsagueu@yahoo.fr. ca me casse la tete!


Tu peux le refaire en français ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 01-04-2009 à 08:56:47    

Mathildeda a écrit :

Voilà ce que j'ai fait :  


Tu peux commencer par corriger ceci :  


 
-------------- Build: Debug in hello ---------------
 
Compiling: main.c
Linking console executable: bin\Debug\hello.exe
C:\dev\hello\main.c:7: warning: function declaration isn't a prototype
C:\dev\hello\main.c: In function `main':
C:\dev\hello\main.c:8: warning: implicit declaration of function `srand'
C:\dev\hello\main.c:9: warning: implicit declaration of function `rand'
C:\dev\hello\main.c:9: warning: ISO C90 forbids mixed declarations and code
C:\dev\hello\main.c:10:23: warning: character constant too long for its type
C:\dev\hello\main.c:21: warning: empty body in an if-statement
C:\dev\hello\main.c:22: error: subscripted value is neither array nor pointer
C:\dev\hello\main.c:23: error: syntax error before "else"
C:\dev\hello\main.c:27: warning: format argument is not a pointer (arg 2)
C:\dev\hello\main.c:28: warning: implicit declaration of function `recherchechiffre'
C:\dev\hello\main.c:39: warning: ISO C forbids nested functions
C:\dev\hello\main.c:48: warning: ISO C90 forbids mixed declarations and code
C:\dev\hello\main.c:50: warning: ISO C forbids nested functions
C:\dev\hello\main.c: In function `recherchechiffre':
C:\dev\hello\main.c:53: error: subscripted value is neither array nor pointer
C:\dev\hello\main.c:55: error: subscripted value is neither array nor pointer
C:\dev\hello\main.c:63: error: syntax error before '}' token
Process terminated with status 1 (0 minutes, 0 seconds)
5 errors, 11 warnings


Quelques corrections, et surtout, des commentaires :  

Code :
  1. /*
  2. Voilà on a un devoir à faire sur la création d'un jeu Mastermind, l'énoncé est
  3. le suivant :
  4. Le jeu se présente sous la forme d'un plateau ayant 12 rangées de 5 trous
  5. pouvant accueillir des pions de numéros différents (1, 2, 3, 4, 5, 6, 7, 8) :
  6. * L'ordinateur fabrique une combinaison secrète de 5 pions choisies parmis 8
  7.   numéros.
  8. * L'utilisateur cherche par tatonnements succéssifs, à trouver la combinaison
  9.   secrète. Après chaque essai, l'ordinateur donne 2 explications :
  10.           * le nombre de pions bien choisies et bien placées. Pour cela il
  11.             affiche le chiffre 2 à la position du numéros correcte.
  12.           * le nombre de pions bien choisies mais mal placées. Pour cela il
  13.             affiche le chiffre 1 à la position du numéros.
  14.           * Sinon sur les autres pions il affiche 0.
  15. 12 essais maximum.
  16. */
  17. #include<stdio.h>
  18. #include<time.h>
  19. /* -ed- ajoute */
  20. #include<stdlib.h>
  21. /* -ed- eviter les prototypes separes dans le meme ficiher source. Travailler
  22.         si la disposition du code. Les fonctions non exportéee sont 'static'.
  23. int gagne (int chiffretrouve[]);
  24. int rechercherchiffre (int a, int combinaison[], int chiffretrouve[]);
  25. */
  26. /* -ed- eviter les globales. Au moins les rendre 'static'  */
  27. static int lirechiffre;
  28. static int a, b;
  29. static int gagne (int chiffretrouve[])
  30. {
  31.    long i = 0;
  32.    int joueurgagne = 1;
  33.    for (i = 0; i < 5; i++)
  34.    {
  35.       if (chiffretrouve[i] == 0)
  36.          joueurgagne = 0;
  37.    }
  38.    return joueurgagne;
  39. }
  40. static int recherchechiffre (int c, int combinaison, int chiffretrouve[])
  41. {
  42.    long i = 0;
  43.    int bonchiffre = 0;
  44.    /* -ed- absurde. 'combinaison' n'est pas un tableau.
  45.       A corriger. Je ne sais pas ce que tu veux faire... */
  46.    for (i = 0; combinaison[i] != 0; i++)
  47.    {
  48.       if (c == combinaison[i])
  49.       {
  50.          bonchiffre = 1;
  51.          chiffretrouve[i] = 1;
  52.       }
  53.       return bonchiffre;
  54.    }
  55.    /* -ed- ajoute ';' */
  56.    return (rand () % (b - a) + a);
  57. }
  58. /* -ed- ajoute 'void' (pas de parametres) */
  59. int main (void)
  60. {
  61.    srand (time (NULL));
  62.    {
  63.       /* -ed- en C90, les variables doivent etre definies en debut de bloc */
  64.       int c = rand () % 8;
  65.       /* -ed-
  66.          int combinaison = '45738';
  67.          ceci n'a aucun sens. C'est soit
  68.          int combinaison = 45738;
  69.          soit plus vraisemblablement :
  70.        */
  71.       char combinaison[5] = "45738";
  72.       int chiffretrouve[5] = { 0 };
  73.       long couprestant = 12;
  74.       long i = 0;
  75.       return 0;
  76.       while (couprestant > 12 && !gagne (chiffretrouve))
  77.       {
  78.          printf ("\n\n Quel est la combinaison? \n\n" );
  79.          for (i = 0; i < 5; i++)
  80.          {
  81.             /* -ed- supprime ';' */
  82.             if (chiffretrouve[i])
  83.                printf ("\n\n %i \n\n", combinaison[i]);
  84.             else
  85.                printf ("\n\n 0 \n\n" );
  86.          }
  87.          printf ("\n\n Entrez 5 chiffres entre 1 et 8 \n\n" );
  88.          c = scanf ("%i", c);
  89.          /* -ed- Huh !  Je vois mal comment on peut entrer 5 chiffres avec ce code.
  90.             de plus, la valeur retournée par scanf() n'est pas ce que tu crois.
  91.             Il faut relire la doc... Enfin, scanf() attends une adresse.
  92.             De toutes façons, ton approche globale est à revoir. Il faut
  93.             abandonner l'idée que la combinaison est une valeutr numérique,
  94.             mais il faut plutût la traiter conne une chaine de caractères.
  95.           */
  96.          if (!recherchechiffre (c, combinaison, chiffretrouve))
  97.          {
  98.             couprestant--;
  99.          }
  100.          if (gagne (chiffretrouve))
  101.             printf ("\n\n Gagné la combinaison était bien : %i \n\n",
  102.                     combinaison);
  103.          else
  104.             printf ("\n\n Perdu la combinaison était : %i \n\n", combinaison);
  105.       }
  106.    }
  107.    return 0;
  108. }


Message édité par Emmanuel Delahaye le 01-04-2009 à 09:16:28

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed