Aide Programmation en C

Aide Programmation en C - C - Programmation

Marsh Posté le 31-10-2013 à 18:58:40    

Bonsoir, j'ai un petit programme que je n'arrive pas à régler :
 
Chacun son tour 2 joueurs lancent X fois deux dés à 6 faces, les résultats des lancés sont additionnés et chaque fois que les dés sont identiques le joueur joue une fois de plus. Le premier arrivé à X*20 gagne. Le nombre X est décidé au début du jeu.  
 
Voilà, je suis bloqué. Help


Message édité par yeul2 le 31-10-2013 à 19:06:10
Reply

Marsh Posté le 31-10-2013 à 18:58:40   

Reply

Marsh Posté le 31-10-2013 à 23:49:01    

Il faut commencer par analyser avant de programmer.
 
De quelles données avez-vous besoin ?
Quels traitements seront faits sur ces données ?
 
Essayer d'écrire en pseudo-code comment le programme va se dérouler.
 
Ensuite, il ne restera plus qu'à traduire votre pseudo-code en langage C.

Reply

Marsh Posté le 01-11-2013 à 13:16:41    

Alors, pour l'analyse, il faut donc un J1 et un J2, avec une fonction tirage. Il faut qu'il y ai une variable res qui calcule à chaque fois le cumule des deux dés. Et en dernier, le truc que je ne vois pas du tout comment faire mise à part avec un if, c'est que dès que les dés ont la même somme, alors le Joueur qui a lancé les dés rejoue.

Reply

Marsh Posté le 01-11-2013 à 13:20:54    

Je n'ai pas encore vu les tableaux, donc je ne peux les utiliser même si c'est ce qui serait le plus simple...

Reply

Marsh Posté le 01-11-2013 à 14:10:40    

yeul2 a écrit :

...le truc que je ne vois pas du tout comment faire mise à part avec un if ...


Les programmes contiennent trois éléments :
 
- Les instructions simples (chargement d'une donnée, appel d'une fonction)
- Les conditions (if)
- Les boucles (for, ou while)
 
Plus de 99% des programmes contiennent des if. Il ne faut pas en avoir peur. il faut les apprendre et s'en servir.

Reply

Marsh Posté le 01-11-2013 à 14:32:52    

Le problème étant qu'il va falloir que les deux dés soit additionnés et que le chiffre calculé soit gardé en réserve pour être une nouvelle fois additionnés avec les les chiffres des dés suivant. Ajouté à ceci, une fonction qui permettra de connaître si les dés sont identiques et que s'ils le sont le joueur pourra rejouer, sinon c'est à l'autre joueur de tirer. Il y aura donc deux scores à calculer, celui du J1 et du J2, et le premier arrivé à un certain score qu'on décide au début du jeu, gagne. Trop compliqué à faire avec le peu de ressource que j'ai.
 
Voilà ce que j'ai fait pour le moment...
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. void tirage ();
  7. int main()
  8. {
  9. srand(time(NULL));
  10.     tirage();
  11.    system("PAUSE" );
  12.    return 0;
  13. }
  14. void tirage()
  15. {
  16.     int de1, de2, scoreJ1, scoreJ2, lanceJ1, lanceJ2;
  17.     de1=1+rand()%6;
  18.     de2=1+rand()%6;
  19.     printf("de1 = %d\nde2 = %d\n",de1, de2);
  20.     scoreJ1 = de1 + de2;
  21.     scoreJ2 = de1 + de2;
  22.     for(lanceJ1=0;lanceJ1<scoreJ1*20;lanceJ1++){
  23.         if(de1==de2){
  24.             printf("score du J1 =%d\n",scoreJ1);
  25.             printf("les des ont la meme valeur, le joueur 1 rejoue\n" );
  26.         }
  27.         else if(de1!=de2){
  28.             printf("score du J1 = %d\n",scoreJ1);
  29.             printf("les des n'ont pas la meme valeur, le joueur 2 joue\n" );
  30.         }
  31.     }
  32.     for(lanceJ2=0;lanceJ2<scoreJ2*20;lanceJ2++){
  33.         if(de1==de2){
  34.             printf("score du J2 =%d\n",scoreJ2);
  35.             printf("les des ont la meme valeur, le joueur 2 rejoue\n" );
  36.         }
  37.         else if(de1!=de2){
  38.             printf("score du J2 = %d\n",scoreJ2);
  39.             printf("les des n'ont pas la meme valeur, le joueur 1 joue\n" );
  40.         }
  41.     }
  42. }


 
 
Je n'arrive pas à faire en sorte que le score se cumule. Je n'ai pas définit de nombre N pour le chiffre a atteindre pour que les joueurs gagnent pour le moment.


Message édité par yeul2 le 01-11-2013 à 16:17:13
Reply

Marsh Posté le 01-11-2013 à 17:44:43    

:hello: !
 
A mon avis, avant de te lancer dans le codage, il faudrait voir l'algorithmique du programme. Si je te dis ça, c'est qu'à mon sens il y a un petit décalage entre l'énoncé du sujet et ton code :/
 

Code :
  1. Chacun son tour [...] Le premier arrivé à X*20 gagne


 
Dans ton code, dans la mesure où tu utilises 2 boucles for entre autres, c'est interprété comme "Le joueur 1 joue jusqu'à ce qu'il atteigne X*20" :/
:jap:


---------------
And in the end, the love you take is equal to the love you make
Reply

Marsh Posté le 01-11-2013 à 18:15:48    

Ben, je sais pas, il faut apparemment une seule fonction tirage, je ne sais pas comment faire pour que cela fasse chacun son tour et tout ce qui suit.

Reply

Marsh Posté le 02-11-2013 à 02:37:21    

une petite idée ?

Reply

Marsh Posté le 02-11-2013 à 09:13:07    

Tu fais une fonction Tirage qui s'occupe uniquement de faire un lancé de dé (une 2ème fois s'il le faut).
Tu appelles cette fonction dans une boucle qui met à jour les scores des 2 joueurs (boucle while).

Reply

Marsh Posté le 02-11-2013 à 09:13:07   

Reply

Marsh Posté le 02-11-2013 à 14:33:28    

Merci, mais justement je n'arrive pas à faire en sorte que cela cumule les scores...
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. #include <conio.h>
  5. #include <windows.h>
  6. int de1, de2,score,lance, N;
  7. void tirage ();
  8. int main()
  9. {
  10. srand(time(NULL));
  11.     while(score<=N*20){
  12.     tirage();
  13.     }
  14.    system("PAUSE" );
  15.    return 0;
  16. }
  17. void tirage()
  18. {
  19. de1=1+rand()%6;
  20. de2=1+rand()%6;
  21. score=score+de1+de2;
  22.    printf("choisissez un nombre N de lance : \n" );
  23.    scanf("%d",&N);
  24.    printf("%d + %d = %d\n",de1,de2,score);
  25.     for(lance=0;N*20>=score;lance++){
  26.         if(de1==de2){
  27.             printf("score =%d\n",score);
  28.             printf("les des ont la meme valeur, le joueur rejoue\n" );
  29.         }
  30.         else if(de1!=de2){
  31.             printf("score = %d\n",score);
  32.             printf("les des n'ont pas la meme valeur, le joueur 2 joue\n" );
  33.         }


 
Enfin soit, je crois que je vais abandonner et attendre d'avoir un corrigé proprement expliqué car je débute, et j'ai un peu de mal. Merci à vous tout de même pour l'aide apporté.

Reply

Marsh Posté le 02-11-2013 à 16:05:53    

Si ça peut aider voila en gros le pseudo code du problème tel que je l'ai compris :

Code :
  1. X <-- nombreFixe
  2. cpt1 <-- 0 //nb lancer de dé joueur1
  3. cpt2 <-- 0 //nb lancer de dé joueur2
  4. score1 <-- 0 //score joueur1
  5. score2 <-- 0 //score joueur2
  6. Tant que cpt1 < X*20 && cpt2 < X*20
  7. //Joueur 1 joue
  8. Faire
  9.  joueur1d1 <-- lancerDé()
  10.  joueur1d2 <-- lancerDé()
  11.  score1 <-- score1 + joueur1d1 + joueur1d2
  12.  cpt1 <-- cpt1 + 1
  13. Tant que joueur1d1 == joueur1d2 && cpt1 < X*20
  14. Si cpt1 < X*20
  15.  //Joueur 2 joue
  16.  Faire
  17.   joueur2d1 <-- lancerDé()
  18.   joueur2d2 <-- lancerDé()
  19.   score2 <-- score2 + joueur2d1 + joueur2d2
  20.   cpt2 <-- cpt2 + 1
  21.  Tant que joueur2d1 == joueur2d2 && cpt2<X*20
  22. FSi
  23. FTant que

Reply

Marsh Posté le 02-11-2013 à 19:11:51    

Citation :

Le premier arrivé à X*20 gagne.

Vu que en moyenne un lancer rapporte 8,4 points (en tenant compte des répétitions possibles) et que 8.4 < 20, il y aura pas souvent de gagnants à ce jeu...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 03-11-2013 à 00:26:23    

gilou a écrit :

Citation :

Le premier arrivé à X*20 gagne.

Vu que en moyenne un lancer rapporte 8,4 points (en tenant compte des répétitions possibles) et que 8.4 < 20, il y aura pas souvent de gagnants à ce jeu...
A+,


 
Oui, je sais que l'énoncé est à la base faussé mais bon, je suis obligé de faire avec ^^

Reply

Sujets relatifs:

Leave a Replay

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