1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98
| #include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
typedef struct {
unsigned short valeur;
char *couleur;
char *nom;
} t_carte;
typedef struct {
t_carte carte[52];
size_t nb;
} t_jeu;
int carteComp(const t_carte* const, const t_carte* const);
size_t carteInJeu(const t_carte* const, const t_jeu* const);
void carteRandom(t_carte* const);
void jeuInit(t_jeu* const);
void jeuCreate(t_jeu* const);
void jeuAffich(const t_jeu* const);
t_jeu *jeuSave(const t_jeu* const, const char* const);
int carteComp(const t_carte* const x, const t_carte* const y) {
int r;
r=strcmp(x->couleur, y->couleur);
if (r != 0) return r;
return x->valeur - y->valeur;
}
size_t carteInJeu(const t_carte* const carte, const t_jeu* const jeu) {
const t_carte *pt;
size_t i;
for (i=1, pt=jeu->carte; i <= jeu->nb; i++, pt++) {
if (carteComp(carte, pt) == 0) return i;
}
return 0;
}
void carteRandom(t_carte* const carte) {
static char *couleur[]={"trefle", "carreau", "coeur", "pique"};
static char *nom[]={"deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf", "dix", "valet", "dame", "roi", "as"};
//carte->couleur=couleur[rand() * 4 / RAND_MAX];
//carte->valeur=rand() * 13 / RAND_MAX;
carte->couleur=couleur[rand() % 4];
carte->valeur=rand() % 13;
carte->nom=nom[carte->valeur];
}
void jeuInit(t_jeu* const jeu) {
jeu->nb=0;
}
void jeuCreate(t_jeu* const jeu) {
jeuInit(jeu);
size_t i;
t_carte *pt;
for (i=0, pt=jeu->carte; i < 52; i++, pt++) {
do {
carteRandom(pt);
} while (carteInJeu(pt, jeu) != 0);
jeu->nb++;
}
}
void jeuAffich(const t_jeu* const jeu) {
const t_carte *pt;
size_t i;
printf("Jeu: nb=%lu\n", jeu->nb);
for (i=1, pt=jeu->carte; i <= jeu->nb; i++, pt++)
printf("Carte [%lu/%lu]: (%hu) %s de %s\n", i, jeu->nb, pt->valeur+1, pt->nom, pt->couleur);
}
t_jeu *jeuSave(const t_jeu* const jeu, const char* const fic) {
FILE *fp=fopen(fic, "w");
if (fp == NULL) return NULL;
const t_carte *pt;
size_t i;
for (i=0, pt=jeu->carte; i < jeu->nb; i++, pt++)
fprintf(fp, "%s de %s\n", pt->nom, pt->couleur);
fclose(fp);
return (t_jeu*)jeu;
}
int main() {
t_jeu jeu;
srand(time(NULL));
jeuCreate(&jeu);
jeuAffich(&jeu);
jeuSave(&jeu, "toto");
} |
Partager