:: Enseignements :: IMAC :: IMAC2 :: IMAC2 2011-2012 :: Programmation Java ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Projet JaWordBreaker |
Nous souhaitons réaliser un jeu en Java s'inspirant d'un flipper et d'un casse-briques offrant la possibilité de trouver des mots. Le jeu se présente sous la forme d'un plateau contenant différents éléments (des briques) ; une bille évolue sur ce plateau et interagit avec les briques. L'objectif du jeu consiste à trouver un mot dont les lettres sont masquées : certaines des briques dévoilent une lettre du mot. Le niveau de jeu est terminé lorsque le joueur propose le mot correct. À l'issue de la réussite d'un niveau, le joueur atteint un nouveau niveau avec un plateau différent (nouvelle disposition des éléments et nouveau mot à deviner). Le jeu s'arrête lorsque le joueur ne dispose plus de bille.
Des précisions et éclaircissements sur certains points pourront être apportés au sujet : il est conseillé de consulter cette page régulièrement.
Le plateau de jeu
Le plateau se présente sous la forme d'une zone rectangulaire en deux dimensions délimité en bas par de l'eau et sur les autres côtés par une paroi. Différents éléments, les briques, sont parsemés sur le plateau. Ces briques peuvent être rectangulaires ou de toute autre forme (forme polygonale, circulaire...). Nous proposons ici une taxonomie des différentes briques qu'il est nécessaire d'implanter (il est possible d'en imaginer de nouvelles) et qui chacune ont un comportement spécifique au contact de la bille :
- Brique palet : elle représente un palet évoluant au bas du plateau et permet d'éviter de perdre la bille dans l'eau. Elle dispose d'une certaine adhérence et permet selon sa vélocité de modifier la vélocité de la bille lors de son contact
- La brique obstacle : cette brique est un obstacle pour la bille ; on distingue deux types d'obstacles : les obstacles fixes qui se contentent de faire rebondir la bille en restant immobiles et les obstacles mobiles qui peuvent être entraînés par la bille.
- La brique cassable : elle se désintégre au contact de la bille qui pert alors de l'énergie cinétique. Parmi les briques cassables, nous avons :
- La brique bonus : elle permet le gain de points.
- La brique lettre : elle permet de gagner une lettre du mot à deviner.
- La brique bille : elle permet d'obtenir une nouvelle bille en réserve.
- La brique magique : elle permet de doter la bille ou la brique palet d'un pouvoir. Parmi ces pouvoirs, on trouve le dédoublement de la bille, la modification de la masse de la bille, la transformation de la bille en bombe (qui détruit dans un certain délai toutes les briques dans un certain rayon, y compris les briques lettre), l'immobilisation de la brique palet pendant un certain délai, la modification de la taille de la brique palet.
- La brique temporelle : elle permet de voyager dans le temps (revenir n secondes en arrière dans le déroulement du jeu ; pour éviter de désagréables boucles temporelles, on pourra supprimer la brique temporelle atteinte)
Les différentes briques doivent pouvoir être distinguables graphiquement. Toutefois, afin d'assurer un meilleur suspens, certaines briques cassables peuvent être graphiquement indifférenciées (par exemple la brique bonus et la brique lettre).
Le déroulement du jeu
La brique palet permet au démarrage de propulser la bille sur le plateau. Celle-ci est soumise à la force de gravité (on suppose que le plateau a une certaine inclinaison par rappor à l'horizontale) ainsi qu'aux forces d'interaction avec les briques rencontrées. La bille rebondit sur les limites du plateau mais peut tomber à l'eau si elle intersecte le bas du plateau non couvert par la brique palet. S'il n'y a plus de bille de réserve après que la bille soit tombée à l'eau, la partie est terminée. Des points peuvent être gagnés ainsi que des pouvoirs spécifiques pour la bille ou la brique palet. Lorsque le joueur pense avoir trouvé le mot mystère, il met en pause le déplacement de la bille et entre sa proposition. Si celle-ci est correcte, le niveau est remporté et un nouveau plateau de jeu est proposé. Dans le cas contraire, un malus de points est imposé.
Il est possible à tout moment de mettre le jeu courant en état d'hibernation : l'application se termine immédiatement (utile pour jouer furtivement durant un TD de Java ;) et l'état du jeu est sauvegardé dans un fichier dans le répertoire courant. Cette partie pourra être continuée ultérieurement.
On définira une politique de scoring pour attribuer un score au joueur. Lorsque la partie est terminée, on enregistre le score du joueur ; on offrira un moyen d'afficher les meilleurs scores.
Les différentes constantes physiques utilisées (gravité, friction...) doivent être configurables ; une configuration par défaut permettant une bonne jouabilité devra être proposée.
Génération de niveau
On proposera un générateur aléatoire de niveau assurant la jouabilité (on évitera par exemple de placer des briques inaccessibles). En supplément, un éditeur de niveau pourra être proposé. L'utilisateur pourra aussi spécifier le dictionnaire d'où seront tirés au sort les mots à deviner (par exemple /usr/share/dict/french).
Développement du jeu
Le jeu doit être développé en langage Java et n'utiliser que la bibliothèque standard ainsi qu'une bibliothèque de rendu physique 2D (par exemple
JBox2D). On exploitera les capacités objet de Java en créant des classes judicieuses avec des relations d'héritage appropriées, le tout organisé en paquetages. On essaiera de limiter la duplication de code et on adoptera une architecture facilitant l'évolutivité du jeu (création de nouvelles fonctionnalités).
Il est nécessaire d'implanter en priorité les fonctionnalités décrites dans cet énoncé ; si tout fonctionne correctement, il est possible d'imaginer des améliorations intéressantes. Un attention particulière sur l'aspect artistique sera bien sûr apprécié (graphisme, musique et effets sonores).
Consignes de rendu
Le projet doit être obligatoirement réalisé en binôme (un seul trinôme est autorisé en cas de nombre impair d'étudiants). Il devra être rendu au plus tard (date repoussée)
le 20 mai 2012 à 19h42 (heure de Paris) par courrier électronique adressé aux chargés de cours et TD (nicolas.bedon at univ-mlv.fr, thdinh01 at gmail.com, chilowi at univ-mlv.fr) sous la forme d'une archive .zip comprenant les éléments suivants :
- Un répertoire src/ contenant les sources (propres et bien commentées)
- Un fichier build.xml permettant de compiler et générer un fichier jar du projet à partir de ses sources (en utilisant Ant). Le jeu devra pouvoir être lancé depuis son jar : java -jar jawordbreaker.jar [fichierSauvegarde]
- Un fichier README décrivant rapidement le fonctionnement du jeu (instructions pour la compilation, le lancement, description des règles du jeu, des touches utilisables...). La présence d'éventuels bugs ou limitations devra être spécifiée.
- Un rapport de développement sous la forme d'un fichier PDF décrivant l'architecture du projet, les difficultés rencontrées et la répartition des tâches au sein du binôme.
Une soutenance du projet est prévue durant la matinée du jeudi 24 mai 2012.
© Université de Marne-la-Vallée