Vous êtes sur la page 1sur 3

MINI-PROJET : PILE & FILE

SIMULATION DU JEU DE CARTE DE LA BATAILLE


Matière : ATELIER DE PROGRAMMATION C – NIVEAU 2 Enseignant : A. DAHMANE
Classe : TI 1.5 Date : Mai 2023

On distribue les 52 cartes aux 2 joueurs qui les rassemblent en paquet, face cachée, devant eux. On appellera
ces deux paquets les jeux des joueurs. Le roi est la plus forte carte, puis viennent la dame, le valet, le 10, 9, ...3, 2,
As. Chaque joueur tire la carte du dessus de son jeu et la pose sur la table, face découverte, à côté de son jeu, sur
une pile : cette pile sera la pile de bataille. Celui qui a la carte la plus forte ramasse les 2 cartes.
Lorsque deux joueurs posent deux cartes de même valeur, il y a "bataille". Les joueurs tirent la carte suivante
de leur jeu et la posent, face cachée, sur la carte précédente de la pile de bataille. Puis ils tirent une deuxième carte
de leur jeu qu'ils posent cette fois-ci face découverte sur cette pile de bataille. Il y a maintenant 3 cartes sur la pile
de bataille. C’est la dernière carte découverte qui départagera les joueurs. Si ces cartes sont aussi identiques, il y a
à nouveau bataille et on recommence jusqu’à ce que l’un des deux joueurs gagne. Lorsqu’un des deux joueurs
gagne, il remporte toutes les cartes des deux piles de bataille (la sienne et celle de son adversaire) et il met les
cartes de ces 2 piles sous son jeu.
Lorsqu’un des deux joueurs n’a pas assez de cartes pour continuer une bataille en cours, c’est la notion de famine.
Il a perdu.
Pour simuler le jeu, les structures de données utilisées sont des files et des piles. Le jeu de chaque joueur peut
être représenté par une file. Au début du tour, le joueur prend la carte du dessus (défiler) et s’il gagne, il prend les
cartes jouées dans la pile de bataille et les ajoute par-dessous (enfiler). Les piles de bataille sont des piles, car on
ajoute toujours sur le sommet de la pile de bataille et on regarde et compare la carte du sommet. Quand on gagne,
on reprend les cartes une par une à partir du sommet de la pile de bataille (dépiler) et on les ajoute au jeu du joueur
gagnant en les enfilant.

QUESTION 1 : DEFINITION DE LA STRUCTURE DE CARTE


Une carte est donc définie dans notre problème par une valeur, une couleur (trèfle, carreau, cœur, pique) et sa
visibilité (retournée et cachée ou visible)
a. Définir la structure de donnée CARTE permettant de représenter et manipuler les cartes.
b. Ecrire une fonction permettant d’afficher une carte en mode texte. Cette fonction affichera par exemple : « As
de carreau, face cachée. »
Son prototype est : void affiche(CARTE c1);
c. Ecrire une fonction permettant de comparer 2 cartes. Cette fonction retourne un nombre négatif si la première
carte est plus petite que la deuxième, 0 si elles sont égales, un nombre positif si la première est plus grande que
la première.
Son prototype est : int compare(CARTE c1, CARTE c2);

QUESTION 2 : DEFINITION ET GESTION DES PILES


Avec une pile, on ajoute et on enlève une carte en début de pile uniquement.
a. Définir la structure de donnée PILECARTE permettant de représenter les piles de cartes en utilisant des
structures chaînées.
b. Créer une pile vide : PILECARTE creer_pile();
c. Tester si une pile est vide : int pile_vide(PILECARTE p);
d. Empiler (Ajouter) une CARTE ‘a’ en début de pile ‘p’ PILECARTE empiler(CARTE a, PILECARTE p);
e. Renvoie la première CARTE de la pile ‘p’. La fonction renvoie la première CARTE et ne supprime pas cette CARTE
de la pile : CARTE sommet(PILECARTE p);
f. Dépiler la première CARTE de la pile ‘*p’. La fonction renvoie la première CARTE et supprime cette CARTE de la
pile : CARTE depiler(PILECARTE * p);

Mini-Projet C – Niveau 2 1/2


QUESTION 3 : DEFINITION ET GESTION DES FILES
Dans une file, on ajoute des éléments par la queue et on retire des éléments par la tête. Pour représenter une file
vous utiliserez une structure contenant un pointeur de tête et un pointeur de queue sur une liste chaînée ;
a. Définir la structure de donnée FILECARTE permettant de représenter les files de cartes
b. Créer une file vide : FILECARTE creer_file(void);
c. Tester si une file est vide : int file_vide(FILECARTE L);
d. Enfiler (Ajouter) une CARTE ‘e’ en fin de file ‘f’ : FILECARTE enfiler(CARTE e, FILECARTE f);
e. Défiler la première CARTE de la file ‘*af’. La fonction retourne la première CARTE et supprime cette CARTE de la
file : CARTE defiler(FILECARTE* af);

QUESTION 4 : UN TOUR DE JEU


Le rôle de cette fonction est de simuler un tour de jeu entre les joueurs, donc :
a. Créer les 2 piles de bataille
b. Tirer une carte du jeu du joueur 1 et la placer sur sa pile de bataille, face découverte
c. Tirer une carte du jeu du joueur 2 et la placer sur sa pile de bataille, face découverte
d. Tant que les cartes des sommets des piles de bataille sont égales (i.e. il y a bataille)
▪ Tirer une carte du jeu du joueur 1 et la placer sur sa pile de bataille, face cachée
▪ Tirer une carte du jeu du joueur 2 et la placer sur sa pile de bataille, face cachée
▪ Tirer une carte du jeu du joueur 1 et la placer sur sa pile de bataille, face découverte
▪ Tirer une carte du jeu du joueur 2 et la placer sur sa pile de bataille, face découverte
e. Ajouter les cartes des deux piles de bataille au jeu du vainqueur du tour (c’est celui qui possède la plus forte
carte sur sa pile de bataille).
Remarque : si un des joueurs ne peut pas jouer (i.e. il n’a plus de cartes dans son jeu pendant une bataille), il a
alors perdu. La fonction renverra alors le numéro du joueur qui a gagné.
f. Quel est le prototype de cette fonction ?
g. Ecrire en C une fonction qui simule un tour de jeu de la bataille. Cette fonction retourne 0 si aucun joueur n’a
gagné, 1 si le premier joueur a gagné, 2 si le deuxième joueur a gagné.

QUESTION 5 : PROGRAMME PRINCIPAL


Ecrire en C le programme principal effectuant la simulation du jeu de bataille. On commence par distribuer toutes
les cartes, puis on effectue des « tours de jeu » tant qu’aucun des joueurs n’a de jeu vide. On affiche ensuite le
gagnant.
Remarque : On supposera que la fonction de distribution des cartes existe. Elle remplit les jeux des joueurs avec
les cartes.

QUESTION 6 : DISTRIBUTION
Ecrire en C la fonction de distribution des cartes utilisée ci-dessus. Toutes les cartes doivent être distribuées une
fois et une seule. On peut utiliser un tableau de CARTE, contenant initialement toutes les cartes dans l’ordre trèfle
carreau cœur pique. On tire un nombre X au hasard entre 0 et N=51. On donne la carte en position X au premier
joueur. On met alors la carte en position N (=51) à la position X. Et on recommence, mais en utilisant N-1 comme
nombre de carte à distribuer et en donnant une carte au deuxième joueur.
Remarque : la fonction rand() retourne un nombre entier aléatoire. rand()%N permet donc d’obtenir un nombre
entier aléatoire compris entre 0 et N-1.

Bon travail !

Mini-Projet C – Niveau 2 2/2


MINI-PROJET : PILE & FILE
SIMULATION DU JEU DE CARTES DE LA BATAILLE

CRITERES D’EVALUATION
Matière : ATELIER DE PROGRAMMATION C – NIVEAU 2 Enseignant : ADEL DAHMANE
Classe : TI 1.5 Date : Mai 2023

CRITERE 1 : DEFINITION ET GESTION DES PILES [3 PTS]


▪ Fonctions demandées : creer_pile, pile_vide, empiler, sommet et dépiler

CRITERE 2 : DEFINITION ET GESTION DES FILES [3 PTS]


▪ Fonctions demandées : creer_file, file_vide, enfiler et defiler

CRITERE 3 : DISTRIBUTION ALEATOIRE DES CARTES [3 PTS]


▪ Fonctions demandées : remplissage de deux files F1 et F2

CRITERE 4 : FONCTIONNEMENT D’UN TOUR DU JEU DES CARTES [6 PTS]


Fonctions demandées :
▪ Déroulement (tirage de deux cartes, utilisation de deux piles et récupération des cartes -
se trouvant dans les deux piles - dans la file du joueur gagnant).
▪ Affichage du résultat (0 pour jeu encours, 1 si le premier joueur a gagné et 2 pour le 2ème).

CRITERE 5 : FONCTIONNEMENT DU PROGRAMME PRINCIPAL [5 PTS]


Fonctions demandées :
▪ Remplissage et affichage initial de deux files F1 et F2.
▪ Simulation de tout le jeu de bataille :
- Affichage provisoire de chaque tour du jeu
- Affichage du résultat final du jeu (1 ou 2).

CRITERE 6 (BONUS) : PERFECTIONNEMENT ET AMELIORATION [2 PTS]


▪ Affichage clair et bien structuré
▪ Identification personnalisée de deux joueurs (noms)
▪ Tirage 100% aléatoire à chaque lancement du jeu.
▪ Possibilité d’interrompre ou d’annuler le jeu en cours de la bataille.
▪ …

Mini-Projet C (Critères d’évaluation)

Vous aimerez peut-être aussi