All pastes #825330 Raw Edit

Stuff

public text v1 · immutable
#825330 ·published 2007-12-20 14:25 UTC
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");
	}
}