:: Enseignements :: Master :: M1 :: 2008-2009 :: Interface graphique II ::
[LOGO]

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:
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:

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:
  1. garder l'orientation naturelle des pièces
  2. 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.

Vous pouvez vous faire une idée de la jouabilité attendue en jetant un œil à cet exemple de puzzle en ligne.

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.

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.