import java.awt.BorderLayout; import java.awt.Color; import java.awt.Container; import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.ObjectInputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.ConnectException; import java.net.Socket; import java.net.UnknownHostException; import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import java.io.StreamTokenizer; class GrilleConnect4 extends JFrame{ private static final long serialVersionUID = 3151245389790032908L; static ArrayList lesParties; static boolean partieEnCours=true; private static int nbColonnes=7, nbLignes=6; private static int[] hauteurCol; private static Joueur unJoueurClient; private static Joueur unAutreJoueur; private static ImageIcon tablJeton[][]= new ImageIcon[6][7]; private static PrintWriter pw; private static BufferedReader br; private static Socket soc; private static JButton btnCol[]= new JButton[nbColonnes]; private static Joueur joueursTours[]=new Joueur[2]; //Creation des composants de la fenetre private Container cont; private MenuBar mnuBar; //Creation des panneaux private JPanel panBtNom; private JPanel panBtn; private JPanel panNomClrJeton; private JLabel nomAutreJoueur,precisionJoueur; private static JLabel lblJouer = new JLabel(); private JPanel panJeton; private static boolean tourAJouer=true; //Creation des l'imageIcon pour les jetons et des chemins private ImageIcon imgJeton; static final String jetonBlanc = "JetonDefaut.gif"; static final String flecheBtn = "Fleche.gif"; //La liste des label qui ont des images en background private static JLabel[][] lblGridLayOut; public GrilleConnect4(){ //Titre ajouter dans le main, Titre + nom du joueur setBounds(150, 150, 600, 500); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); cont = getContentPane(); lblJouer.setAlignmentY(CENTER_ALIGNMENT); mnuBar = new MenuBar(); mnuBar.add(new Menu("Fichier")); mnuBar.add(new Menu("?")); // (mnuBar.getMenu(0)).add(new MenuItem("Exit")); (mnuBar.getMenu(0)).getItem(0).addActionListener(new ClicExit()); // (mnuBar.getMenu(1)).add(new MenuItem("Statistique")); (mnuBar.getMenu(1)).getItem(0).addActionListener(new ClicStatistique()); setMenuBar(mnuBar); precisionJoueur= new JLabel(); nomAutreJoueur= new JLabel(); cont.setLayout(new BorderLayout()); lblGridLayOut = new JLabel[nbLignes][nbColonnes]; hauteurCol = new int[nbColonnes]; panBtNom = new JPanel (new GridLayout(2,1)); panBtn = new JPanel(new GridLayout(1,nbColonnes,2,2)); panBtn.setBackground(Color.white); panNomClrJeton = new JPanel (new FlowLayout()); panNomClrJeton.setBackground(Color.white); panNomClrJeton.add(precisionJoueur); panNomClrJeton.add(nomAutreJoueur); nomAutreJoueur.setForeground(joueursTours[1].getJetonJoueur().getCouleurJeton()); nomAutreJoueur.setText(" Contre " +unAutreJoueur.getNomJoueur()); precisionJoueur.setForeground(joueursTours[0].getJetonJoueur().getCouleurJeton()); precisionJoueur.setText("Vous jouez avec les jetons de cette couleur !"); panJeton = new JPanel(new GridLayout(nbLignes,nbColonnes,2,2)); panJeton.setBackground(Color.white); // Ajouts des boutons, au nombre des colonnes int k=0; for (JButton i :btnCol) { i = new JButton(new ImageIcon(flecheBtn)); i.setName(String.valueOf(k)); i.setSize(70, 70); i.setBackground(Color.white); i.addActionListener(new ClicBouton()); btnCol[k]=i; panBtn.add(i); k++; } panBtNom.setAlignmentX(CENTER_ALIGNMENT); panBtNom.add(panNomClrJeton); panBtNom.add(panBtn); cont.add(panBtNom,BorderLayout.NORTH); // Ajouts des jetons defauts dans le formulaire for(int x=0;x)ois.readObject(); }catch(UnknownHostException e){ JOptionPane.showMessageDialog(null,e.toString() +" Erreur du cote client"); System.exit(0); /* }catch(ClassNotFoundException e){ JOptionPane.showMessageDialog(null,e.toString() +" Erreur du cote client"); System.exit(0);*/ }catch(ConnectException e){ JOptionPane.showMessageDialog(null, "Le serveur est déjà occupé avec deux joueurs."); System.exit(0); }catch (IOException e){ JOptionPane.showMessageDialog(null,e.toString() +" Erreur du cote client"); System.exit(0); } } // Mes évènements : Clic dans le menu, clic sur les boutons du tableau. public class ClicExit implements ActionListener { public void actionPerformed(ActionEvent e) { try{ partieEnCours=false; soc.close(); System.exit(0); }catch (IOException err){ JOptionPane.showMessageDialog(null, "Erreur du cote client, lors de la fermeture"); System.exit(0); } } } public class ClicStatistique implements ActionListener { public void actionPerformed(ActionEvent e){ //Requete au serveur pour les statistiques de Partie String champs=""; for (Partie p : lesParties){ champs+="Premier joueur : " + p.getJoueurUn()+ ", second joueur : " + p.getJoueurDeux()+ ", le gagnant : " +p.getLeGagnant() +", le nombre de coup joué : " + p.getNombreCoupJouer() + "\n"; } JOptionPane.showMessageDialog(null, "Voici les parties joués depuis le dernier démarrage du serveur :" + "\n" + champs); } } public class ClicBouton implements ActionListener { public void actionPerformed(ActionEvent e){ JButton sender = (JButton)e.getSource(); int colClicker = Integer.parseInt(sender.getName()); rempliPanneau(colClicker,true); } } public static void rempliPanneau(int indexClic,boolean envoi){ if(tourAJouer){ //(lblGridLayOut[hauteurCol[indexClic]][indexClic]).setIcon(new ImageIcon("JetonRouge.gif")); (lblGridLayOut[hauteurCol[indexClic]][indexClic]).setIcon( joueursTours[0].getJetonJoueur().getImgJeton()); tablJeton[hauteurCol[indexClic]][indexClic]=( joueursTours[0].getJetonJoueur().getImgJeton()); tourAJouer=false; lblJouer.setForeground(joueursTours[1].getJetonJoueur().getCouleurJeton()); lblJouer.setText("C'est a "+joueursTours[1].getNomJoueur()+" jouer !"); }else{ //(lblGridLayOut[hauteurCol[indexClic]][indexClic]).setIcon(new ImageIcon("JetonBleu.gif")); (lblGridLayOut[hauteurCol[indexClic]][indexClic]).setIcon( joueursTours[1].getJetonJoueur().getImgJeton()); tablJeton[hauteurCol[indexClic]][indexClic]=( joueursTours[1].getJetonJoueur().getImgJeton()); tourAJouer=true; lblJouer.setForeground(joueursTours[0].getJetonJoueur().getCouleurJeton()); lblJouer.setText("C'est a "+joueursTours[0].getNomJoueur()+" jouer !"); //lblJouer.setText("C'est a ****MOI****, de jouer"); } partieEnCours=continuerPartie(); hauteurCol[indexClic]--; if(hauteurCol[indexClic]<0){ btnCol[indexClic].setEnabled(false); } if (envoi){ etatDesBtn(false); pw.println(Integer.toString(indexClic)); } } public static void etatDesBtn(boolean btnEtat){ for(int i=0;i