Projet de Solitaire

Projet d'interfaces graphiques

Modalités

Le projet sera écrit en Java en utilisant SWING. Il sera réalisé par binômes (2 personnes). Un dossier comportant le rapport et un listing commenté des programmes écrits sera rendu au secrétariat de la licence avant le lundi 5 mai 2003.

L'objectif du projet est de mettre en œuvre les techniques de la programmation orientée objet afin de réaliser avec SWING une interface utilisateur. L'évaluation prendra très largement en compte l'architecture globale du programme, l'utilisation appropriée des objets SWING ainsi que la qualité de l'interface offerte à l'utilisateur. Ce dernier point comprend en particulier la lisibilité, l'ergonomie et la cohérence de l'interface.

Objectif

L'objectif du projet est de réaliser une interface permettant de jouer au solitaire.

Description

Le solitaire se joue sur un plateau sur lequel sont placées des billes. Les billes sont mises dans 33 trous disposés en croix comme sur la figure ci-dessous.

  ...
  ...
.......
.......
.......
  ...
  ...

L'objectif du jeu est de retirer les billes du plateau en effectuant des mouvements autorisés. Les règles qui régissent les mouvements des billes sont les suivants.

Si au cours du jeu, une partie du plateau contient par exemple la configuration de billes suivantes.

.12
345
678

où la place libre est marquée par un . et les billes par des chiffres, deux mouvements sont alors possibles. La bille 2 peut sauter la bille 1 pour effectuer un mouvement horizontal ou la bille 6 peut sauter la bille 3 pour effectuer un mouvement vertical. On se retrouve alors dans une des deux configurations suivantes.

2..      612
345      .45
678      .78

Au départ tous les trous sont remplis par des billes à l'exception de quelques uns. Le jeu est d'autant plus facile que le nombre de trous vides est grand. Il faut bien sûr au moins un trou pour que le jeu puisse commencer. Le nombre de trous vides au départ est généralement de 1, 2 ou 3. Le jeu est plus facile lorsque les trous vides se trouvent au bord plutôt qu'au centre. On pourra utiliser les configurations classiques de départ de la figure ci-dessous.

      .oo           .oo           ooo
      ooo           ooo           ooo
    ooooooo       ooooooo       ooooooo 
    ooo.ooo       ooooooo       ooo.ooo
    ooooooo       ooooooo       ooooooo
      ooo           ooo           ooo
      ooo           ooo           ooo

Réalisation

Rien n'est vraiment imposé dans l'interface. Celle-ci pourra comporter des menus, des boutons, des menus contextuels (popup menu) et tout ce que SWING fournit. Lorsque l'AWT et SWING offrent des fonctionnalités similaires, les objets SWING doivent être utilisés en priorité. L'interface doit proposer au joueur une configuration initiale et gérer une notion de score. Ce score pourra prendre en compte le nombre de billes restant sur le plateau à la fin de la partie mais aussi le temps écoulé pendant la partie.

L'interface devra aussi offrir à l'utilisateur la possibilité de sauver une partie en cours et de reprendre une partie sauvée au préalable. Ceci pourra se faire grâce à la sérialisation d'objets mais une meilleure solution consiste à utiliser XML.

L'interface devra aussi permettre à l'utilisateur de revenir en arrière dans la partie en annulant un certain nombre des derniers mouvements. Il sera alors possible de repartir en avant en effectuant à nouveau les mouvements annulés.

Les extensions possibles de ce projet sont nombreuses. Libre à vous d'ajouter des fonctionnalités. Il est cependant conseillé de ne pas sacrifier la qualité à la quantité. Un programme minimal (c'est-à-dire correspondant à ce qui est demandé) mais bien conçu est nettement préférable à un projet plus large mais moins abouti.