rendered paste bodyheaders.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 <stdio.h>
#include <stdlib.h>
#include "headers.h"
#include <time.h>
/*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;
}
}