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

  FORUM HardWare.fr
  Programmation
  C

  programme C :jeu de cartes

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

programme C :jeu de cartes

n°2160168
sabeurios8​9
Posté le 14-10-2012 à 11:57:02  profilanswer
 

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.

mood
Publicité
Posté le 14-10-2012 à 11:57:02  profilanswer
 

n°2160171
Profil sup​primé
Posté le 14-10-2012 à 13:01:50  answer
 

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.

n°2160172
sabeurios8​9
Posté le 14-10-2012 à 13:09:18  profilanswer
 

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

n°2160173
Profil sup​primé
Posté le 14-10-2012 à 13:18:42  answer
 

T'as étudié quoi ?


Message édité par Profil supprimé le 14-10-2012 à 13:19:22
n°2160174
sabeurios8​9
Posté le 14-10-2012 à 13:30:46  profilanswer
 

1ère année info

n°2160176
Profil sup​primé
Posté le 14-10-2012 à 14:19:01  answer
 

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
n°2160184
sabeurios8​9
Posté le 14-10-2012 à 17:06:54  profilanswer
 


ç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
 

n°2160186
Terminapor
I'll see you rise.
Posté le 14-10-2012 à 17:27:25  profilanswer
 

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
n°2160266
sabeurios8​9
Posté le 15-10-2012 à 14:02:17  profilanswer
 

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
n°2160287
gilou
Modérateur
Modzilla
Posté le 15-10-2012 à 15:45:08  profilanswer
 

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é!  --
mood
Publicité
Posté le 15-10-2012 à 15:45:08  profilanswer
 

n°2160295
Terminapor
I'll see you rise.
Posté le 15-10-2012 à 16:28:49  profilanswer
 

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

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

  programme C :jeu de cartes

 

Sujets relatifs
Programme C++ , erreur ? Ou ça ?[HTML5] Quels outils pour une interface graphique d'un programme JAVA?
Déclenchement automatique de programme par enregistrement de fichier[C] Conversion type énuméré en string pour affichage :
programme C[Python] Programme débutant
[C#] dataset ajouter une ligne depuis textbox[C/Ada] Traduction de C avec Ada de la bibliothèque portmidi.
Plus de sujets relatifs à : programme C :jeu de cartes


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