📋 Énoncé : Implémentation d'un Jeu de Cartes en C

Ce document décrit les exigences pour la création d'un système de gestion de cartes à jouer en C, incluant la définition des structures de données et l'implémentation des fonctions de manipulation.

Règle générale de notation :
0.5 point sera enlevé pour chaque fonction implémentée mais non testée dans la fonction main.


Partie 1 : Définition des Types (Fichier cards.h)

1.1 Contexte du Projet

On veut définir des types pour traiter des cartes à jouer. Nos cartes à jouer sont soit des cartes ayant une valeur numérique (de 1 à 10) et une couleur (pique, coeur, carreau ou treffle), soit des cartes nommées (par exemple "jocker").

1.2 Spécifications des Types

1.3 Critères de notation (Types)


Partie 2 : Implémentation des Fonctions (Fichier cards.c)

Vous devez implémenter les fonctions suivantes (dont les prototypes sont dans cards.h) en respectant les critères de notation ci-dessous.

2.1 Fonctions de Création de Cartes (4 points)

card* createclassiccard(int value, color col);
card* createnamedcard(const char* name);

2.2 Création de Deck (2 points)

deck* createonecarddeck(card* c);

2.3 Ajout de Carte (4 points)

void addcardbefore(clist* l, card* newcard);

2.4 Libération de Mémoire (3 points)

void freedeck(deck* d);

2.5 Retrait de Carte (3 points)

card* removecard(clist* l);

2.6 Impression du Deck (3 points)

void fprintdeck (const char* filename, deck* d);

2.7 Distribution (Bonus)

clist** distribute(int nbplayers, deck* d);

Partie 3 : Tests (Fonction main)

La fonction main doit être utilisée pour tester toutes les fonctions implémentées (sauf distribute qui est bonus).

Rappel : 0.5 point sera enlevé pour chaque fonction non testée.

Exemple de main de test fourni dans cards.c :

int main(void){
    card* c1 = createclassiccard(6,HEARTS);
    card* c2 = createclassiccard(2,SPADES);
    card* c3 = createclassiccard(3,CLUBS);
    card* c4 = createnamedcard("jocker");
    card* c5 = createnamedcard("rulescard");
    deck* d = createonecarddeck(c1);
    addcardbefore(d->start, c2);
    addcardbefore(d->start, c3);
    addcardbefore(d->start->next, c4);
    addcardbefore(d->start, c5);
    removecard(d->start);
    fprintdeck("foo1.txt",d);
    free(distribute(2,d));
    fprintdeck("foo2.txt",d);
    freedeck(d);


    return EXIT_SUCCESS;
}