TP2 :´Ecriture d`une application en utilisant la POO

Transcription

TP2 :´Ecriture d`une application en utilisant la POO
TP2 : Écriture d’une application en utilisant la POO
[email protected]
R&T 2ème année
Vous avez à votre disposition (sur le répertoire commun) : le cours, les TDs,
et quelques documents provenant d’Internet. Vous devez prendre l’habitude de rechercher l’information dans ces documents et dans le sujet de TP. Chaque question
inutile1 sera notée et aura des conséquences sur la note du TP.
A la fin du TP, envoyez par mail les fichiers .java présents dans le répertoire
src du répertoire TP2 de votre répertoire de travail Eclipse. Si je ne reçoit pas ces
fichiers (et seulement cela), votre note sera nulle.
But du TP : Créer un programme basé sur plusieurs classes en utilisant l’héritage,
la composition,. . .
1 Jeu de cartes
Avant de commencer votre TP, créez un nouveau projet TP2 dans Eclipse.
1.1 Règle du jeu
Parmi les nombreux jeux de cartes, la bataille est l’un des jeux les plus simple.
Chaque joueur reçoit la moitié des cartes du paquet au début de la partie. Ensuite,
chaque joueur pose la carte qui est au dessus de son paquet. La carte la plus forte
gagne, en cas d’égalité, les deux cartes sont “perdues”.
1.2 Présentation de l’application
L’application sur laquelle vous allez travailler doit simuler une partie de cartes.
Pour simplifier le nombre de classe, le jeu de cartes est seulement composé de 4 as,
4 rois, 4 reines et 4 valets. Le diagramme UML de l’application est présenté dans la
figure 1.
1.3 Classe de test
La première classe à construire est une classe de test ayant simplement une
méthode main ce qui va vous permettre de pourvoir tester vos classes les unes
après les autres. Cette classe n’est pas représentée dans le diagramme UML.
1
qui a sa réponse de manière simple dans les fichiers fournis
1
1.4 La classe Carte
Créez la classe Carte, n’oubliez pas qu’elle est abstraite (cochez la case abstract
dans la boite de création de classe).
Implémentez le constructeur, l’entier reçu en paramètre doit être placé dans
l’attribut valeur, la chaı̂ne de caractères dans l’attribut Nom.
Pour implémenter la méthode getValeur, utilisez l’assistant : dans l’éditeur,
cliquez sur le bouton droit et choisissez le menu Source puis Generate Getters and
Setters et choisissez le bon élément.
La méthode toString La méthode toString est présente dans la classe Object
et donc dans toutes les classes grâce au mécanisme d’héritage. Par défaut elle
renvoie une chaı̂ne de caractères suivie d’une chaı̂ne hexadécimale (le hashcode
de l’objet. . .). Cette méthode est souvent surchargée pour modifier la chaı̂ne de
caractères renvoyée.
Cette méthode est appelée automatiquement à chaque fois qu’une chaı̂ne de
caractères est attendue à la place d’un objet. Par exemple,
MaClasse unObjet;
unObject = new MaClasse();
System.out.println(unObject);
/* est identique a */
System.out.println(unObject.toString());
Pour surcharger cette méthode dans la classe Carte, utilisez l’assistant de
génération de code : cliquez sur le bouton droit et choisissez le menu Source puis
Override/Implements Methods
Dans la classe Carte, la méthode toString doit renvoyer le nom de la carte
(Nom).
1.5 Les classes As, Roi, Dame et Valet
Ces quatre classes héritent de la classe Carte. Seules les valeurs des attributs
changent selon la classe. Le tableau ci-dessous donne pour chaque classe les valeurs d’initialisation :
Valeur
Classe Nom
As
As
10
Roi
5
Roi
Dame
Dame
3
Valet
2
Valet
Dans le constructeur de chaque classe fille, il suffit de placer le mot clé super()
pour appeler un constructeur de la classe mère. Si il y a des arguments dans les
parenthèses, le constructeur correspondant aux arguments et automatiquement
appelé.
Dans notre cas, il faut placer les arguments d’appel du constructeur (une chaı̂ne
de caractère et un entier dans les parenthèses) pour que les valeurs soient initialisées comme voulues.
2
Exemple pour la classe As :
public As(){
super("As",10);
}
1.6 La classe Joueur
Commencez par écrire tous les attributs puis les assesseurs (get. . .) à l’aide de
l’assistant.
Écrivez ensuite les déclarations de toutes les méthodes restantes.
Le constructeur doit initialiser l’attribut nom avec la chaı̂ne de caractères passée
en paramètre. Il doit aussi initialiser les attributs score et nombreDeCarte à 0. Il
doit aussi créer le tableau cartes pour qu’il contienne 8 objets de la classe Carte
(ou de l’un de ses classe fille).
La méthode AjouterAuScore, ajoute ( !) à l’attribut score la valeur reçue en
paramètre.
Pour remplir le tableau cartes, on utilise la méthode AjouterUneCarte. Cette
méthode reçoit un objet de type Carte qui est placé à la position nombreDeCartes
du tableau cartes, ensuite nombreDeCartes est incrimenté.
La dernière méthode la classe est PoserUneCarte. Si il y a encore des cartes
(nombreDeCartes supérieur à 0), une carte est renvoyée par la méthode et le
nombreDeCartes est diminuée de 1.
1.7 La classe Jeu
Commencez par écrire la classe Jeu, son attribut et les déclarations des deux
méthodes et du constructeur.
Le constructeur doit créer le tableau lesCartes pour qu’il puisse contenir 16
objets de la classe Carte (ou de l’un de ses classe fille). Ensuite, il doit créer 4 objets
de chacune des classes filles de Carte et les placer dans le tableau lesCartes.
La méthode Melanger utilise un générateur aléatoire (Random) pour réaliser 100
permutations dans le tableau lesCartes Pour chaque permutation, tirez deux valeurs aléatoires et permutez les deux cases correspondantes du tableau.
Cette méthode est privée, elle ne peut être appelée que dans la classe. Ajoutez une ligne dans le constructeur pour qu’elle soit appelée après la création des
différents éléments.
Toutes les cartes (le contenu du tableau lesCartes) sont distribuées entre les
deux joueurs par la méthode Distribuer. Cette méthode ajoute une carte sur deux
à chaque joueur en utilisant la méthode AjouterUneCarte de la classe Joueur.
1.8 La classe Partie
Comme précédemment, écrivez la classe à partir du diagramme UML, la déclaration
de ses méthodes et ses attributs.
Les constructeur de cette classe doit :
– Créer l’attribut unJeuDeCarte
3
– Créer les attributs JoueurA et JoueurB avec les chaı̂nes de caractères passées
en paramètres du constructeur.
– Une fois ces éléments crées, la méthode Distribuer de l’objet référencé par
l’attribut unJeuDeCarte est appelée avec les objets référencés par les attributs JoueurA et JoueurB comme paramètres d’appel. Les cartes sont ainsi
automatiquement distribuées entre les différents joueurs.
– L’attribut Tour est mis à 0.
La méthode FaireUnTour simule un tour de jeu. Elle demande une carte à
chaque joueur en utilisant la méthode PoserUneCarte. La valeur des deux cartes
est comparée, le joueur qui a la carte la plus forte gagne la manche, et son nombre
de points est augmenté de la somme des deux cartes. En cas d’ex-aequo, aucun
des joueurs ne gagne. L’affichage voulue doit être de la forme suivante “Roi contre
As Paul gagne 15 point(s)”, en cas d’égalité l’affichage est du type “As contre As”. A
la fin de la méthode, le nombre de tour (attribut Tour) est incrémenté.
La méthode FaireUnePartie appelle la méthode FaireUnTour tant que les deux
joueurs ont encore des cartes. Elle affiche le numéro de chaque tour. A la fin de la
partie, la méthode doit afficher un message du type “Pierre gagne, 30 à 10” ou
“Match nul” si les deux joueurs ont le même nombre de points.
A la fin du TP, la classe de test doit demander le nom des deux joueurs, créer un
objet de la classe Partie en utilisant ces nom et appeler la méthode FaireUnePartie.
4
Jeu
- lesCartes : Carte[]
+ Jeu()
- Melanger() :
+ Distribuer(Joueur premierJoueur, Joueur secondJoueur) :
1
Joueur
16
8
Carte
- Valeur : entier
- Nom : Chaine
+ Carte(chaine uneChaine,entier unEntier)
+ getValeur() : entier
+ toString() : Chaine
- nom : Chaine
- cartes : Carte[]
- score : entier
- nombreDeCartes : entier
+ Joueur(Chaine unNom)
+ getNom() : Chaine
+ getScore() : entier
+ getNombreDeCartes() : entier
+ AjouterAuScore(entier uneValeur) :
1 + AjouterUneCarte(Carte uneCarte) :
+ PoserUneCarte() : Carte
2
1
Partie
As
Roi
Dame
Valet
+ As()
+ Roi()
+ Dame()
+ Valet()
- unJeuDeCarte : Jeu
- JoueurA : Joueur
- JoueurB : Joueur
- Tour : entier
+ Partie(Chaine nomA, Chaine nomB)
+ FaireUnTour() :
+ FaireUnePartie() :
F IG . 1 – Schéma UML des différents éléments du programme
5

Documents pareils