Dans ce jeu, une grille est remplie de blocs de trois types et votre but est de la vider. Un groupe de blocs adjacents et de même type peut être retiré en cliquant dessus. Les blocs restants se réarrangent afin de boucher les trous, et on recommence jusqu'à avoir vidé la grille ou n'avoir plus que des blocs isolés.
Vous produirez un programme écrit en Java, sans emprunt extérieur (sauf l'API officielle), et accompagné d'un rapport. Le travail sera fait obligatoirement en binôme, et se terminera impérativement avant le dimanche 20 avril 2025 à 23h59.
La partie logicielle sera développée dès le départ à l'aide du serveur GIT du département. Le rapport prendra la forme d'un fichier au format PDF joint aux sources.
Trois types de blocs sont possibles. Pour simplifier, nous les nommerons rouge, vert et bleu. Deux blocs sont adjacents s'ils ont un côté en commun. Un groupe est un ensemble d'au moins deux blocs, tous de même type et chacun connecté à tous les autres par une succession d'adjacences entre membres du groupe.
Lorsque la souris survole un bloc qui fait partie d'un groupe, tout le groupe doit être visuellement accentué. Si le joueur clique sur un groupe, celui-ci est retiré de la grille. Tous les blocs chutent alors (de haut en bas) pour boucher les trous. Enfin, si une colonne a été entièrement vidée, les colonnes à sa droite sont décalées vers la gauche.
On augmente le score du joueur à chaque groupe éliminé. Plus le groupe compte de blocs, plus le gain est important. La progression n'est pas linéaire afin d'encourager le joueur à éliminer le plus de blocs possible d'un coup.
blocs | gain |
---|---|
2 | 0 |
3 | 1 |
4 | 4 |
5 | 9 |
6 | 16 |
7 | 25 |
8 | 36 |
9 | 49 |
n | (n - 2)2 |
La partie se termine quand il n'y a plus aucun groupe (il peut rester des blocs isolés).
La grille est toujours composée de 15 colonnes et 10 lignes. Au départ elle pourra (au choix du joueur) être remplie au hasard ou adopter une configuration spécifique décrite dans un fichier (voir la section suivante). La sélection du fichier à lire se fera par le biais de la classe JFileChooser.
Durant une partie, le score courant sera affiché à côté de la grille. Lorsque plus aucun coup ne peut être joué, votre programme devra laisser l'opportunité au joueur de voir le score final avant de quitter.
Les fichiers représentant une grille ne contiennent que du texte. Chaque bloc est
représenté par un caractère (R
, V
ou B
). Les
lignes du fichier correspondent aux lignes de la grille.
Par exemple la grille dessinée plus haut donne le texte :
RVVRRVRVBBBBRBV BVVVVRBVVBRRVRB VBBRVRBVRRBRRRR BRBVBRBBVVBRVRV RVBVBBBRRBRRRBV RVVVBBRBVVBVVRB BRBRBBBRBVRVRRV VRRVVBBVVBBRVVV BVRRVVBRVRRRBVV BBRBBBBRVVRRVRB
Les sources de votre projet (et pas les fichiers générés
.class
) devront être disponibles à tout moment sur le
serveur GoGS du
département. Votre dépôt sera privé, nommé obligatoirement SAE21_2024
et incluera Luc Hernandez (login : hernand
) dans la liste des
collaborateurs. Le nombre de soumissions, leur date et l'équilibre entre leurs auteurs
influeront sur la note finale.
Pour chaque classe, vous prévoierez un fichier source. Suivez les
consignes habituelles
scrupuleusement. La définition de chaque classe et de chaque membre de classe sera
précédée d'un commentaire formaté pour permettre la génération de documentation technique
par l'outil javadoc
(ceci est un exemple de fichier source bien commenté).
Un fichier Makefile
devra permettre la compilation de votre projet (par la
commande make
) ainsi que son exécution (par la commande make
run
). Transcrivez bien toutes les dépendances entre vos fichiers dans les règles.
La commande javac
fait déjà (très mal) un travail similaire à
make
, ce qui peut créer des interférences. Pour éviter cela, pensez à lui
passer l'option -implicit:none
. Ceci est un exemple très basique.
Le rapport d'avancement prendra la forme d'un fichier PDF disponible avec les sources sur le serveur GIT. Vous y inclurez en particulier :
Soignez la présentation ! L'orthographe, la grammaire, les pages de garde, la table des matières, les en-tête et pieds de page ne sont pas en option...
Notez bien que le rapport ne doit pas contenir d'extrait du code source du projet, étant donné que le correcteur peut aller le consulter directement s'il en éprouve le besoin. N'hésitez pas en revanche à illustrer vos propos par des schémas. Ceux-ci peuvent être construits directement dans le logiciel de traitement de texte s'il le permet, ou dans un logiciel dédié, tel que Inkscape ou Draw (tous deux gratuits). Le diagramme de classe sera réalisé à l'aide de StarUML.