headers.h => #ifndef NIANIANIA #define NIANIANIA typedef struct Valeur Valeur; struct Valeur { unsigned int tab[32]; unsigned int valeur; char descriptif[6]; int numero; }; Valeur init (Valeur A); int integrity (Valeur A); Valeur reorganize (Valeur A, int state, int amplitude); Valeur valeur_carte ( int i ); void error (int a); int Bataille_1erepasse ( Valeur A ); int TirerCarte (Valeur A, int joueur); Valeur Bataille_egalite (Valeur A); #endif == #include #include #include "headers.h" #include /*struct Couleur { unsigned int Trefle,Carreau,Coeur,Pique; }; struct Cartes { Couleur Roi,Dame,Valet,As,Dix,Neuf,Huit,Sept; int integrity; };*/ int main () { Valeur monJeu; Valeur A; A = init(monJeu); Bataille_1erepasse(A); return 0; } //void menu() { //} Valeur init(Valeur A) { int k; Valeur B; int integrite; for (k = 0; k < 32 ; k++ ) { A.tab[k] = ( rand() % 2) ; } integrite = integrity(A); if (integrite == 0) { return A; } else { if (integrite > 0) { B = reorganize(A,1,integrite); } else { B = reorganize(A,0,integrite); } } integrite = integrity(B); if (integrite == 0) { return B; } else { error(2); } } int integrity (Valeur A) { int i; unsigned int var1 = 0 ; unsigned int var2 = 0 ; for ( i = 0; i < 32; i++ ) { if (A.tab[i] == 1 ) { var2++; } else if (A.tab[i] == 0) { var1++; } } if ( (var2 || var1) > 16 ) { return var2-var1; } else { return 0; } } Valeur reorganize (Valeur A, int state, int amplitude) { int a; srand(time(NULL)); switch(state) { case 0: do { a = (rand() % 32); if (A.tab[a] == 0) { A.tab[a] = 1; amplitude++; } } while ( amplitude != 0 ); return A; break; case 1: do { a = (rand() % 32); if (A.tab[a] == 1) { A.tab[a] = 0; amplitude--; } } while ( amplitude != 0 ); return A; break; default: error(1); break; } } Valeur valeur_carte ( int i ){ Valeur A; A.numero = i; switch(A.tab[i]) { case 0:; case 1:; case 2:; case 3: A.valeur = 13; sprintf(A.descriptif , "Roi"); return A; case 4:; case 5:; case 6:; case 7: A.valeur = 12; sprintf(A.descriptif, "Dame"); return A; case 8:; case 9:; case 10:; case 11: A.valeur = 11; sprintf(A.descriptif,"Valet"); return A; case 12:; case 13:; case 14:; case 15: A.valeur = 10; sprintf(A.descriptif , "Dix"); return A; case 16:; case 17:; case 18:; case 19: A.valeur = 9; sprintf(A.descriptif, "Neuf"); return A; case 20:; case 21:; case 22:; case 23: A.valeur = 8; sprintf(A.descriptif,"Huit"); return A; case 24:; case 25:; case 26:; case 27: A.valeur = 7; sprintf(A.descriptif, "Sept"); return A; case 28:; case 29:; case 30:; case 31: A.valeur = 1; sprintf(A.descriptif ,"As"); return A; default: error(3); } } /*A.Roi.Trefle = tab[0]; A.Roi.Carreau = tab[1]; A.Roi.Coeur = tab[2]; A.Roi.Pique = tab[3]; A.Dame.Trefle = tab[4]; A.Dame.Carreau = tab[5]; A.Dame.Coeur = tab[6]; A.Dame.Pique = tab[7]; A.Valet.Trefle = tab[8]; A.Valet.Carreau = tab[9]; A.Valet.Coeur = tab[10]; A.Valet.Pique = tab[11]; A.Dix.Trefle = tab[12]; A.Dix.Carreau = tab[13]; A.Dix.Coeur = tab[14]; A.Dix.Pique = tab[15]; A.Neuf.Trefle = tab[16]; A.Neuf.Carreau = tab[17]; A.Neuf.Coeur = tab[18]; A.Neuf.Pique = tab[19]; A.Huit.Trefle = tab[20]; A.Huit.Carreau = tab[21]; A.Huit.Coeur = tab[22]; A.Huit.Pique = tab[23]; A.Sept.Trefle = tab[24]; A.Sept.Carreau = tab[25]; A.Sept.Coeur = tab[26]; A.Sept.Pique = tab[27]; A.As.Trefle = tab[28]; A.As.Carreau = tab[29]; A.As.Coeur = tab[30]; A.As.Pique = tab[31]; */ void error (int a) { switch(a) { case 1: fprintf(stderr, "La fonction reorganize à rencontré une erreur innatendue, le programme va fermer.\n"); exit(1); case 2: fprintf(stderr, "Erreur dans la distribution aléatoire des cartes, le programme va fermer.\n"); exit(2); default: exit(0); } } int Bataille_1erepasse ( Valeur A ) { Valeur B; Valeur Carte0 = valeur_carte(TirerCarte(A,0)); Valeur Carte1 = valeur_carte(TirerCarte(A,1)); if (Carte0.valeur > Carte1.valeur) { //Joueur 0 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 0 A.tab[Carte0.numero] = 2; A.tab[Carte1.numero] = 2; } else if ( Carte0.valeur < Carte1.valeur) { //Joueur 1 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 1 A.tab[Carte0.numero] = 3; A.tab[Carte1.numero] = 3; } else { //Bataille => Tirage jusqu'à épuisement des paquets jusqu'à qu'un joueur gagne B = Bataille_egalite(A); } } Valeur Bataille_egalite (Valeur A) { return A; } int TirerCarte (Valeur A, int joueur) { int a; int ok = 0; srand(time(NULL)); switch(joueur) { case 0: do { a = (rand() % 32); if (A.tab[a] == 0) { ok = 1; return a; } } while ( ok != 1 ); break; case 1: do { a = (rand() % 32); if (A.tab[a] == 1) { ok = 1; return a; } } while ( ok != 1 ); break; default: error(4); break; } }