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++.