CSC3101 – Contrôle Final 1 – Année 2018/2019
- de gérer les cas d'erreurs,
- de donner la visibilité des champs, méthodes et constructeurs (en particulier, on supposera tous les champs publics),
- d'indiquer les packages et les imports,
- d'indiquer quelles exceptions peuvent être levées par une méthode dans sa signature (c'est-à-dire sa déclaration).
Les cases et la grille (5 points)
1,5 point
- d'initialiser le terrain et la ville à null,
- et d'initialiser la collection d'unités (c'est-à-dire, d'allouer une collection d'unités et d'affecter la référence vers cette collection au champs représentant les unités se trouvant dans la case).
1 point
2,5 points
- Des champs lignes et colonnes de type entier donnant la taille de la carte,
- Un champs grille représentant la grille. Techniquement, ce champs est un tableau à deux dimensions : ce champs référence un tableau de lignes éléments, où chaque élément est lui-même une référence vers un tableau de colonnes références vers des cases.
La classe Plateau doit aussi posséder un constructeur permettant d'allouer et d'initialiser l'ensemble de la grille. Donnez le code complet de la classe Plateau, en sachant que le constructeur de Plateau doit affecter une référence vers un nouvelle instance de la classe Case à chaque case de la grille.
Les unités (5 points)
On commence par concevoir la classe Unité. Cette classe possède un champ de type Joueur indiquant à quel joueur appartient l'unité et une champ Image permettant d'afficher l'unité. On suppose les classes Joueur et Image fournies, et en particulier, on suppose que la classe Image offre une méthode void affiche(int x, int y) permettant d'afficher l'image de l'unité en (x, y).
Outre les champs, la classe Unité possède aussi trois méthodes :
- un constructeur permettant d'initialiser les champs Joueur et Image de la classe,
- une méthode void affiche(int x, int y) permettant d'afficher l'image en (x, y),
- une méthode boolean peutEntrer(Case case) permettant de savoir si l'unité peut entrer dans la case case.
0,5 points
2 points
2,5 points
- le constructeur de la classe Combattant prend en argument un joueur et une image,
- une unité combattante ne peut entrer dans une case que si cette dernière ne contient aucune autre unité combattante.
Donnez le code complet de la classe Combattant.
Génération de la carte – les continents (7 points)
1 point
5 points
Donnez le code de la méthode void construitContinent(Terrain terrain, int n) de la classe Plateau permettant de construire un continent constitué de n terrain terrain. Cette méthode doit commencer par sélectionner une position de départ sur la grille. Cette position doit se trouver dans la mer. Donc, si par hasard, la position tirée se trouve déjà dans un continent, il faut tirer une nouvelle position de départ.
Ensuite, l'algorithme fonctionne de façon itérative :- si la case à la position courante se trouve dans la mer, il faut passer le terrain de la case courante à terrain et décrementer n,
- dans ce cas, si n tombe à 0, il faut sortir de la méthode puisque le continent est entièrement construit,
- dans tous les cas (que la position soit dans la mer ou non), il faut ensuite tirer un nombre aléatoire compris entre 0 et 3 inclus. Ce nombre donne une direction (par exemple, 0=bas, 1=gauche, 2=haut, 3=droite) et il faut donc déplacer la position courante de façon adéquate (si, par hasard, vous êtes sur un bord et que le déplacement est invalide, ne déplacez bien sûr pas la position courante),
- enfin, il faut recommencer au début de la boucle.
1 point
Génération de la carte – l'ensemble des terrains (3 points)
Plutôt que de réécrire un méthode construitContinent pour chaque type de terrain, on va modifier notre méthode actuelle et utiliser des interfaces pour spécifier les contraintes.