Black Jack - Julien VILLEMEJANE

Transcription

Black Jack - Julien VILLEMEJANE
Black Jack
Dept GEII
II1
Année universitaire 2012-2013
J. VILLEMEJANE - [email protected]
Principe
D’une manière simplifiée, on peut considérer une partie de black-jack de la manière suivante :
– La banque (ordinateur) et le joueur reçoivent chacun deux cartes, face visible.
– Le principe est d’obtenir, avec ses cartes, le score de 21 points, sans les dépasser. La valeur des cartes est la
suivante :
– cartes de 2 à 10 : valeur nominale de la carte ;
– cartes figure (valet, dame, roi) : 10 points ;
– cartes as : 1 ou 11 points au choix.
– Un «Black-Jack» est obtenu en faisant 21 points avec deux cartes.
– Le joueur peut décider de demander autant de cartes supplémentaires qu’il le souhaite. S’il dépasse 21 points, il
perd ! !
– Quand le joueur ne veut plus de cartes supplémentaires, l’ordinateur peut en demander.
– Celui qui a le plus de points, sans dépasser 21 points, remporte la partie.
Le but de ce TP est de simuler le déroulement d’une partie. On commencera par décrire une carte, un jeu de cartes et
enfin la partie de cartes.
Cartes
Les cartes possèdent une couleur (coeur, pique, carreau, trèfle) et une valeur (2 à 10, valet, dame, roi, as).
Q.1 Déclarer un nouveau type de donnée t_carte qui est une structure composée :
– d’un entier indiquant la valeur de la carte (1 pour as, 2 pour 2, ... 11 pour valet, 12 pour dame et 13 pour roi) ;
– d’un entier indiquant la couleur (1 pour coeur, 2 pour pique, 3 pour carreau et 4 pour trèfle).
Q.2 Ecrire une fonction acceptant une carte en paramètre d’entrée et qui affiche la carte de la façon suivante :
– un espace ;
– la valeur de la carte sur 2 caractères ("_A" pour l’as, "_R" pour le roi, ...) ;
– la couleur de la carte. Pour cela on utilisera des caractères spécifiques :
– coeur : ’\3’ (♥) ;
– pique : ’\6’ (♠) ;
– carreau : ’\4’ (♦) ;
– trèfle : ’\5’ (♣) ;
– un espace.
La fonction affichera par exemple : "__2♠_", "__R♥_", "_10♣_".
Q.3
Tester cette fonction dans un programme principal en créant 4 cartes différentes : 2♠, R♥, 10♣ et A♦.
Jeu de cartes
On va créer un jeu de cartes basé sur la structure précédente.
Q.4 Déclarer un nouveau type de données t_jeu qui est un tableau de 52 cartes (typedef t_carte t_jeu[52];).
Q.5 Ecrire une fonction qui accepte un jeu de cartes en paramètre et qui le remplit (avec les 52 cartes possibles).
L’ordre de remplissage importe peu.
Q.6
Ecrire une fonction qui accepte un jeu de cartes en paramètre et l’affiche (affichage à la suite des 52 cartes).
Pour mélanger les cartes, on se propose de permuter un grand nombre de fois les cartes 2 à 2 de manière aléatoire.
Pour obtenir un numéro de carte aléatoire, on pourra utiliser la fonction rand() définie dans stdlib.h. Cette fonction
renvoie un entier long aléatoire compris entre 0 et RAND_MAX (231 − 1).
Cette fonction doit etre initialisée auparavant (dans la première partie du programme principal) par la commande :
srand(time(NULL));. La fonction time() est définie dans time.h.
IUT Créteil - GEII - II1
Black Jack
Q.7 Ecrire une fonction qui accepte un jeu de cartes et un entier (nombre de permutations) en paramètre, et qui
permute autant de fois que demandé deux cartes tirées au hasard dans le jeu.
Q.8 Tester vos différentes fonctions (dans le programme principal) en :
– créant un jeu de cartes ;
– le remplissant ;
– l’affichant ;
– le mélangeant ;
– l’affichant à nouveau pour vérifier que le jeu est bien mélangé.
Début de partie
Une partie de Black-Jack peut être modélisée par une pioche, la main de l’ordinateur et la main du joueur.
La pioche (qu’on appellera pioche) est représentée par un jeu de cartes et la position de la prochaine carte à distribuer
(qu’on appellera pos_pioche - de type entier).
Les mains de l’ordinateur et du joueur sont aussi représentées par un jeu de cartes mais vide au départ (qu’on
appellera ordi et joueur) et le nombre de cartes qu’elles contiennent (nbc_ordi et nbc_joueur).
Distribuer une carte de la pioche vers la main du joueur (ou de l’ordinateur) revient donc à copier la carte d’indice
pos_pioche du tableau pioche dans la carte d’indice nbc_joueur du tableau joueur et à incrémenter les deux indices
de position.
Q.9 Ecrire une fonction qui accepte 4 arguments :
– un jeu de cartes pour la pioche ;
– un entier pour la position de la pioche ;
– un jeu de cartes pour une des mains ;
– un entier pour le nombre de carte de cette main ;
et qui distribue une carte de la pioche dans la main.
Q.10 Ecrire une fonction qui affiche les cartes contenues dans une main. Cette fonction prendra comme paramètres
un jeu de cartes et un entier.
Q.11 Tester ces deux fonctions (dans un programme principal) en :
– créant une pioche, en la remplissant et en la mélangeant (voir partie jeu de cartes) ;
– affichant la pioche ;
– distribuant successivement une carte au joueur, une carte à l’ordinateur, puis de nouveau une carte au joueur et une
à l’ordinateur (début d’une partie) ;
– affichant la main des deux joueurs (précédés de leur nom).
Calcul des scores
Q.12 Ecrire une fonction qui calcule la meilleure valeur d’une main donnée. Il s’agit donc d’additionner les valeurs
de toutes les cartes d’une main. (Attention à la valeur des as qui peuvent valoir 1 ou 11 points).
Q.13
Tester cette fonction sur les mains des deux joueurs.
–2–
IUT Créteil - GEII - II1
Black Jack
Partie complète (Bonus)
Il faut maintenant distribuer au joueur autant de cartes qu’il le désire. Pour cela, on propose l’algorithme suivant :
Distribution d’une carte pour l’ordinateur
Distribution d’une carte pour le joueur
Distribution d’une carte pour l’ordinateur
Distribution d’une carte pour le joueur
Affichage des deux mains
Demander si le joueur veut une nouvelle carte
TANT QUE reponse = oui (ou O) ET valeur du jeu < 21
FAIRE
distribution d’une carte pour le joueur
SI valeur du jeu < 21 ALORS
demander si le joueur veut une nouvelle carte
FIN SI
FIN FAIRE
Q.B1
Ecrire le programme correspondant.
Stratégie de l’ordinateur (Bonus)
Pour l’instant, seul le joueur peut piocher de nouvelles cartes. Il reste donc à présent à écrire la «stratégie» de l’ordinateur.
En réalité, dans les casino, le croupier (la banque) joue avec une règle simple résumée par «La banque tire à 16 et
reste à 17». Ainsi tant que le jeu de l’ordinateur est inférieur à 16, il reprend une carte. Dès qu’il dépasse 17 (inclus), il
s’arrête.
Q.B2
Ecrire la stratégie de jeu de l’ordinateur à la suite du programme précédent. Indiquer le vainqueur.
Tout ajout de fonctions supplémentaires ou améliorations à l’application finale est le bienvenu...
–3–

Documents pareils