programme C :jeu de cartes

programme C :jeu de cartes - C - Programmation

Marsh Posté le 14-10-2012 à 11:57:02    

pouvez vous m'aider svp à résoudre ce problème parceque je suis encors débutant:
 
Ecrire un programme C qui simule le jeu de carte bataille avec deux tableaux d'entiers(allant de 1 à 10) représentant chacun un joueur et générés aléatoirement.le programme devra afficher le déroulement du jeu,l'évolution du score et ensuite le vainqueur final.
 
     Le principe du jeu est le suivant:
 
Chaque joueur dispose de n carte(nétant saisie au clavier et ne dépassant pas 54).A chaque tour,chaque joueur retourne la carte du haut de son tas.Celui qui a la carte la plus haute gagne l'ensemble des cartes mis en jeux donc le score augmente d'un point.
 
En cas d'égalité de valeurs-cas appelé bataille- les joueurs commencent par placer une première carte face cachée puis une seconde face visible pour décider qui fera la levée.En cas de nouvelle égalité,la procédure est répétée.Le score du vainqueur de la bataille augmente de 3 points pour chaque tour de bataille.Le vainqueur final est le joueur ayant le plus grand score.
 
     Pour donner plus de véracité au jeu il vous est demandé de créer une fonction permettant de mélanger les cartes(le tableau).le principe est le suivant:
            *Pour mélanger les N cartes,on tire au hasard i1 compris entre 0 et N-1 et on échange les éléments d'indice i1 avec le dernier élément(indice N-1).On recommencera avec un autre nombre i1,tiré entre 0 et N-2,qui sera avec l'élément d'indices N-2?etc.

Reply

Marsh Posté le 14-10-2012 à 11:57:02   

Reply

Marsh Posté le 14-10-2012 à 13:01:50    

Bonjour, s'il vous plaît, mrerci ?
 
On fait pas le travail des étudiant.
Montre nous ce que tu as fait et on t'aidera là ou ça coince.

Reply

Marsh Posté le 14-10-2012 à 13:09:18    

j'ai presque un mois que je fais la programmation C donc je ne suis pas assez fort et j'ai mal à démarrer...c'est pourquoi je demande votre aide même avec des indications pour commencer

Reply

Marsh Posté le 14-10-2012 à 13:18:42    

T'as étudié quoi ?


Message édité par Profil supprimé le 14-10-2012 à 13:19:22
Reply

Marsh Posté le 14-10-2012 à 13:30:46    

1ère année info

Reply

Marsh Posté le 14-10-2012 à 14:19:01    

Code :
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4.  
  5. typedef enum {coeur, carreau, pique, trefle} color_type ;
  6.  
  7. typedef enum {AS, ROI, DAME, VALET, DIX, NEUF, HUIT, SEPT, SIX, CINQ, QUATRE, TROIS, DEUX} value_type ;
  8.  
  9.  
  10. typedef struct
  11. {
  12. color_type color ;
  13. value_type value ;
  14. } card_type ;
  15.  
  16.  
  17. char* traduit_value(int value) {
  18.  
  19.  char* types_string[] = { "As",
  20.                "Roi",
  21.                "Dame",
  22.                "Valet",
  23.                "Dix",
  24.                "Neuf",
  25.                "Huit",
  26.                "Sept",
  27.                "Six",
  28.                "Cinq",
  29.                "Quatre",
  30.                "Trois",
  31.                "Deux"};
  32.  
  33.  
  34.  if (value>-1 && value<14) {
  35.    return types_string[value]; }
  36.  return "erreur";
  37.  
  38. }
  39.  
  40. void affiche (card_type * card){
  41.  
  42.  char* value_aff = NULL;
  43.  value_aff= traduit_value(card->value);
  44.  
  45.  printf("\n Type :%s\n", value_aff);
  46. }
  47.  
  48.  
  49. int main (void) {
  50.  
  51.  card_type My_Card = {coeur, AS};
  52.  
  53.  card_type*  card = &My_Card;
  54.  
  55.  affiche(card);
  56.  exit(0);
  57. }


 
 
Si ça peut t'inspirer.

Message cité 1 fois
Message édité par Profil supprimé le 14-10-2012 à 14:20:14
Reply

Marsh Posté le 14-10-2012 à 17:06:54    


ça rien à voir avec le principe du jeux
je n'ai pas demandé la couleur
où sont les 2 tableaux à 10 cases aléatoirement générés
comment faire pour générer la fonction bataille et la fonction qui mélange les cartes
 

Reply

Marsh Posté le 14-10-2012 à 17:27:25    

Ouais, enfin il t'a déjà filé un bon début, ingrat !
Si tu t'attends à ce qu'on te vomisse le code, ben tu peux toujours attendre.
 
Explique le soucis, ce que tu ne comprends pas et on t'aidera (que ce soit d'un point de vue pratique ou théorique) :spamafote:


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 15-10-2012 à 14:02:17    

voila! j'ai fais mon essai alors Pouvez vous m'aider sachant que lors du compilation il m'affiche fatal errors
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int saisir()
  5. {   int n;
  6.     scanf("%d",&n);
  7.     while((n>54)||(n<1))
  8.     {
  9.         scanf("%d",&n);
  10.     }
  11.     return(n);
  12. }
  13. int rand_a_b(int a, int b)
  14. {
  15.     return rand()%(b-a) +a;
  16. }
  17. void remplissage(int t[],int n)
  18. {   int i;
  19.     srand(time(NULL));
  20.     for(i=0; i<n; i++)
  21.         t[i]=rand_a_b(1,11);
  22. }
  23. void melanger(int t[],int n)
  24. {
  25.     int i,i1,aux;
  26.     for(i=0; i<n; i++)
  27.     {
  28.         i1=rand_a_b(1,n-i+1);
  29.         aux=*(t+i1);
  30.         *(t+i1)=*(t+n-i);
  31.         *(t+n-i)=aux;
  32.     }
  33. }
  34. int bataille(int t1[],int t2[],int *i,int *s1,int *s2,int n)
  35. {
  36.     if((n-*i)>=2)
  37.     {
  38.         *i+=2;
  39.         if (t1[*i]>t2[*i])
  40.         {
  41.             *s1+=3;
  42.             return(1);
  43.         }
  44.         else if(t2[*i]>t1[*i])
  45.         {
  46.             *s2+=3;
  47.             return(1);
  48.         }
  49.         else return(0);
  50.     }
  51.     else {
  52.         *i=n;
  53.         return(1);
  54.     }
  55. }
  56. int main()
  57. {
  58.     int t1[54],t2[54],n,i,s1=0,s2=0,v;
  59.     n=saisir();
  60.     remplissage(t1,n);
  61.     remplissage(t2,n);
  62.     melanger(t1,n);
  63.     melanger(t2,n);
  64.     for(i=0; i<n; i++)
  65.     {   printf("Cartes de j1=%d et j2=%d ",t1[i],t2[i]);
  66.         if (t1[i]>t2[i]) {
  67.             s1++;
  68.         }
  69.         else if (t2[i]>t1[i]) {
  70.             s2++;
  71.         }
  72.         else {
  73.             printf("bataille!!!!!!" );
  74.             bataille(t1,t2,&i,&s1,&s2,n);
  75.         }
  76.         v=bataille(t1,t2,&i,&s1,&s2,n);
  77.         if (!v)
  78.         {
  79.             bataille(t1,t2,&i,&s1,&s2,n);
  80.         }
  81.         printf("plie numero %d : s1=%d s2=%d \n ***************************",i+1,s1,s2);
  82.     }
  83.     if (s1>s2) {
  84.         printf("Joueur 1 est gagnant , Hard luck joueur 2" );
  85.     }
  86.     else if(s2>s1) {
  87.         printf("Joueur 2 est gagnant , Hard luck joueur 1" );
  88.     }
  89.     else {
  90.         printf("Egalité" );
  91.     }
  92.     system("pause" );
  93.     return 0 ;
  94. }

Message cité 1 fois
Message édité par gilou le 15-10-2012 à 15:39:35
Reply

Marsh Posté le 15-10-2012 à 15:45:08    

J'ai pas d'erreur à la compil

Compiling: C:\clang\carte.c
Linking console executable: C:\clang\carte.exe
Process terminated with status 0 (0 minutes, 5 seconds)
0 errors, 0 warnings


C:\clang>carte
1
Cartes de j1=5 et j2=5 bataille!!!!!!plie numero 2 : s1=0 s2=0
 ***************************EgalitéAppuyez sur une touche pour continuer...
 
C:\clang>


A+,


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

Marsh Posté le 15-10-2012 à 15:45:08   

Reply

Marsh Posté le 15-10-2012 à 16:28:49    

sabeurios89 a écrit :

voila! j'ai fais mon essai alors Pouvez vous m'aider sachant que lors du compilation il m'affiche fatal errors

 
Code :
  1. [...]



C'est bien toi qui a écrit ce code ?
Je vais peut être passer pour un enfoiré, mais j'en doute un peu.
Tu précises au début que tu es débutant et tu fais des accès de tableaux  par déplacer de pointers +  dé-référencement (*(t+i)) au lieu de la syntaxe 'plus commune' (t[i])
Peut être que je me plante, si c'est pas le cas permet-moi de te dire que tout ceci n'a, du coups, aucune valeur :D
Le but d'un exercice n'étant pas simplement d'être résolu, mais surtout de te permettre de comprendre :D
Après, si tu as bien écris ce code, ignore ça, c'est purement hypothétique :p

 

Sinon, globalement ça m'a l'air ok.
Un truc un petit peu 'piège' :

 

Ta fonction int rand_a_b(int a,int b) n'est pas bonne..
Si tu cherches à piocher une valeur aléatoire entre 0 et x, c'est tendant d'écrire :

Code :
  1. int v = rand()%x


Le soucis, c'est que tu perd l'aspect uniforme de la fonction rand() (en gros tu n'a pas autant de chance de tomber sur chacun des nombres)

 

Le mieux est de faire comme ça :

Code :
  1. int v = (rand()/(float)RAND_MAX) * x;


RAND_MAX est une constante, ça défini quelle est la valeur maximale que peut fournir rand().
Donc en gros, rand()/(float)RAND_MAX te renvoi un nombre décimal float (tu peux utiliser un double aussi), au hasard entre 0 et 1, tu gardes bien l'uniformité.
En multiply par x, tu tombes alors sur un nombre au hasard entre 0 et x.
Il faut bien pensé à caster (convertir) ton RAND_MAX (ou ton rand()) en float, sinon tu fais une division d'entier, donc ça sera toujours 0 ou 1.
Je te laisse deviner pour un nombre au hasard entre x et y :D


Message édité par Terminapor le 15-10-2012 à 16:30:29

---------------
Perhaps you don't deserve to breathe
Reply

Sujets relatifs:

Leave a Replay

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