Programmation orientée objet Contrôle Continue 2018 3IL3 Institut universitaire
Programmation orientée objet Contrôle Continue 2018 3IL3 Institut universitaire de la côte Durée: 2 h 00 Tous documents autorisés Le but de cet examen est d’implémenter une partie de la logique du jeu Tetris. Tetris est un jeu dans lequel des blocs de différentes formes descendent un un dans une grille 2D jusqu’ rencontrer un obstacle. Une fois l’obstacle rencontré (le bas de la grille ou un autre bloc), le bloc se fige et un autre apparat en haut de la grille. Tant qu’un bloc n’est pas figé, l’utilisateur peut le faire se translater latéralement, opérer des rotations ou accélérer sa descente. Si une ligne de la grille est complètement recouverte par des blocs figés, elle disparait et toutes les lignes supérieures sont décalées d’un cran vers le bas. Vous pouvez supposer que tous les arguments passés à vos méthodes sont valides. Vous n’avez pas besoin de les vérifier. Le sujet est composé de 4 parties. « La différence entre la théorie et la pratique, c’est qu’en théorie, il n’y a pas de différence entre la théorie et la pratique, mais qu’en pratique, il y en a une. » Jan van de Sneptscheut 1 La classe Vecteur Question 1 Afin de repérer des positions dans la grille, introduisez une classe Vecteur. Cette classe a deux champs entiers représentant les coordonnées du vecteur, un constructeur qui prend en paramètres la valeur initiale de chacun de ces champs, et les accesseurs associés. Question 2 Définissez un deuxième constructeur dans la classe Vecteur. Celui-ci prend un Vecteur en paramètre et en construit une copie. Votre constructeur ne devra être constitué que d'une seule instruction. Question 3 Définissez une méthode translate prenant deux entiers dx et dy en paramètres et modifiant le vecteur courant d'un mouvement horizontal dx et d'un mouvement vertical dy. Question 4 La rotation dans le sens horaire d’un vecteur (par rapport l’origine du repère) transforme ses coordonnées (x,y) en (y,−x). Définissez une méthode tourneSensHoraire qui réalise cette rotation. Question 5 Redéfinissez les méthodes equals et hashcode. La classe Bloc Dans cette partie, on suppose définis les vecteurs : Vecteur GG = new Vecteur(-2, 0); Vecteur DD = new Vecteur(2, 0) ; Vecteur G = new Vecteur(-1, 0); Vecteur B = new Vecteur(0, -1) ; Vecteur C = new Vecteur(0, 0); Vecteur BG = new Vecteur(-1, -1) ; Vecteur D = new Vecteur(1, 0); Question 6 Vecteur BD = new Vecteur(1, -1) ; Un bloc du jeu est représenté par une instance de la classe Bloc. Un bloc est caractérisé par sa couleur, la position de son centre dans la grille et les positions qu’il occupe relativement son centre. Chaque position est représentée par un vecteur, la couleur est un élément de la classe Color. Les blocs classiques du Tetris sont appelés tetriminos et sont représentés dans la Table 1. Les centres sont les carrés barrés et les positions occupées sont données titre d’exemple. Forme Nom Positions occupées Forme Nom Positions occupées I G C D DD J GG G C B O C D B BD Z G C B BD T G C D B S C D BG B L C D DD B Table 1 Les tetriminos classiques Définissez la classe Bloc. Cette classe contient un contructeur prenant en paramètres une couleur, une position pour le centre et un nombre quelconque de positions relatives. Elle a un unique accesseur pour la couleur. Indication : Attention ne pas avoir de données partagées. Question 7 Pour effectuer une translation d’un bloc, il suffit d’effectuer la translation de son centre. Définissez une méthode translate prenant deux entiers dx et dy en paramètres et translatant le centre du bloc. Question 8 Pour effectuer une rotation d’un bloc, il faut effectuer la rotation de chacune de ses positions. Définissez une méthode tourneSensHoraire qui réalise la rotation dans le sens horaire. Question 9 On cherche connaitre toutes les positions occupées par un bloc dans la grille. Définissez une méthode getPositionOccupee qui renvoie une List<Vecteur> contenant l’ensemble de ces positions dans un ordre quelconque. Exemple : Le bloc représentant un tetrimino de type T et de centre de coordonnées (10,20) occupe les positions de coordonnØes (9,20), (10,20), (11,20) et (10,19). Question 10 La classe Bloc permet de représenter n’importe quel bloc, pas seulement les tetriminos classiques. On veut cependant faciliter la création de ceux-ci. Pour cela, on dote la classe Bloc d’une énumération interne Tetrimino : public class Bloc { // Code de la classe Bloc public enum Tetrimino { I(new Color(0, 240, 240), G, C, D, DD), O(new Color(240, 240, 0), C, D, B, BD), T(new Color(160, 0, 240), G, C, D, B), L(new Color(240, 160, 0), C, D, DD, B), J(new Color(0, 0, 240), GG, G, C, B), Z(new Color(240, 0, 0), G, C, B, BD), S(new Color(0, 240, 0), C, D, BG, B); private final Color couleur; private final Vecteur[] vecteurs; // Constructeur de l’enumeration Tetrimino } } Définissez le constructeur manquant de l’énumération. Question 11 Les champs couleur et vecteurs de Tetrimino sont privés. De plus, l’énumération ne possède aucune méthode. Expliquez comment ces champs peuvent tout de même être exploités. Question 12 Dans la classe Bloc, définissez une méthode de classe getTetrimino qui prend en paramètres un Tetrimino et la position de son centre et qui renvoie le bloc associé. Question 13 Le tetrimino de type O représente un carré. On souhaite que la rotation des blocs construits sur ce tetrimino ne les modifient pas. Quel mécanisme classique de la programmation orientée objet permet de réaliser cela facilement? Implémentez votre solution, vous devrez entre autres modier la méthode getTetrimino. 2 La classe Grille Question 14 On représente une grille par un tableau bi-dimensionnel de couleurs (classe Color). Initialement toutes les couleurs sont initialisées null. Définissez la classe Grille qui a pour seul champ un tableau bidimensionnel, un constructeur prenant en paramètres la largeur et la hauteur de la grille, des accesseurs getLargeur(), getHauteur(), getContenu(int x, int y) renvoyant respectivement la largeur, la hauteur et la couleur aux coordonnées (x,y) de la grille, et un mutateur setContenu(int x, int y, Color couleur) qui modie la couleur aux coordonnées (x,y). Question 15 Définissez une méthode supprimerLigne(int y) qui supprime la ligne d’indice y de la grille en décalant toutes les lignes d’indice supérieur d’un cran vers le bas. La ligne la plus haute devient vide (ne comporte plus que des références null). Question 16 Une ligne est complète si toutes les couleurs qui la compose sont différentes de null. Définissez une méthode ligneComplete(int y) qui renvoie true si la ligne y est complète, false sinon. Question 17 Définissez une méthode verifierLignes qui parcours la grille ligne par ligne et qui supprime toutes les lignes complètes. 3 Grilles initialisées Question 18 On veut pouvoir initialiser une grille l’aide d’un fichier. Ce fichier contient sur une première ligne deux entiers n et m qui indiquent respectivement la largeur et la hauteur de la grille que l’on cherche créer. Le fichier continue avec m lignes de n caractères représentant l’état de la grille. Si le caractère ’.’ apparaît la position associée est vide. l’inverse si le caractère est ’X’, on remplit la position par la couleur Color.GRAY. Tout autre caractère est invalide. Exemple de fichier valide : Définissez une exception FormatException qui n’est pas vérifiée par le compilateur. Elle a un constructeur qui prend en paramètre un nom de fichier, un deuxième constructeur qui prend en paramètres un nom de fichier et un message et une méthode getFichier qui renvoie ce nom. Question 19 Dans la classe Grille, définissez une méthode de classe initialise qui prend en paramètre un nom de fichier. Cette méthode initialise et renvoie une grille en fonction des données lues dans le fichier. Une exception FormatException est levée si le fichier est invalide. Indication : Utilisez la classe Scanner et englobez tout le corps de la méthode dans un try/catch. uploads/s3/ controle-programmation-oriente-objet.pdf
Documents similaires
-
20
-
0
-
0
Licence et utilisation
Gratuit pour un usage personnel Attribution requise- Détails
- Publié le Dec 05, 2022
- Catégorie Creative Arts / Ar...
- Langue French
- Taille du fichier 0.2423MB