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

Précédente ] Remonter ] Suivante ]