Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1451 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Aide Programmation en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Aide Programmation en C

n°2208914
yeul2
Posté le 31-10-2013 à 18:58:40  profilanswer
 

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
mood
Publicité
Posté le 31-10-2013 à 18:58:40  profilanswer
 

n°2208932
olivthill
Posté le 31-10-2013 à 23:49:01  profilanswer
 

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.

n°2208946
yeul2
Posté le 01-11-2013 à 13:16:41  profilanswer
 

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.

n°2208947
yeul2
Posté le 01-11-2013 à 13:20:54  profilanswer
 

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...

n°2208949
olivthill
Posté le 01-11-2013 à 14:10:40  profilanswer
 

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.

n°2208951
yeul2
Posté le 01-11-2013 à 14:32:52  profilanswer
 

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
n°2208964
Soileh
Lurkeur professionnel
Posté le 01-11-2013 à 17:44:43  profilanswer
 

: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
n°2208965
yeul2
Posté le 01-11-2013 à 18:15:48  profilanswer
 

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.

n°2208974
yeul2
Posté le 02-11-2013 à 02:37:21  profilanswer
 

une petite idée ?

n°2208982
Totoche17
Posté le 02-11-2013 à 09:13:07  profilanswer
 

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).

mood
Publicité
Posté le 02-11-2013 à 09:13:07  profilanswer
 

n°2209004
yeul2
Posté le 02-11-2013 à 14:33:28  profilanswer
 

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é.

n°2209013
honrisse
Posté le 02-11-2013 à 16:05:53  profilanswer
 

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

n°2209023
gilou
Modérateur
Modzilla
Posté le 02-11-2013 à 19:11:51  profilanswer
 

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é!  --
n°2209045
yeul2
Posté le 03-11-2013 à 00:26:23  profilanswer
 

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 ^^


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Aide Programmation en C

 

Sujets relatifs
[C] Besoin d'aide pour le Jeux de la VieProgrammation d'un éditeur de texte
besoin d'aide pour completer un programmeprogrammation C [aide]
Aide programmation C++ (débutant)besoin d'aide programmation C
Aide programmation C !!!Programmation en C, besoin d'aide
Aide Programmation C ArgumentsDemande d'aide pour programmation en C
Plus de sujets relatifs à : Aide Programmation en C


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR