5. Objectifs DU PROJET

publicité
17/04/2017
LES SYSTEMES REPARTIS (NFP 215)
Cnam
Projet 1
CONSERVATOIRE
LES SYSTEMES
REPARTIS
Par J. LAFORGUE
IPST-CNAM
Cycle C
NAT IONAL
D E S ART S
ET M ET IERS
PROJET 1
Années 2006-2007
TOULOUSE
J. LAFORGUE
CENTRE REGIONAL
MIDI - PYRENEES
1.
SPECIFICATION
On se propose de réaliser une application java permettant à 2 joueurs de jouer au jeu du SUDOKU.
Pour plus d'information sur ce jeu voir http://fr.wikipedia.org/wiki/Sudoku.
Le jeu se déroule dans une grille de 9x9 cases divisées en 6 régions 3x3.
La seule contrainte est qu'il ne faut pas qu'il y ait 2 fois le même chiffre dans chaque ligne, colonne et région.
Exemple :
Au départ, la grille est vide.
Les 2 joueurs s'affrontent en inscrivant chacun son tour 1 chiffre (de 1 à 9) dans une des cases de la grille.
Deux horloges permettent de décompter le temps de réflexion de chacun des joueurs: dès que un joueur joue le
programme arrête son chronomètre et démarre celui de l'adversaire.
Si un des joueurs joue un coup impossible (conflit avec un autre chiffre) alors le coup est refusé, le joueur doit
rejouer et son chronomètre continue.
page 1
17/04/2017
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
Par J. LAFORGUE
La partie s'arrête soit quand il n'existe plus de possibilité de jouer, soit un des chronomètres a atteint les 5
minutes (cette valeur est un paramètre de l'applicatif).
Dans les 2 cas le gagnant est celui qui a le moins de temps à son chronomètre. Le nombre de points marqués est
(300 - le temps en secondes). Le perdant ne marque aucun point.
Le chronomètre démarre dès que le premier joueur joue son premier coup.
L'architecture demandée est constituée de :
 un applicatif
 deux Ihms (une pour chacun des joueurs)
L'applicatif :
 gère la grille de Sudoku (commune aux deux joueurs),
 détermine si le coup joué par un joueur est valide,
 détermine si il n'existe plus de coup à jouer,
 gère les deux joueurs (nom, temps chrono, message),
 joue le coup d'un joueur en mettant à jour la grille
 gère les deux chronomètres
L'IHM ne fait que permettre à un des joueurs de jouer et à visualiser l'applicatif :
 le numéro du joueur déterminé par l'applicatif
 affiche toute les secondes la grille de l'applicatif
 permet à un joueur de désigner une case libre, de choisir un chiffre et de valider son coup
 affiche les 2 chronomètres
 affiche le message géré par l'applicatif associé à chacun des joueurs
 envoyer un message au joueur adverse
Ainsi, l'IHM utilise une interface Java qui est implémentée par l'applicatif.
Cette interface est la suivante :
// AppSudokuInt.java
//Interface des methodes de l'applicatif utilisées par les IHM permettant
// de jouer au Sudoku
package cnamp.app;
import java.awt.Point;
/**
* Interface de définition des méthodes de l'applicatif utilisé par
l'IHM.<BR>
* Cette interface permet de séparer le développement de l'IHM et de
l'applicatif.<BR>
* De plus, elles sera indispensable pour la réalisation du projet 2.<BR>
* Toutes les méthodes de cette interface doivent être implémentées par
l'IHM.<BR><BR>
* La grille des coups contient une valeur entière: 0 case vide, N numéro
de 1 à 9.
**/
public interface AppSudokuInt
{
/**
* Ajoute un nouveau joueur à l'applicatif
* @param nomJoueur nom du joueur (texte libre)
* @return le numero du joueur (de 1 à 2), -1 si trop de joueur
page 2
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
17/04/2017
Par J. LAFORGUE
**/
public int addJoueur(String aNomJoueur);
/**
* Action de jouer un coup par un joueur<BR>
* Cette methode est void car c'est à l'applicatif de tester si le coup
est valide ou non<BR>
* Si le coup n'est pas valide alors l'applicatif ne joue pas le coup et
indique au joueur que le coup est invalide.
* @param joueur numero du joueur
* @param x numero de colonne du coup (à partir de 0)
* @param y numero de ligne du coup (à partir de 0)
* @param v valeur du chiffre
**/
public void jouer(int joueur,int x,int y,int v);
/**
* Retourne la taille de la grille
* @return retourne le nbre de colonne et de ligne sous la forme d'un
point new Point(Nbre de colonne, nbre de Ligne)
**/
public Point getTailleGrille();
/**
* Retourne la taille d'une région
* @return retourne le nbre de colonne dela region et de ligne de la
region sous la forme d'un point new Point(Nbre de colonne, nbre de Ligne)
**/
public Point getTailleRegion();
/**
* Envoyer un message a tout les autres joueurs
* @param joueur numero du joueur qui envoie le message
* @param message message à envoyer (texte libre)
**/
public void envoyerMessage(int aJoueur,String aMessage);
/**
* retourne le message d'un joueur<BR>
* Cette méthode est utilisé par chaque IHM pour obtenir son message.
* @param numeroJoueur numero du joueur
* @return le message du joueur
**/
public String getMessage(int numeroJoueur);
/**
* change le message d'un joueur en particulier
* @param joueur numero du joueur
* @param message nouveau message
**/
public void setMessage(int joueur,String message);
/**
* retourne la grille de l'applicatif
* @return la grille dans sa totalité
**/
public int[][] getGrille();
/**
* retourne le joueur courant
* @return le numero du joueur courant
page 3
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
**/
public int getJoueurCourant();
/** retourne le temps chrono d'un joueur
* @param aJoueur le numero de joueur
* @return le temps en seconde
*/
public int getTempsChrono(int aJoueur);
page 4
17/04/2017
Par J. LAFORGUE
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
1.1.
17/04/2017
Par J. LAFORGUE
Caractéristiques de l'IHM
Chaque joueur a une instance de la classe d'IHM.
Cette IHM affiche la grille gérée par l'applicatif sous la forme d'un quadrillage contenant des valeurs entières, de
1 à N. Si 0 alors la case est vide. (N peut être égale à 9). N = nbre de colonne d'une région X nbre de ligne d'une
région.
L'IHM affiche le message du joueur géré par l'applicatif.
Elle permet de saisir un texte qui consiste à changer le message de tous les autres joueurs.
Pour réaliser cet affichage l'IHM crée un thread qui interroge l'applicatif cycliquement afin de rafraîchir les
informations de l'IHM gérées par l'Applicatif.
1.2.
Caractéristiques de l'applicatif
L'applicatif est caractérisé par au moins les informations suivantes :
 une grille d'entier
 nombre de colonne de la grille (exemple: 9 ou 4)
 nombre de ligne de la grille (exemple (9 ou 4)
 nombre de colonne d'une région de la grille (3 ou 2)
 nombre de ligne d'une région de la grille (3 ou 2
 un tableau de joueur de 1 à 2.
o Un joueur est caractérisé par :
 un message courant (String)
 le numéro du joueur (de 1 à 2)
page 5
17/04/2017
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
Par J. LAFORGUE
 le nom du joueur
 le temps chrono
 le numéro du joueur courant
 un thread qui gère les deux chronomètres
Les seules méthodes publiques de l'applicatif sont les méthodes de l'interface qu'il doit implémenter.
Lors de l'appel à la méthode addJoueur par l'IHM, l'applicatif mémorise le nouveau joueur, détermine son
numéro.
Lors de l'appel à la méthode jouer, l'applicatif détermine si le coup est un coup valide. Si ce n'est pas le cas alors
il avertit le joueur du coup invalide, sinon il joue son coup en mettant la grille à jour en conséquence. Puis il
détermine quel est le numéro du joueur suivant. Si aucun joueur ne peut jouer alors la partie est terminée.
L'applicatif à un thread qui décompte les chronomètres de chacun des joueurs.
2.
ARCHITECTURE
Le projet doit être fait suivant l'architecture type de répertoires et fichiers suivants :
projet1
build.xml
le fichier de configuration ant
compil.bat
le script de compilation de tout le projet
run.bat
le scripts d'exécution du projet
MainProjet1.java
le programme java du projet1
cnamp
app
AppSudoku.java
AppSudokuInt.java
ihm
IhmSudoku.java
3.
TRAVAUX A REALISER
Dans le cadre de ce premier projet, les 2 joueurs ne sont pas en réseau. Vous n'utilisez donc pas RMI mais une
programmation dans un programme unique (MainProjet1.java).
Je vous demanderai dans le cadre du projet 2, de transformer ce projet en une application RMI qui permettra à 2
joueurs de jouer en réseau.
La réalisation doit se faire en respectant la norme de codage présentée.
Je rappelle qu'une contrainte forte est que tous les attributs non statiques d'une classe publique doivent être
privées.
Ne changez pas l'architecture des répertoires imposée.
Si besoin vous pouvez ajouter de nouveaux packages (justifier votre choix).
4.
PLANNING
Vous avez 3 séances de TP pour réaliser ce projet
5.
OBJECTIFS DU PROJET
-
Découvrir l'environnement de développement
Exploiter la documentation Java en ligne
Réaliser une IHM Java
Utiliser les interfaces Java
Utiliser un thread Java dans un cas simple.
page 6
LES SYSTEMES REPARTIS (NFP 215)
Projet 1
-
Servir de base pour la réalisation des projets suivants
page 7
17/04/2017
Par J. LAFORGUE
Téléchargement