Programme informatique
XXXXXXXXXXP26-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 pou
ez 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 A
ayList
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 pou
ez 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’e
eur 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’e
eur, mais doit revenir au menu.
Barème
classe EnumDirection 10
classe Mot 5
classe GrilleJeu - constructeur 25
classe GrilleJeu afficherGrilleInitiale
XXXXXXXXXXafficherGrilleFinale
XXXXXXXXXXafficherMots
5
classe GrilleJeu - trouverMots 40
classe GrilleJeu - trouverMotMystere 5
classe Principale 10
Bonus :
affichage des conditions d’e
eur uniquement à partir de la classe
Principale par les mécanismes des exceptions (pas d’affichage
d’e
eurs dans les autres classes)
20
Pénalités :
emise de la première partie incomplète ou en retard jusqu’à -30
emise 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 li
es 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’e
eur :
• 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 nom
e 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 nom
e de lettres minuscule ou majuscule
(co
espondant au nom
e de colonnes spécifié à la ligne 1), de A à Z
uniquement, spéparés par au moins un espace
o Le nom
e de ligne définissant la grille co
espondant au nom
e 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’e
eur dans votre application:
• Nom
e de lignes ou de colonnes ne co
espondent 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’e
eur à 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
a
icot
ail
ananas
avocat
anane
cantaloup
cerise
celeri
chou
concom
e
figue
framboise
kiwi
laitue
lime
mangue
melon
pamplemousse
poire
poivron
pomme
adis
aisin
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
equis 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 co
espond 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 A
ayList
a
Mots: un a
ayList 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’a
ayList a
Mots
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