Advertisement
Guest User

pokerc

a guest
Mar 19th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.43 KB | None | 0 0
  1. //########################################################
  2. // TP poker du 19/10/2016                                #
  3. //########################################################
  4.  
  5. // directives préprocesseur
  6. #include <stdio.h>
  7. #include <time.h>
  8. #include <stdlib.h>
  9. #define VALET 11
  10. #define DAME 12
  11. #define ROI 13
  12. #define AS 14
  13.  
  14. // déclaration des types *********************************
  15.  
  16. typedef enum Couleur
  17. { PIQUE, COEUR, CARREAU, TREFLE }
  18. Couleur ;
  19.  
  20. typedef struct Carte
  21. {
  22.     int valeur ;
  23.     Couleur couleur ;
  24. } Carte;
  25.  
  26. typedef struct Main
  27. {
  28.     Carte cartes[5] ;
  29. } Main ;
  30.  
  31. enum Type_combi {RIEN, PAIRE, DOUBLE_PAIRE, BRELAN, SUITE, COULEUR, FULL, CARRE, QUINTE_FLUSH, NB_TYPES_COMBI} ;
  32. typedef enum Type_combi Type_combi ;
  33.  
  34. typedef struct Combinaison
  35. {
  36.    Type_combi type ;   // type de la combinaison (PAIRE, BRELAN ...)
  37.    int valeur1 ;        // full aux AS (valeur1) par les rois
  38.    int valeur2 ;        // full aux as par les ROIS (valeur2)
  39.    int valeur_kicker ;   //  et un 7 ...
  40. } Combinaison;
  41.  
  42. //etc.
  43.  
  44. // déclaration des fonctions ****************************
  45. Carte generer_carte_aleatoire(void);
  46. void afficher_main(Main m);
  47. Combinaison combinaison_associee(Main );
  48. void afficher_combi(Combinaison combi);
  49.  
  50. // MAIN *************************************************
  51. int main(void)
  52. {
  53.     //initialisation du hasard
  54.     srand(time(NULL));
  55.    
  56.     //génération main aléatoire
  57.     Main m;
  58.     int i;
  59.     for(i=0;i<5;i++)
  60.     {
  61.         m.cartes[i] = generer_carte_aleatoire () ;
  62.     }
  63.  
  64.     //affichage de la main
  65.     afficher_main(m);
  66.     afficher_combi( combinaison_associee(m) );
  67.  
  68.  
  69.     return 0;
  70.  
  71. }
  72.  
  73. // définition des fonctions ******************************
  74. Carte generer_carte_aleatoire(void)
  75. {
  76.     //renvoie une Carte aléatoire
  77.  
  78.     Carte c ;
  79.     c.valeur = rand()%13 + 2;
  80.     c.couleur = rand()%4 ;
  81.     return c;
  82. }
  83.  
  84. void afficher_main(Main m)
  85. {
  86.     //affiche carte par carte la main m (en paramètre)
  87.     //ne renvoie rien
  88.    
  89.     char* noms_couleurs[4] = {"Coeur", "Carreau", "Trèfle", "Pique"} ;
  90.     char* noms_valeurs[15] = {"","","2","3","4","5","6","7","8","9","10","Valet","Dame","Roi","As"} ;
  91.  
  92.     int i;
  93.     for(i=0 ; i<5 ; i++)
  94.     {
  95.         printf("  - %s de %s\n", noms_valeurs[m.cartes[i].valeur], noms_couleurs[m.cartes[i].couleur]) ;   
  96.  
  97.     }
  98. }
  99.  
  100.  
  101. Combinaison combinaison_associee(Main m)
  102. {
  103.     //renvoie une structure Combinaison correspondant à la main
  104.     //passée en paramètre
  105.  
  106.     Combinaison combi ; //le resultat final
  107.     combi.valeur1 = 0;
  108.     combi.valeur2 = 0;
  109.  
  110.     //calcul du nb de cartes par valeur
  111.     //tableau contenant à l'indice i le nb de cartes de valeur i
  112.     int nb_cartes_par_valeur[15] = {0} ; //initialise à 0 partout
  113.  
  114.     int i;
  115.     for(i=0; i<5 ;i++)
  116.     {
  117.         (nb_cartes_par_valeur[ m.cartes[i].valeur ] )++ ;
  118.     }
  119.  
  120.     //on cherche la valeur des paires, brelans, carres, d'apres le tableau précédent
  121.     //ces variables valent 0 si la figure n'existe pas,
  122.     // et on stocke la valeur si elle existe
  123.     int val_paire = 0 ;  
  124.     int val_seconde_paire = 0;
  125.     int val_brelan = 0 ;
  126.     int val_carre = 0 ;
  127.     for(i=2 ; i<15; i++)
  128.     {
  129.         switch(nb_cartes_par_valeur[i])
  130.         {
  131.             case 2:
  132.                 if(val_paire==0)
  133.                     val_paire =i;
  134.                 else
  135.                     val_seconde_paire = i;
  136.                 break;
  137.             case 3:
  138.                 val_brelan = i;
  139.                 break;
  140.             case 4:
  141.                 val_carre = i;
  142.                 break;
  143.         }
  144.     }
  145.  
  146.     if (val_carre != 0)
  147.         {
  148.         combi.type = CARRE ;
  149.         combi.valeur1 = val_carre ;
  150.         }
  151.     else if (val_brelan != 0)
  152.         if (val_paire != 0)
  153.             {
  154.             combi.type = FULL;
  155.             combi.valeur1 = val_brelan ;
  156.             combi.valeur2 = val_paire ;
  157.             }
  158.         else
  159.             {
  160.             combi.type = BRELAN;
  161.             combi.valeur1 = val_brelan ;
  162.             }
  163.     else if (val_seconde_paire != 0 )
  164.         {
  165.         combi.type = DOUBLE_PAIRE;
  166.         combi.valeur1 = val_paire ;
  167.         combi.valeur2 = val_seconde_paire ;   //il faudrait échanger si plus grand
  168.         }
  169.     else if (val_paire != 0)
  170.         {
  171.         combi.type = PAIRE;
  172.         combi.valeur1 = val_paire ;
  173.         }
  174.     else
  175.         combi.type = RIEN;
  176.            
  177.  
  178.  
  179.     return combi ;
  180. }
  181.  
  182. void afficher_combi(Combinaison combi)
  183. {
  184.     //affiche une combinaison...
  185.     char* nom_combi[9] = {"RIEN", "PAIRE", "DOUBLE_PAIRE", "BRELAN", "SUITE", "COULEUR", "FULL", "CARRE", "QUINTE_FLUSH"} ;
  186.     char* noms_couleurs[4] = {"Coeur", "Carreau", "Trèfle", "Pique"} ;
  187.     char* noms_valeurs[15] = {"rien","","2","3","4","5","6","7","8","9","10","Valet","Dame","Roi","As"} ;
  188.  
  189.     printf("type : %s\n", nom_combi[combi.type] ) ;
  190.     printf("  valeur1 : %s\n", noms_valeurs[combi.valeur1]) ;
  191.     printf("  valeur2 : %s\n", noms_valeurs[combi.valeur2]) ;
  192.  
  193. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement