Classe Client
import java.awt.*;
import java.awt.event.*;
import java.rmi.*;
import java.rmi.server.*;
/** <B>Cahier des charges :</B>
*
* <p>Classe principale définissant la fenêtre et la connexion des clients,
implémentant les méthodes définies dans l'interface ClientDistant.
*
* @author Guillaume BLANC
* @author Cyrille FLAMBART
* @version JDK 1.1.6
* @see Serveur
* @see DamierDistant
* @see Damier
* @see ClientDistant
* @see DamierGraphique
* @see Pion
* @see InfosJoueur
*
*
*/
//****************************Classe
Client*********************************************************
/*Cette classe est la classe principale qui définie la fenêtre
contenant le damierServeur, les pions, les joueurs ainsi que les boutons
"Nouvelle Partie" et "Annuler Déplacement"*/
public class Client extends UnicastRemoteObject implements WindowListener, ActionListener,
MouseListener, ClientDistant {
private DamierGraphique damierGraphique;
private InfosJoueur infosJoueur1, infosJoueur2;
private static DamierDistant damierDistant;
private static Client client;
private static Frame f;
private static Pion monPion;
private static int monType;
protected static Musique musique = new Musique();
private Images images = new Images();
private BoiteDialogue boiteDialogue;
//****************************Constructeur
Client*****************************************************
/** Constructeur de la classe <code>Client</code> construisant la fenêtre
incluant
* un menu déroulant, deux panels d'affichage des scores et un constituant le damier.
*/
//Constructeur de la classe Client
public Client() throws RemoteException{
f = new Frame();
damierGraphique = new DamierGraphique();
infosJoueur1 = new InfosJoueur(Pion.France, damierGraphique.getAQui(), "France",
damierGraphique.compterPions(Pion.France));
infosJoueur2 = new InfosJoueur(Pion.Bresil, damierGraphique.getAQui(), "Bresil",
damierGraphique.compterPions(Pion.Bresil));
MenuBar menuJeu = new MenuBar();
Menu outils = new Menu("Outils");
menuJeu.add(outils);
MenuItem newPartie = new MenuItem("Nouvelle Partie");
outils.add(newPartie);
newPartie.addActionListener(this);
MenuItem annuler = new MenuItem("Annuler Action");
outils.add(annuler);
annuler.addActionListener(this);
MenuItem quitter = new MenuItem("Quitter");
outils.add(quitter);
quitter.addActionListener(this);
f.setMenuBar(menuJeu);
f.removeAll();
f.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
f.add(infosJoueur1);
f.add(damierGraphique);
f.add(infosJoueur2);
f.validate();
f.setTitle("Le jeu de dames des Champions du Monde");
f.setSize(400, 450);
f.setLocation(50,50);
f.setBackground(Color.lightGray);
f.setResizable(true);
f.addWindowListener(this);
f.addMouseListener(this);
}//Fin du constructeur Client()
//****************************Méthode
main*********************************************************
/** Méthode de création d'une instance de client connecté au serveur
* pouvant communiquer avec ce dernier grâce à l'interface DamierDistant.
*
* @param <code>arg[]</code> Tableau d'arguments.
*/
public static void main(String arg[]){
try{
System.setSecurityManager(new RMISecurityManager());
damierDistant = (DamierDistant) Naming.lookup("damier");
client = new Client();
int reponseServeur = damierDistant.ajouterClient(client);
if (reponseServeur == 0)
System.out.println("Il ya déjà suffisamment de joueurs,
désolé");
else{
if (reponseServeur == 1){
monType = Pion.Bresil;
System.out.println("On attend un nouveau
client...");
}//Fin du if (rep == 1)
if (reponseServeur == 2){
monType = Pion.France;
debuterJeu();
}//Fin du if (rep == 2)
monPion = new Pion(monType, 0, 0);
}//Fin du else du if (rep == 0)
}//Fin du try
catch (Exception e){
System.out.println("Probleme dans le MAIN du Client : " + e);
}//Fin du catch (Exception e)
}//Fin du main
//*******************GESTION DES ACTIONS SOURIS, FENETRE, MENU
DEROULANT*******************
//****************************Méthode
actionPerformed**************************************
/** Méthode définissant les actions sur le menu déroulant.
*
* @param <code>evt</code> Evénement relevé.
*/
//Gestion des évènements des contrôles de la fenêtre
public void actionPerformed(ActionEvent evt)
{
//Si le joueur clique sur le menu "Nouvelle Partie", on relance le jeu
if(evt.getActionCommand().equals("Nouvelle Partie")){
try{
damierDistant.nouvellePartie();
}
catch (Exception e){
System.out.println("Un probleme est
survenue lors de l'appel du serveur 1 : " + e);
}
}
//Si le joueur clique sur le menu "Annuler Dernière Action"
if(evt.getActionCommand().equals("Annuler Action"))
{
if (monType != damierGraphique.getAQui())
{
try{
damierDistant.annulerDeplacement();
musique.Jouer("./son/Halliday.au");
}
catch (Exception e){
System.out.println("Un
probleme est survenue lors de l'appel du serveur 2 : " + e);
}
}
}
//Si le joueur clique sur le menu "Quitter", on quitte le jeu
if(evt.getActionCommand().equals("Quitter")){
try{
damierDistant.deconnecterClients(this);
}
catch (Exception e){
System.out.println("Un probleme est
survenue lors de l'appel du serveur 3 : " + e);
}
System.exit(0);
}
}//Fin de la méthode actionPerformed
//****************************Méthode
windowClosing****************************************
/** Méthode définissant les actions sur la fenêtre.
*
* @param <code>evt</code> Evénement relevé.
*/
public void windowClosing(WindowEvent evt){
try{
damierDistant.deconnecterClients(this);
}
catch (Exception e){
System.out.println("Un probleme est survenue lors de l'appel du
serveur 4 : " + e);
}
System.exit(0);
}//Fin de la méthode windowClosing
public void windowClosed(WindowEvent evt){}
public void windowDeiconified(WindowEvent evt){}
public void windowIconified(WindowEvent evt){}
public void windowActivated(WindowEvent evt){}
public void windowDeactivated(WindowEvent evt){}
public void windowOpened(WindowEvent evt){}
//****************************Méthode
mousePressed*****************************************
/** Méthode définissant les actions sur le click d'un bouton de la souris.
*
* @param <code>evt</code> Evénement relevé.
*/
//Gestion des évènements sur les pions
public void mousePressed(MouseEvent evt){
try{
monPion = (Pion)(evt.getComponent());
/* On controle que le pion sur lequel le client
a clique lui appartient.ou qu'il s'agit d'une case blanche.
Si oui, on fait redessiner les clients. */
if (monType == damierGraphique.getAQui()){
if ((monType ==
monPion.type) || ((damierGraphique.positionDebut != null) && (monPion.type ==
Pion.caseBlanche))){
try{
damierDistant.redessinerClients(client);
}
catch
(Exception e){
System.out.println("Un
probleme est survenue lors de l'appel du serveur 5 : " + e);
}//Fin du catch
(Exception e)
}//Fin du if (monPion.type ==
((Pion)(evt.getComponent())).type)
}//Fin du if (monType == damierGraphique.getAQui())
}//Fin du try
catch (ClassCastException cce){}
}//Fin de la méthode mousePressed
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void mouseDragged(MouseEvent e){}
public void mouseMoved(MouseEvent e){}
//****************************Méthode
redessineToi*****************************************
/** Méthode permettant d'actualiser le damier.
*
* @param <code>pion</code> Instance du pion qui a fait l'objet d'un changement
d'état.
*/
public void redessineToi(Pion pion) throws RemoteException{
damierGraphique.setPionJoue(pion);
modifierInfo();
}
//****************************Méthode
modifierInfo*****************************************
/** Méthode permettant d'actualiser les panels de scores.
*
* @param <code>evt</code> Evénement relevé.
*/
public void modifierInfo(){
if (damierGraphique.getAQui() == monType){
if (monType == Pion.France){
infosJoueur1.setMessage("Jouez !!");
infosJoueur2.setMessage("Bresil");
}
else{
infosJoueur1.setMessage("France");
infosJoueur2.setMessage("Jouez !!");
}
}
else{
if (monType == Pion.France){
infosJoueur1.setMessage("Attendez");
infosJoueur2.setMessage("Bresil");
}
else{
infosJoueur1.setMessage("France");
infosJoueur2.setMessage("Attendez");
}
}
infosJoueur1.setScore(damierGraphique.compterPions(Pion.France));
infosJoueur2.setScore(damierGraphique.compterPions(Pion.Bresil));
infosJoueur1.setAQui(damierGraphique.getAQui());
infosJoueur2.setAQui(damierGraphique.getAQui());
if (damierGraphique.compterPions(Pion.France) == 20){
try{
damierDistant.gagne(Pion.France);
}
catch (Exception e){
System.out.println("Un probleme est
survenue lors de l'appel du serveur 6 : " + e);
}
}
else
if (damierGraphique.compterPions(Pion.Bresil)==20){
try{
damierDistant.gagne(Pion.Bresil);
}
catch (Exception e){
System.out.println("Un
probleme est survenue lors de l'appel du serveur 7 : " + e);
}
}
}//Fin de la méthode modifierInfo
//****************************Méthode
debuterJeu*******************************************
/** Méthode permettant d'afficher les deux clients.
*
*/
public static void debuterJeu(){
try{
damierDistant.redessinerClients(client);
}
catch (Exception e){
System.out.println("Un probleme est survenue lors de l'appel du
serveur 8 : " + e);
}//Fin du catch (Exception e)
}//Fin de la méthode debuterJeu
//****************************Méthode
getPionJoue******************************************
/** Méthode retournant le pion courant.
*
*/
public Pion getPionJoue() throws RemoteException{
return monPion;
}
//****************************Méthode
annulerDeplacement***********************************
/** Méthode permettant de revenir à l'état précédent du jeu.
*
*/
public void annulerDeplacement() throws RemoteException{
damierGraphique.annulerDeplacement();
modifierInfo();
}
//****************************Méthode
nouvellePartie***************************************
/** Méthode redessinant la fenêtre du client.
*
*/
public void nouvellePartie() throws RemoteException{
damierGraphique = new DamierGraphique();
infosJoueur1 = new InfosJoueur(Pion.France, damierGraphique.getAQui(), "France",
damierGraphique.compterPions(Pion.France));
infosJoueur2 = new InfosJoueur(Pion.Bresil, damierGraphique.getAQui(),
"Bresil", damierGraphique.compterPions(Pion.Bresil));
f.removeAll();
f.setLayout(new FlowLayout(FlowLayout.CENTER,10,10));
f.add(infosJoueur1);
f.add(damierGraphique);
f.add(infosJoueur2);
f.validate();
modifierInfo();
}
//****************************Méthode
deconnecteToi****************************************
/** Méthode de fermeture de la fenêtre du client et de ce fait sa connexion.
*
*/
public void deconnecteToi() throws RemoteException{
//boiteDialogue=new BoiteDialogue("Déconnexion",0,"Le
serveur va vous deconnecter","Ppd.au");
//boiteDialogue.show();
//while (boiteDialogue.isShowing()){}
//f.dispose();
System.exit(0);
}
//****************************Méthode
gagneClient******************************************
/** Méthodes permettant d'afficher une boîte de dialogue en fin de jeu selon l'issue du
jeu.
* @param <code>type</code> Le type du pion qui a gagné.
*
*/
public void gagneClient(int type)throws RemoteException{
if (type == monType)
boiteDialogue = new BoiteDialogue("We are
the CHAMPIONS",0,"Bravo vous êtes les Champions","Stallone.au");
else
boiteDialogue = new BoiteDialogue("We are not the
CHAMPIONS",0,"Desole vous avez perdu","Leotard.au");
boiteDialogue.show();
}
//****************************Méthode
afficheToi*******************************************
/** Méthode affichant le client avec un son.
*
*/
public void afficheToi(){
f.setVisible(true);
musique.Jouer("./son/chirac2.au");
}//Fin de la méthode afficheToi
}//Fin de la classe Client