SameGame

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.

exemple de plateau de jeu

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.

démonstration d'un clic

Principes généraux

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).

Fonctionnalités demandées

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.

Format de représentation des grilles

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

Sources

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.

Rapport

Le rapport d'avancement prendra la forme d'un fichier PDF disponible avec les sources sur le serveur GIT. Vous y inclurez en particulier :

  • le nom des membres du binôme,
  • une introduction contenant une brève description du sujet,
  • la description des fonctionnalités de votre programme, aidée de captures d'écran,
  • une présentation de la structure du programme, avec diagramme de classes à l'appui,
  • une exposition de l'algorithme qui identifie les groupes,
  • une conclusion personnelle pour chaque auteur.

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.

retour à la page d'accueil

retour au sommet