A java project
Programme informatique 420-P26-GG Programmation objet I Hiver 2021 Projet 2 Les mots cachés Date de remise La remise se fait en deux temps : • Première partie : o mercredi 14 avril 2021 à 23h55 o via Léa (pas de Mio) aucun retard accepté (même pas une seconde) o opérations surlignées en jaune dans cet énoncé o vous pourrez quand même apporter des modifications dans le projet final, mais ça doit être complet o pénalité jusqu’à 30% si pas remis ou incomplet. • Deuxième partie (projet complet): o mercredi 28 avril 2021 à 23h55 o Pour la remise finale, une pénalité de 10% s’applique pour chaque jour de retard (max. 40%). Après 4 jours de retard, la note est 0. Objectifs d’apprentissage • Gérer les exceptions • Utiliser la classe String • Utiliser les tableaux à deux dimensions • Utiliser la classe ArrayList Type d’évaluation Sommative (10 % de la note du cours) Consignes : • Un projet INCOMPLET ou un projet qui ne compile pas entraîne automatiquement la note 0 (pour le projet 1, j’ai été tolérant, mais pas cette fois). Il est donc préférable de remettre un projet en retard qu’un projet incomplet. Par INCOMPLET, j'entends quelque chose qui ne fonctionne pas du tout ou qui n'est qu'une ébauche de programme. Vous n'aurez pas de Projet 2 Hiver 2021 Page 2 sur 8 points seulement pour fournir des lignes de code. Ça doit ressembler à un projet complet qui fait à peu près ce qui est demandé. • Respectez les spécifications à la lettre et n’ajoutez pas d’éléments qui ne sont pas spécifiés dans l’énoncé, sous peine de pénalités. • Commentez judicieusement votre code et toutes vos variables. Utilisez des identificateurs significatifs. • Le non-respect des normes entraîne très rapidement une pénalité de 20%. • La validité du code et le fonctionnement sont évalués surtout en utilisant le programme. Vous n’obtenez donc aucun point pour le code non fonctionnel. De plus, si un bogue ou un code non fonctionnel m’empêche d’utiliser d’autres parties du programme, vous ne pourrez pas obtenir de points pour ces parties. • Toutes les variables d’instance doivent être private • Vous devez respecter les noms de classes, méthodes, variables et type de données demandés et faire les traitements demandés dans les classes spécifiées. Toutes les sorties doivent être bien formatées et alignées comme dans les exemples et toutes les exceptions et conditions d’erreur doivent être gérées et affichées avec un message détaillé . Ne prenez rien pour acquis… Votre programme ne doit pas se terminer en cas d’erreur, mais doit revenir au menu. Barème classe EnumDirection 10 classe Mot 5 classe GrilleJeu - constructeur 25 classe GrilleJeu afficherGrilleInitiale afficherGrilleFinale afficherMots 5 classe GrilleJeu - trouverMots 40 classe GrilleJeu - trouverMotMystere 5 classe Principale 10 Bonus : affichage des conditions d’erreur uniquement à partir de la classe Principale par les mécanismes des exceptions (pas d’affichage d’erreurs dans les autres classes) 20 Pénalités : remise de la première partie incomplète ou en retard jusqu’à -30 remise du projet complet en retard jusqu’à -40 projet incomplet, plante, ne compile pas jusqu’à -100 non respect des normes de programmation jusqu’à -20 mauvaise présentation du code jusqu’à -20 non respect de l’énocé, ajout de fonctionnalités, etc jusqu’à -100 Projet 2 Hiver 2021 Page 3 sur 8 Énoncé du problème Il s’agit de concevoir et d’implanter la solution du jeu de mots cachés. Le travail consiste à retrouver un ensemble de mots donnés dans une grille. Les mots peuvent être lus de bas en haut, de haut en bas, de gauche à droite, de droite à gauche et suivant les diagonales. Lorsque tous les mots de la liste ont été trouvés, il demeure des lettres libres dans la grille. Ces lettres constituent les mots cachés ou le mot mystère. Une lettre de la grille peut faire partie de plus d’un mot. Répertoire des fichiers de données Un répertoire nommé « grilles », directement dans votre répertoire de projet, contient les grilles de jeu : Vous devez prévoir (et afficher) les cas d’erreur : • le répertoire « grilles » n’existe pas • il est vide • il contient des répertoires • etc. Structure des fichiers de données Un fichier de données contient : - Le nombre de colonnes et de lignes de la grille, séparés par une virgule, sur la 1ere ligne - La grille de caractères : o Chaque ligne contient un nombre de lettres minuscule ou majuscule (correspondant au nombre de colonnes spécifié à la ligne 1), de A à Z uniquement, spéparés par au moins un espace o Le nombre de ligne définissant la grille correspondant au nombre de lignes spécifié à la ligne 1 - Une liste de mots à trouver, un mot par ligne. Vous n’avez pas à valider la structure d’un mot. On ne tient pas compte de la casse (majuscules / minuscules) : « abe » est la même chaîne que « ABC » dans ce projet. Il n’y a pas de caractères spéciaux ou accentués. Vous devez prévoir et signaler tous les cas d’erreur dans votre application: • Nombre de lignes ou de colonnes ne correspondent pas à la première ligne • La grille contient des caractères invalides • Le fichier est vide Projet 2 Hiver 2021 Page 4 sur 8 • La grille de caractères contient des chaînes de plus de 1 caractères • Un mot ne se retrouve pas dans la grille (condition d’erreur à signaler lorsque vous programmerez la méthode trouverMots) • Etc. Exemple de fichier (grille1.txt): 12,12 B P O I V R O N I E E N P A M P L E M O U S S E U O H C S A E K L I I U O P O I R E L I M E R G L A I T U E O W S M E N A V O C A T N I E N C A T T C O N C O M B R E M N E E R C B E S A A M S A I L T M I M P N I M I C O E A A N A N A S O D A B R I C O T R N I P A T F I G U E A N E N T R abricot ail ananas avocat banane cantaloup cerise celeri chou concombre figue framboise kiwi laitue lime mangue melon pamplemousse poire poivron pomme radis raisin Les coordonnées d’une lettre dans la grille sont représentées par un couple d’entier (x, y) indiquant que la lettre est dans la colonne x et la ligne y. L’origine de la grille est (0, 0), soit le coin supérieur gauche. La position d’un mot dans la grille est exprimée par les coordonnées de sa première lettre et de sa direction. Par exemple, la position du mot « FRAMBOISE » est : (1, 11) direction « Nord Est ». x y (0, 0) Projet 2 Hiver 2021 Page 5 sur 8 Votre projet doit contenir au moins les éléments suivants : - La classe EnumDirection pour les différentes directions, qui doit contenir au moins les attributs et suivants : o Le nom de la direction (exemple : Nord Ouest) o Les deux valeurs entières qui permettent le déplacement dans la grille selon la direction choisie (exemple (-1,-1) pour Nord Ouest). Vous pouvez utiliser une variable de type Point (de Java.awt) pour entreposer ces deux valeurs. La classe EnumDirection doit aussi contenir les méthodes et constructeur requis pour une utilisation adéquate dans le projet. Vous pouvez mettre seulement le minimum pour la première remise pour que la classe Mot compile. - La classe Mot qui contient au moins les éléments suivants : o Les variables d’instance : private String strMot pour entreposer la chaine de caractères qui correspond au mot private EnumDirection direction pour entreposer la direction du mot. position pour entreposer les coordonnées du mot dans la grille. Vous pouvez utiliser le type Point (de Java.awt), par exemple private Point position o Les méthodes suivantes : Un constructeur qui initialise la valeur strMot à celle reçue en argument public String toString() qui donne une version affichable d’un mot et qui respecte le format d’affichage (voir l’exemple ci-dessous) Les accesseurs et modificateurs nécessaires (get et set) - La classe GrilleJeu qui contient au moins les éléments suivants : o Les variables d’instance : private char[][] tabLettres : un tableau à deux dimensions pour entreposer les lettres de la grille. Donc un tableau de char[][] de la taille exacte de la grille traitée. private ArrayList
arrMots: un arrayList d’éléments de type Mot pour entreposer la liste des mots. o Les méthodes suivantes : Un constructeur qui prend en argument un fichier de données et qui remplit le tableau tabLettres et l’arrayList arrMots Projet 2 Hiver 2021 Page 6 sur 8 public void afficherGrilleInitiale(): permet de visualiser la grille initiale (tabLettres) public void afficherGrilleFinale(): affiche la grille initiale où tous les caractères des mots trouvés sont remplacés par le caractère '-' public void afficherMots(): affiche la liste des mots