rendered paste body#ifndef NIANIANIA#define NIANIANIAtypedef struct Valeur Valeur;struct Valeur { int tab[32]; unsigned int valeur; char descriptif[6]; int numero; int passe; int winner;};Valeur init (Valeur A);int integrity (Valeur A);Valeur reorganize (Valeur A, int state, int amplitude);Valeur valeur_carte ( int i, Valeur A );void error (int a);Valeur Bataille_1erepasse ( Valeur A );int TirerCarte (Valeur A, int joueur);Valeur Bataille_autrepasses (Valeur A );Valeur Bataille_infinie (Valeur Carte0, Valeur Carte1, Valeur A);Valeur TestPlusDeCarte (Valeur A);Valeur Bataille_egalite (Valeur A);#endif#include <stdio.h>#include <stdlib.h>#include "headers.h"#include <time.h>int main () { int a; Valeur monJeu; Valeur A; A = init(monJeu); for (a=0;a<32;a++) { printf("%i. %i\n", a, A.tab[a]); } system("Pause"); A.winner = 0; A = Bataille_1erepasse(A); while (A.winner != (1|2)) { A = Bataille_1erepasse(A); } if (A.winner == 1) { printf("Joueur1 gagne"); system("Pause"); } if (A.winner == 2) { printf("Joueur2 gagne"); system("Pause"); } printf("Gagnant : %i",A.winner); system("Pause"); printf("on est ici"); return 0;}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(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); }}void error (int a) { switch(a) { case 1: fprintf(stderr, "La fonction reorganize à rencontré une erreur innatendue, le programme va fermer.\n"); system("Pause"); exit(1); case 2: fprintf(stderr, "Erreur dans la distribution aléatoire des cartes, le programme va fermer.\n"); system("Pause"); exit(2); default: system("Pause"); exit(0); }}Valeur Bataille_1erepasse ( Valeur A ) { Valeur B; Valeur CarteA; Valeur CarteB; CarteA = valeur_carte(TirerCarte(A,0),A); CarteB = valeur_carte(TirerCarte(A,1),A); A.passe = 2; printf("Bataille_1erepasse"); if (CarteA.valeur > CarteB.valeur) { //Joueur 0 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 0 A.tab[CarteA.numero] = A.passe; A.tab[CarteB.numero] = A.passe+2; B = Bataille_autrepasses (A); if (B.winner != (0|1|2)) { return B; } } else if ( CarteA.valeur < CarteB.valeur) { //Joueur 1 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 1 A.tab[CarteA.numero] = A.passe + 1; A.tab[CarteB.numero] = A.passe + 3; B = Bataille_autrepasses (A); if (B.winner != (0|1|2)) { return B; } } else { //Bataille => Tirage jusqu'à épuisement des paquets jusqu'à qu'un joueur gagne B = Bataille_infinie(CarteA,CarteB,A); if (B.winner != (0|1|2)) { return B; } } return B;}Valeur Bataille_autrepasses (Valeur A) { Valeur CarteA; Valeur CarteB; Valeur B; int i,j; A.passe +=4; if (A.passe > 1000) { A.passe = 2; } CarteA = valeur_carte(TirerCarte(A,0),A); CarteB = valeur_carte(TirerCarte(A,1),A); printf("\n Bataille_autrepasses\n"); if (CarteA.valeur > CarteB.valeur) { //Joueur 0 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 0 A.tab[CarteA.numero] = A.passe; A.tab[CarteB.numero] = A.passe+2; B = TestPlusDeCarte(A); if (B.winner != (0|1|2)) { return B; } B = Bataille_autrepasses(B); if (B.winner != (0|1|2)) { return B; } } else if ( CarteA.valeur < CarteB.valeur) { //Joueur 1 Gagne => Les Deux cartes sont mises en fin de paquet de joueur 1 A.tab[CarteA.numero] = A.passe + 1; A.tab[CarteB.numero] = A.passe + 3; B = TestPlusDeCarte(A); if (B.winner != (0|1|2)) { return B; } B = Bataille_autrepasses(B); if (B.winner != (0|1|2)) { return B; } } else { //Bataille => Tirage jusqu'à épuisement des paquets jusqu'à qu'un joueur gagne B = TestPlusDeCarte(A); if (B.winner != (0|1|2)) { return B; } B = Bataille_infinie(CarteA,CarteB,B); if (B.winner != (0|1|2)) { return B; } } return B;}Valeur Bataille_infinie (Valeur CarteA, Valeur CarteB, Valeur A) { Valeur Cartex; Valeur B; Valeur Cartey; int k=0; int i; printf("\nBataille_infinie"); do { A.tab[CarteA.numero] = -1; A.tab[CarteB.numero] = -1; Cartex = valeur_carte(TirerCarte(A,0),A); Cartey = valeur_carte(TirerCarte(A,1),A); if (Cartex.valeur == Cartey.valeur) { A.tab[Cartex.numero] = -1; A.tab[Cartey.numero] = -1; } else if (Cartex.valeur > Cartey.valeur) { for (i=0;i<32;i++) { if (A.tab[i] == -1) { A.tab[i] = A.passe + k; k++; k++; } } } else { for (i=0;i<32;i++) { if (A.tab[i] == -1) { A.tab[i] = A.passe + 1 + k; k++; k++; } } } } while ( Cartex.valeur == Cartey.valeur ); for (i=0;i<32;i++) { if (A.tab[i] < 0) { printf("Inf à 0\n"); } } B = TestPlusDeCarte(A); if (B.winner != (0|1|2)) { return B; } B = Bataille_autrepasses(B);}Valeur TestPlusDeCarte (Valeur A) { int a,b,c; int encoredescartes0 = 0; int encoredescartes1 = 0; int gagnant = 0; printf("%i",A.passe); if ((A.passe-2) / 4 == 100) { A.winner = 0; } for (c=0;c<32;c++) { if ( A.tab[c] % 2 == 0 ) { gagnant++; } else gagnant--; } printf("%i",gagnant); if ( gagnant == 32 ) { A.winner = 1; for (c=0;c<32;c++) { printf("%i. %i \n",c,A.tab[c]); printf("Gagnant : %i \n",gagnant); } printf("Joueur 1 gagne"); system("Pause"); return A; } if ( gagnant == -32 ) { A.winner = 2; for (c=0;c<32;c++) { printf("%i. %i \n",c,A.tab[c]); printf("Gagnant : %i \n",gagnant); } printf("Joueur 2 gagne"); system("Pause"); return A; } for (a=0;a<32;a++) { if (A.tab[a] == 0) { encoredescartes0++; } if (A.tab[a] == 1) { encoredescartes1++; } } while ( encoredescartes0 == 0 ) { for (b=0;b<32;b++) { for (a=0;a<32;a++) { if (A.tab[a] == 0) { encoredescartes0++; } } if (A.tab[b] % 2 == 0) { if (A.tab[b] > 1 ) { A.tab[b] -= 2; } } } } while ( encoredescartes1 == 0 ) { for (b=0;b<32;b++) { for (a=0;a<32;a++) { if (A.tab[a] == 1) { encoredescartes1++; } } if (A.tab[b] % 2 == 1 ) { if (A.tab[b] > 2) { A.tab[b] -= 2; } } } } return A;}int TirerCarte (Valeur A, int joueur) { int a; int ok = 0;A = TestPlusDeCarte(A); srand(time(NULL)); printf("\nTirerCarte\n"); 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; }}