Projet Java Snoopy 2020 Apprentis
Projet Java Snoopy 2020 Apprentis
Projet Java Snoopy 2020 Apprentis
JP Segado 1
Projet Snoopy – ING3 apprentis en Java 2020
Introduction
Snoopy's Magic Show est un jeu vidéo créé en 1990 qui met en scène le personnage de Snoopy. C'est
un jeu de réflexion de type "puzzle game" où le but est de récupérer 4 oiseaux pour passer au niveau
suivant... mais le chemin le long des niveaux est semé d'embûches...
Le but de Snoopy est de récupérer 4 oiseaux aux 4 coins du niveau en un temps imparti. Le problème
est que ces 4 oiseaux ne sont pas si faciles à récupérer. Une balle rebondit constamment dans le
niveau afin de freiner Snoopy dans sa quête. Mais ce n'est pas tout, d'autres pièges sont présents
comme des téléporteurs que la balle peut emprunter ou des cases piégées, voir même des blocs à
pousser ou à casser...
Le jeu original comporte 120 niveaux. Un mot de passe est disponible pour chaque niveau.
Un mode 2 joueurs est aussi disponible. Le principe est le même qu'en mode 1 joueur sauf que
chaque joueur joue chacun son tour. On ne s'intéressera pas à cette fonctionnalité dans ce projet.
JP Segado 2
Projet Snoopy – ING3 apprentis en Java 2020
Les quatre oiseaux à sauver sont situés dans les quatre coins du niveau.
La balle se trouve dans la zone supérieure gauche du niveau. Dans ce
niveau, Snoopy doit pousser des blocs...
Dans ce niveau, Snoopy peut casser les blocs du milieu pour avoir des
objets (bonus ou malus)
Les blocs "flèches" sont des sortes de tapis roulant qui suive la direction de
la flèche
JP Segado 3
Projet Snoopy – ING3 apprentis en Java 2020
Le temps imparti est symbolisé par des rectangles qui entourent le niveau.
• une horloge : objet pour figer le temps (et donc aussi la balle mais pas Snoopy)
• Des objets symbolisant l'invincibilité
• des blocs qu'on peut pousser
• des blocs qu'on peut casser
• des blocs qui disparaissent et réapparaissent à intervalle de temps régulier
• Les fameuses balles qui rebondissent dans le niveau (il peut y en avoir 2 maximum)
• un méchant Snoppy qui a la caractéristique de suivre le vrai Snoopy :)
JP Segado 4
Projet Snoopy – ING3 apprentis en Java 2020
Le jeu proposé cette année s'inspire fortement de son ancêtre présenté dans le paragraphe
précédent en mode graphique ! Pour simplifier, le jeu comportera au MINIMUM 3 niveaux de
difficulté croissante, une gestion des scores et des mots de passe par niveau et la possibilité de
charger une partie sauvegardée.
Une fois lancé, le jeu proposera un menu classique permettant de réaliser les actions suivantes :
Chaque niveau devra être résolu en moins de 60 secondes. Si le temps est écoulé, le joueur perd une
vie et recommence le niveau. Le but est de récupérer les 4 oiseaux du niveau sans se faire toucher
par la balle (ou les balles) et les ennemies (si présents).
Chaque niveau sera représenté par une matrice rectangulaire de caractères de 10 lignes par 20
colonnes, contenant les objets suivants :
Déplacement de Snoopy
Snoopy ne peut pas se déplacer en diagonale. Il ne peut se déplacer que dans les 4 directions
classiques (Haut, Bas, Gauche et Droite) et d'une seule case à la fois. Evidemment, en cas d'obstacle,
Snoopy ne pourra pas effectuer son déplacement. Il ne peut pas sortir du niveau.
JP Segado 5
Projet Snoopy – ING3 apprentis en Java 2020
Mouvement de la balle
La balle se déplace exclusivement en diagonale et rebondit sur les murs (les bords de la matrice). La
vitesse de la balle est fixe. Si le niveau présente plusieurs balles, on ne gérera pas la collision entre les
balles.
Un bloc poussable ne peut être poussé qu'une seule fois dans une direction précise mais ne peut pas
sortir du niveau ! Ce type de bloc n'est pas traversable.
Un bloc cassable ne peut pas être traversé. Pour le casser, il faut appuyer sur une touche spéciale. Il
ne libère aucun item.
Pour gagner, il faut récupérer les 4 oiseaux du niveau. Un fois un niveau terminé, on charge
automatiquement le niveau suivant et ainsi de suite.
Quand le joueur perd toutes ses vies, on affiche un écran de GameOver et le jeu revient au menu
principal.
Gestion du temps
Chaque niveau aura un timer initialisé à 60 secondes. Quand le timer atteint 0, le joueur perd une vie.
Pour simplifier, le timer sera représenté par un simple affichage (compte à rebours).
Au fur et à mesure des niveaux, les scores s'additionnent pour former le score final.
JP Segado 6
Projet Snoopy – ING3 apprentis en Java 2020
A chaque instant, le joueur peut s'il le souhaite sauvegarder sa partie en appuyant sur la touche 's' du
clavier. Dès qu'il le fait, le programme lui demande le nom du fichier de sauvegarde puis retourne sur
le menu principal (la partie en cours est donc quittée).
La sauvegarde se fera au choix soit dans un fichier texte ou un fichier binaire et comprend les
éléments suivants :
• la position de Snoopy
• la position de la balle (ou des balles)
• la position de tous les éléments du décor (blocs, oiseaux, ...) restant
• le temps restant
• le nombre de vies
• le score courant
Pour charger une partie, il faut passer par le menu principale et choisir "Charger une partie". Le
joueur est ensuite invité à entrer le nom de son fichier de sauvegarde.
Chaque niveau sera accessible par un mot de passe unique. Un joueur peut donc s'il connait le mot
de passe accéder au niveau de son choix à partir du menu principal. Ce mode devrait être très utile
en soutenance pour montrer rapidement vos fonctionnalités...
Mode "pause"
Si le joueur appuie sur une touche de « pause », le jeu se met en pause, c'est à dire :
JP Segado 7
Projet Snoopy – ING3 apprentis en Java 2020
• Les plateaux de jeu seront stockés dans des fichiers texte, chaque élément graphique du décor
étant identifié par un chiffre :
Identifiant (explication) Elément du décor
graphique
0 (case vide)
1 (bloc cassable)
2 (bloc poussable)
3 (bloc piégé)
4 (bloc invincible)
5 (bloc disparition/apparition)
7 (balle)
8 (Snoopy)
9 (oiseau)
• Chaque identifiant d’élément sera représenté par une icône (image) à l’écran.
• Le déplacement du personnage se fera case par case (gérer les collisions) manuellement avec
des touches du clavier (indiquez ces touches à l’écran pour guider l’utilisateur). Le joueur peut
mettre le jeu en « pause » ou annuler cette « pause » à tout moment.
• L’utilisateur peut revenir au menu et sauvegarder son niveau de jeu en cours : le niveau, le
chronomètre et le plateau avec les identifiants associés aux éléments du décor. Il peut accéder à
un niveau directement par un mot de passe.
• Quand on termine un niveau (c'est-à-dire que Snoopy a récupéré les 4 oiseaux), un score est
établi en fonction du temps mis et du niveau, puis on charge le niveau suivant. Les scores sont
additionnés de niveau en niveau.
Pour vous aider, voici une liste possible de méthodes pour gérer le jeu de base :
• Une méthode qui charge un niveau à partir d'un fichier texte
• Une méthode qui vérifie si le niveau est résolu
• Une méthode qui déplace Snoopy, en tenant compte du type de bloc
• Une méthode qui dessine à l'écran le plateau de jeu
Et n'oubliez pas de tester que vos niveaux sont jouables à l'aide du clavier…
JP Segado 8
Projet Snoopy – ING3 apprentis en Java 2020
2. Puis implémenter une méthode (ou plusieurs) permettant de visualiser votre solution (le
personnage se déplace, en tenant compte des blocs et des balles).
3. Implémenter un algorithme permettant de résoudre un niveau avec un plus court chemin
BFS « Best First Search » (parcourt en largeur) puis un DFS « Depth First Search », (parcourt
en profondeur).
Utilisez de préférence l'outil de versioning GIT pour gérer ce projet en équipe : voir page campus du
cours « Versioning » https://pedago-ece.campusonline.me/course/view.php?id=3230.
Vous pourrez ainsi être en mesure de montrer "qui a fait quoi" dans le projet.
Un diagramme de classes doit être présenté pour montrer la conception objet, y compris avec
héritage, en respect du travail demandé, contraintes et consignes ci-dessous.
JP Segado 9
Projet Snoopy – ING3 apprentis en Java 2020
A partir du cahier des charges (CDC) : extraire les données pertinentes, les regrouper en grandes
entités / objets, spécifier et caractériser les attributs et les fonctionnalités de chaque objet,
identifier les interactions entre les différents objets ainsi que les différents scénarios possibles, …
IHM : lister les choix à offrir au démarrage, lister les évènements à gérer, déterminer
l’organisation et le contenu de l’écran de jeu (maquette), …
Pour chaque classe, lister les prototypes de toutes les méthodes requises en précisant ses
paramètres d’entrée et de sortie.
Entre autres critères de qualité, le programme final devra être très facilement adaptable par tout
autre développeur (exemples : changement des valeurs d’initialisation, changement des
caractères et couleurs d’affichage, …).
Dans le langage objet Java vu au premier semestre à l’international ou ailleurs, implémenter le jeu en
respect du CDC et de votre analyse des 2 étapes précédentes : diagramme de de classes,
organisation modulaire multi-fichiers selon l’approche Modèle-Vue-Contrôleur, avec héritage et
polymorphisme, commenter les prototypes des méthodes (fonctionnalités) en précisant les
paramètres d’entrée/sortie et commenter aussi l’ACD de ces méthodes et du programme principal.
JP Segado 10
Projet Snoopy – ING3 apprentis en Java 2020
4- Critères de notation.
Vous devez réaliser l'ensemble du cahier des charges de base (expliqué dans la paragraphe
précédent). Le langage de programmation doit être le langage objet Java avec héritage... Votre code
devra être modulaire, respecter les interfaces en mode console et bien commenté !
Un code qui ne compile pas ou qui plante au démarrage ne vaut pas plus de 10/20. Tester donc
votre programme avant de le déposer sur Campus...
Votre archive doit contenir tous les dossiers et fichiers de votre projet, de préférence développé sur
NetBeans (fichiers sources .java, fichiers binaires .class, exécutable .jar etc.), et tout autre fichier que
vous jugez nécessaire au bon fonctionnement de votre programme (par exemple, fichier(s) de
sauvegarde au format .txt et toutes les images).
Citez vos sources (exemples : extraits de code récupérés de cette page campus, sites web consultés
etc.) en commentaires en début de vos fichiers sources.
➢ Une soutenance par Zoom devrait avoir lieu dans la semaine du 25 mai 2020 avec le lien
Zoom https://zoom.us/j/2244472287 pour présenter le diagramme de classes, le code développé en
Java et la démo de ce projet Snoopy.
JP Segado 11