:: Enseignements :: Master :: M1 :: 2008-2009 :: Interface graphique II ::
![[LOGO]](http://igm.univ-mlv.fr/ens/resources/mlv.png) | Volfoni |
But du projet
Vous devrez réaliser un programme permettant de fabriquer un puzzle à partir
d'une image et d'y jouer par Drag-and-Drop.
Découpage de l'image
Au démarrage d'une partie, vous proposerez à l'utilisateur de charger une image, puis vous
lui demanderez les dimensions du puzzle en nombres de pièces. Libre à vous de choisir
ensuite votre méthode de découpage des pièces par clipping, sachant qu'au pire,
ça doit fonctionner avec des rectangles tout simples. Cela dit, pour
avoir un maximum de points, vous devrez
réfléchir à un découpage qui
1) soit agréable à regarder, et qui
2) ne produise pas 2 fois la même forme de pièce.
Présentation de l'application
La fenêtre doit se découper en 2 parties:
- une liste contenant les pièces non encore posées sur la zone de jeu
- la zone de jeu
Au démarrage, la liste doit contenir toutes les pièces du puzzle, dans le désordre. On
doit pouvoir, par Drag-and-Drop, enlever une pièce de la liste pour l'amener sur la zone de
jeu, et vice-versa. On doit également pouvoir déplacer les pièces qui sont
sur la zone de jeu.
Placer une pièce
Au moment où l'on drop une pièce sur la zone de jeu, il faut tester si cette pièce
est à proximité des pièces auxquelles elles doit s'accrocher. Pour cela, vous mesurerez
la distance entre les centres des pièces concernées sur la zone de jeu, et vous comparerez
avec la distance idéale, à 10 pixels près. Attention: une pièce peut s'accrocher
simultanément à plusieurs pièces.
Groupes de pièces
Quand plusieurs pièces sont accrochées ensemble, elles forment un groupe.
Dès lors, on ne peut plus dissocier les pièces qu'il contient, et quand on
fait du Drag-and-Drop sur une des pièces du groupe, tout le groupe doit bouger en bloc.
Un groupe ne peut pas être replacé dans la liste des pièces.
Attention: quand un joueur drag un groupe, la façon de tester si le groupe va s'accrocher
à une pièce ou un autre groupe n'est peut-être pas la même que lorsqu'on drag une seule pièce.
À vous d'adapter vos tests en conséquence.
Quand un nouveau groupe est formé, il faut que l'utilisateur le voit afin de savoir
qu'il a correctement placé la pièce ou le groupe qu'il a dropé. Cela peut se faire,
par exemple, avec une rapide surbrillance de toute la zone couverte par le groupe. Toute
autre idée est bienvenue.
Dimensions des pièces et de la zone de jeu
Afin d'être user-friendly, votre application doit adapter la taille des pièces à la taille
de la fenêtre, de telle sorte qu'on puisse avoir des pièces plus grandes ou plus petites,
selon que l'on étire ou non la fenêtre. Attention: les pièces doivent conserver leurs
proportions. De plus, pour aider le joueur, la taille des pièces devra être ajustée de
sorte que le puzzle fini n'occupe pas toute la zone de jeu. En effet, le joueur aura
besoin d'espace pour disposer ses groupes de pièces intermédiaires. Pour qu'il sache
à quoi s'en tenir, vous dessinerez sur la zone de jeu un rectangle centré à la taille
du puzzle fini.
Mode bazar
Vous prévoierez 2 boutons:
- l'un pour remettre automatiquement dans la liste toutes les pièces qui se trouvent sur la
zone de jeu et qui ne sont accrochées à rien
- l'autre pour vider toutes les pièces de la liste et les placer aléatoirement sur la
zone de jeu
Rotation des pièces
Cette partie est réservée à ceux qui veulent flirter avec la note maximale
et qui ont déjà fait correctement tout le reste.
Parce qu'un puzzle est plus simple à résoudre si l'on connaît déjà
l'orientation de chaque pièce, on veut compliquer le jeu avec l'aide d'une option
proposée à la configuration d'une partie pour, au choix:
-
garder l'orientation naturelle des pièces
-
tirer au sort une orientation parmi les 4 rotations de 90° possibles
On devra alors pouvoir, par clic droit, modifier l'orientation d'une pièce, soit
quand elle est dans la liste, soit quand elle est sur la zone de jeu. Naturellement,
on ne doit pas pouvoir accrocher une pièce A à une pièce B si elles sont à bonne
distance mais que leurs orientations sont différentes. Si vous voulez faire simple,
vous pouvez n'autoriser l'accrochage que lorsque toutes les pièces concernées ont la bonne
orientation. Si vous êtes des grosses brutes, vous pouvez aussi autoriser la rotation
des groupes et ainsi permettre au joueur de faire le puzzle dans l'orientation qui
lui plaît.
Conditions de rendu
Vous travaillerez en binômes et vous relirez une fois de plus la
charte des projets.
Vous rendrez ensuite une archive nommée
login1-login2.zip
contenant les choses suivantes:
- un répertoire src contenant les sources du projet ainsi qu'un build.xml. Lorsqu'on
lance ant, on doit obtenir un exécutable nommé Volfoni.jar. La cible clean
doit fonctionner correctement. Les sources doivent être propres, en anglais et commentées.
- un fichier doc.pdf contenant votre rapport qui devra décrire votre travail.
En particulier, vous y décrirez soigneusement votre méthode de découpage ainsi que votre façon de gérer
les redimensionnements des pièces.
Si votre projet ne fonctionne pas complètement, vous devrez en décrire les bugs.
- Il est interdit d'utiliser du code externe: vous devrez tout coder vous-mêmes.
- Tout code commun à plusieurs projets vaudra zéro pour tous les projets concernés.
Le projet est à rendre par mail à tous les enseignants (i.e. Sébastien Paumier et Sylvain Cherrier),
au plus tard le jeudi 16 avril 2009 23h.
© Université de Marne-la-Vallée