5. Objectifs DU PROJET

publicité
17/04/2017
LES APPLICATIONS DISTRIBUEES
Cnam
Projet 1
CONSERVATOIRE
NAT IONAL
LES
APPLICATIONS
DISTRIBUEES
Par J. LAFORGUE
IPSTCNAM
Cycle C
D E S ART S
ET M ET IERS
PROJET 1
Années 2004-2005
TOULOUSE
J. LAFORGUE
CENTRE REGIONAL
MIDI - PYRENEES
1.
DESCRIPTION
On se propose de réaliser une classe Java permettant de gérer une grille graphique NxM dans
laquelle on peut afficher et déplacer différents carrés de couleurs différentes.
Cette classe sera utilisée dans le cadre du projet2. Vous pourrez alors soit réaliser le projet 2
avec ma correction soit avec votre réalisation (en ayant fait les corrections demandées).
Les services de cette classe sont :
 ajouter un symbole dans la grille aléatoirement dans une case libre de la grille
 changer les noms des boutons de l'IHM
 passer en paramètre de la classe les traitements des boutons
 ajouter aléatoirement un élément dans une des cases libres de la grille
 déplacer un élément dans une des 8 directions sachant que la grille est gérée
comme un Tore. Un déplacement consiste à effacer la case de départ et à
dessiner dans la case d'arrivée.
Cette classe gère un tableau d'entier à 2 dimensions contenant l'état de la grille:
si 0 alors la case est libre
si 1 la case contient un élément de couleur 0
si 2 la case contient un élément de couleur 1
...
On gère jusqu'à 10 couleurs différentes.
......
Cette classe est testée par un programme principal qui définit les traitements suivants
accessibles en cliquant dans un des boutons :
 Créer 10 carrés de couleur 0
 Créer 10 carrés de couleur 1
 Créer un "agent" positionné aléatoirement dans la grille.
Un "agent" est un objet de la classe Agent qui est un thread dont la méthode
run consiste en un déplacement aléatoire dans les 8 directions.
page 1
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
Aperçu de la correction de l'IHM :
2.
ARCHITECTURE
Le projet doit être fait suivant l'architecture de répertoires et fichiers suivants :
projet1
compil.sh
run.sh
GrillePP.java
grille
GrilleControleInt.java
GrilleIHM.java
agent
Agent.java
3.
TRAVAUX A REALISER
On se propose de créer un package grille contenant les classes et interfaces suivantes :
GrilleControleInt.java
package grille;
public interface GrilleControlesInt
page 2
17/04/2017
LES APPLICATIONS DISTRIBUEES
Projet 1
Par J. LAFORGUE
{
public void action(int num_action,GrilleIHM ihm);
}
Cette interface permet de définir l'action générique utilisée par chacun des boutons.
num_action est le numéro du bouton (de 1 à 10)
ihm est la grille IHM
GrilleIHM.java
Ce fichier contient au moins les 3 classes :
 public class GrilleIHM
cette classe est la classe principale qui crée notre IHM
 class ControleAction implements ActionListener
cette classe est une classe interne permettant de réaliser les actions des
boutons de l'IHM
 class GrilleCanvas extends Canvas
cette classe est une classe permettant de surcharger la méthode paint du
canvas créé dans notre IHM afin de rafraichir automatiquement la zone
graphique.
Le code de ces 2 classes internes est le suivant:
class ControleAction implements ActionListener
{
// l'ihm
GrilleIHM _grilleihm;
int _type;
// Constructeur afin de designer le type d'action
public ControleAction(GrilleIHM grilleihm,int type)
{
_grilleihm=grilleihm;
_type=type;
}
// Traitement des actions
public void actionPerformed(ActionEvent e)
{
if (_grilleihm.getAnyActions()!=null)
{
_grilleihm.getAnyActions().action(_type,_grilleihm);
}
}
}
class GrilleCanvas extends Canvas
{
GrilleIHM _g;
public GrilleCanvas(GrilleIHM g)
{
_g = g;
}
public void paint(Graphics g)
{
page 3
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
_g.afficherGrille();
}
}
Le constructeur de la classe GrilleIHM est de la forme :
public GrilleIHM(
int nbX,
int nbY,
GrilleControlesInt anyActions)
nbX est le nombre de colonnes de la grille
nbY est le nombre de lignes de la grille
anyActions est l'interface des traitements des boutons
La taille, en pixel, des cellules est égal à 15.
Le nombre de boutons créés est égal à 10.
L'IHM principal est un Panel qui est accessible par la méthode
public Panel getPanel()
Cette méthode est utilisée par GrillePP afin d'ajouter notre IHM dans une fenêtre
principale (Frame) crée dans le programme principal.
Ce panel est composé de 2 autres panels. Le premier contient les boutons, le deuxième
contient le canvas (la grille).
Afficher la grille consiste à effacer la zone graphique du canvas et à afficher la grille (lignes
horizontales et verticales) puis à dessiner les carrés et les ronds en fonction des valeurs
contenues dans le tableau à 2 dimension.
Exemple de code pour afficher une ligne est :
Graphics g = _canvas.getGraphics();
g.drawLine(x1,y1,x2,y2);
Exemple de code pour afficher un carré rouge est :
Graphics g = _canvas.getGraphics();
g.setColot(Color.red);
g.fillRect(x,y,xidth,height);
Les services de la classe à réaliser correspondent aux méthodes suivantes :
public Point ajouterAleat(int marque)
cette méthode ajoute dans la grille un carré aléatoirement dans
un des cases libres. La couleur est déterminée en fonction de
la marque.
Si il n'y a pas de cases libres alors retourne null; la grille
et pleine.
public Point deplacer(int x,int y,int sensX,int sensY)
cette méthode déplace un élément situé en (x,y) vers (x',y').
x' = x + sensX
y' = y + sensY
avec
page 4
LES APPLICATIONS DISTRIBUEES
Projet 1
sensX = -1,
sensY = -1,
la méthode
d'un Point.
Si la case
null.
17/04/2017
Par J. LAFORGUE
0, ou 1
0 ou -1
retourne la nouvelle position (x,y) sous la forme
destinataire est occupée alors la méthode retourne
Pour obtenir un entier aléatoire entre N et M (bornes incluses) :
Random rdm = new Random();
....
valeur_aleatoire = N + Math.abs(rdm.nextInt())% (M - N + 1);
entre 0 et N-1 :
Math.abs(rdm.nextInt())%N;
Dans le package agent, on crée la classe Agent
Agent.java
La classe Agent hérite de la classe Thread ou implémente l'interface Runnable.
Un agent contient sa position courante dans la grille (x,y) et la valeur de sa marque (de 1 à 10)
La méthode run consiste à réaliser une boucle sur un déplacement aléatoire dans la grille.
On ralenti chaque déplacement en utilisant l'instruction suivante:
try{Thread.sleep(250);}catch(Exception e){};
cette instruction attend 250 millisecondes
Cette instruction est à mettre dans la méthode run à chaque
ittération.
GrillePP.java
On crée un programme principal GrillePP permettant de tester la classe GrilleIHM et donc
d'exécuter le projet1.
On doit définir une classe interne qui implémente l'interface GrilleControlesInt afin de
définir les actions demandées. :
 création de 10 cases de marque 1
 création de 10 cases de marque 2
 création d'un agent sur une position aléatoire et exécution du thread associé.
GrillePP crée un Frame et crée une GrilleIHM qui est ajouté dans ce Frame.
Elle définie les noms des boutons de l'IHM.
page 5
LES APPLICATIONS DISTRIBUEES
Projet 1
4.
17/04/2017
Par J. LAFORGUE
PLANNING
Vous avez 3 séances de TP pour réaliser ce projet
5.
OBJECTIFS DU PROJET
-
Découvrir l'environnement de développement à travers un exemple simple
Exploiter la documentation Java en ligne
Réaliser une IHM Java
Utiliser une interface Java afin de réaliser un traitement générique
Utiliser des threads Java dans un cas simple.
Servir de base pour la réalisation du projet 2
page 6
Téléchargement