rendered paste body#header =>
#ifndef NIANIANIA
#define NIANIANIA
typedef struct Valeur Valeur;
struct Valeur {
int tab[32];
unsigned int valeur;
char descriptif[6];
int numero;
int passe;
};
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);
int 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);
int Winner ( Valeur A, int gagnant );
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");
Bataille_1erepasse(A);
printf("on est ici");
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(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 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;
A = Bataille_autrepasses (A);
}
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;
A = Bataille_autrepasses (A);
}
else {
//Bataille => Tirage jusqu'à épuisement des paquets jusqu'à qu'un joueur gagne
A = Bataille_infinie(CarteA,CarteB,A);
}
}
Valeur Bataille_autrepasses (Valeur A) {
Valeur CarteA;
Valeur CarteB;
Valeur B;
int i,j;
A.passe +=4;
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;
A = TestPlusDeCarte(A);
A = Bataille_autrepasses(A);
}
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;
A = TestPlusDeCarte(A);
A = Bataille_autrepasses(A);
}
else {
//Bataille => Tirage jusqu'à épuisement des paquets jusqu'à qu'un joueur gagne
A = TestPlusDeCarte(A);
A = Bataille_infinie(CarteA,CarteB,A);
}
}
Valeur Bataille_infinie (Valeur CarteA, Valeur CarteB, Valeur A) {
Valeur Cartex;
Valeur Cartey;
int k=0;
int i;
printf("Bataille_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 );
system("Pause");
for (i=0;i<32;i++) {
if (A.tab[i] < 0) {
printf("Inf à 0\n");
}
}
A = TestPlusDeCarte(A);
A = Bataille_autrepasses(A);
}
Valeur TestPlusDeCarte (Valeur A) {
int a,b,c;
int encoredescartes0 = 0;
int encoredescartes1 = 0;
int gagnant = 0;
if (A.passe == 500) {
printf("Partie infinie\n");
system("Pause");
exit(0);
}
for (c=0;c<32;c++) {
if ( A.tab[c] % 2 == 0 ) { gagnant++; }
else gagnant--;
}
if ( gagnant == 32 ) {
printf("Joueur 1 gagne");
system("Pause");
exit(0);
}
if ( gagnant == -32 ) {
printf("Joueur 2 gagne");
system("Pause");
exit(0);
}
for (a=0;a<32;a++) {
if (A.tab[a] == 0) { encoredescartes0++; }
if (A.tab[a] == 1) { encoredescartes1++; }
}
printf("Cartes 0 : %i; Cartes 1 : %i", encoredescartes0, encoredescartes1);
while ( encoredescartes0 == 0 ) {
for (b=0;b<32;b++) {
for (a=0;a<32;a++) {
if (A.tab[a] == 0) { encoredescartes0++; }
}
printf("// %i. %i //",b,A.tab[b]);
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++; }
}
printf("// %i. %i // ",b,A.tab[b]);
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("TirerCarte\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;
}
}
int Winner ( Valeur A, int gagnant ) {
if ( gagnant == 31 ) {
printf("Joueur 1 gagne");
}
else {
printf("Joueur 2 gagne");
}
}