LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
page 1
Cnam
CONSERVATOIRE
N A T I O N A L
D E S A R T S
E T M E T I E R S
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 depart 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.
IPST-
CNAM
Cycle C
Années 2004-2005
TOULOUSE
LES
APPLICATIONS
DISTRIBUEES
PROJET 1
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
page 2
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
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
page 3
{
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)
{
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
page 4
_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
LES APPLICATIONS DISTRIBUEES
Projet 1
17/04/2017
Par J. LAFORGUE
page 5
sensX = -1, 0, ou 1
sensY = -1, 0 ou -1
la méthode retourne la nouvelle position (x,y) sous la forme
d'un Point.
Si la case destinataire est occupée alors la méthode retourne
null.
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.
1 / 6 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans l'interface ou les textes ? Ou savez-vous comment améliorer l'interface utilisateur de StudyLib ? N'hésitez pas à envoyer vos suggestions. C'est très important pour nous!