Notre joueur de dés est plus professionnel. Il possède son propre paquet de dés et sa propre chaise! Celle-ci s'élève de 1cm lorsqu'il gagne et s'abaisse de 1cm lorsqu'il ne gagne pas.
La classe "chaise" a été légèrement modifiée. Elle se présente comme suit:
class chaise{ private: int PosCour; int PosMax; |
Contrairement à la version antérieure, j'ai effectué quelques modifications. D'abord, un constructeur à deux paramètres a été introduit afin de pouvoir initialiser également la position courante de la chaise dès sa création. Ensuite, la fonction "beep" a été intégrée à la classe. Comme cette fonction n'était utilisée que par la chaise, je l'ai donc placée dans la partie privée de la classe. Finalement, j'ai défini les fonctions à l'extérieur de la chaise. Cela nous facilitera la tâche lorsque nous construirons une librairie. |
chaise::chaise(void){ PosCour = 0; PosMax = 20; } chaise::chaise(int initMax){ PosCour = 0; PosMax = initMax; } |
La définition des trois constructeurs. |
void chaise::monter(void){ PosCour = (PosCour + 1 > PosMax) ? beep(), PosMax : PosCour + 1; } |
La définition de la fonction "monter". |
void chaise::descendre(void){ PosCour = (PosCour - 1 < 0) ? 0 : PosCour - 1; } |
La définition de la fonction "descendre". |
int chaise::getPosition(void){ return PosCour; } |
La définition de la fonction "getPosition" afin de pouvoir consulter la position actuelle de la chaise. |
void chaise::beep(void){ sound(135); delay(500); nosound(); } |
La fonction utilitaire effectuant un "beep";
elle appartient désormais à la chaise. chaise F; L'appel suivant est-il permis par le compilateur ? F.beep(); |
La classe "PaquetDes" contient évidemment deux dés.
class PaquetDes { private: int valDeVert, valDeRouge; public: PaquetDes(void); PaquetDes(int v1, int v2); int rouge(void); int vert(void); void lancer(void); }; |
Deux dés. Deux constructeurs. Le second permet de créer un paquet de dés avec des valeurs spécifiques choisies par le programmeur-client. Deux fonctions de consultation (rouge et vert) et une fonction permettant de lancer les deux dés. |
PaquetDes::PaquetDes(void) { valDeVert = valDeRouge = 6; } PaquetDes::PaquetDes(int v1, int v2) { valDeVert = v1; valDeRouge = v2; } |
La définition des deux constructeurs. |
int PaquetDes::rouge(void) { return valDeRouge; } int PaquetDes::vert(void) { return valDeVert; } |
Les fonctions de consultation. |
void PaquetDes::lancer(void){ valDeVert = aleaMinMax(1,6); valDeRouge = aleaMinMax(1,6); } |
La fonction permettant de lancer les deux dés. On notera que la fonction "aleaMinMax" aurait pu également appartenir à la partie privée de la classe. |
Quand à la classe "joueur", la voici:
class Joueur { private: PaquetDes Des; chaise Place; long NbGains; public: Joueur(void); void joue(void); void afficher(void); }; |
Le joueur comprend un paquet de dés, une place (une chaise). Il cumule lui-même ses gains. La fonction "joue" permet de le faire jouer et la fonction "afficher" affiche son état actuel. |
Joueur::Joueur(void) : Place(10, 40), Des(3, 5), NbGains(20) { } |
La définition du constructeur. NOTEZ la syntaxe d'appel des constructeurs afin d'initialiser chaque champ. |
void Joueur::joue(void){ Des.lancer(); if (Des.rouge() == Des.vert()) { Place.monter(); NbGains++; } else Place.descendre(); } |
La fonction "joue". |
void Joueur::afficher(void) { printf("\nHauteur de la chaise = %d.", Place.getPosition()); printf("\nValeur des des du joueur = %d et %d.", Des.rouge(), Des.vert()); printf("\nNombre de gains = %d.\n", NbGains); } |
La fonction d'affichage. |
|
Voici le petit "main" permettant de tester tout ça! NOUS DEVENONS MAINTENANT UN PROGRAMMEUR-CLIENT!
void main(void){ |
|
Joueur Denis; |
Le constructeur vide de la classe "Joueur" sera appelé. |
srand(time(NULL)); clrscr(); |
Initialisation du générateur de nombres aléatoires et effacement de l'écran. |
Denis.afficher(); |
Le joueur tel qu'il a été créé. |
|
On fait jouer le joueur une petite dizaine de fois. |
getch(); } |
Le petit programme "joueur.cpp" vous permettra de tester le joueur de dés! Voici le code commenté. Récupéréz le programme et essayez-le en Turbo C++.