All pastes #825632 Raw Edit

Unnamed

public c v1 · immutable
#825632 ·published 2007-12-20 18:31 UTC
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;	}}