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<Partie> 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<nbLignes;x++) { for(int y=0;y<nbColonnes;y++) { imgJeton = new ImageIcon(jetonBlanc); JLabel lblJeton = new JLabel(imgJeton); lblGridLayOut[x][y] = lblJeton; panJeton.add(lblJeton); } } ReinitialiseP4(); cont.add(panJeton,BorderLayout.CENTER); cont.add(lblJouer,BorderLayout.SOUTH); }//ICI COMMENCE LE DEBUT public static void main(String[] args) { ObjectInputStream ois; try{// CRÉATION DU SOCKET ET CE QUI VA AVEC ! soc = new Socket("localHost", 3000); pw = new PrintWriter(new BufferedWriter(new OutputStreamWriter(soc.getOutputStream())), true); br = new BufferedReader(new InputStreamReader(soc.getInputStream( ) ) ); // ois= new ObjectInputStream(soc.getInputStream()); //ICI, LE MEC, (ou la mecque) ENTRE SON NOM unJoueurClient = new Joueur(JOptionPane.showInputDialog("Veuillez entrer votre nom avant de debuter la partie ")); pw.println(unJoueurClient.getNomJoueur());// QUI EST ENVOYER AU DIEU-SERVEUR unAutreJoueur = new Joueur(br.readLine());// QUI LUI RETOURNE UN NOOB ADVERSAIRE // ICI C'EST LE CODE MAUDIT QUI DOIT, normalement, // PRENDRE UN INTEGER DU SERVEUR, CET INTEGER SERA LE NO DU JOUEUR, SI 1 sa //VEUT DIRE QUIL EST PREMIER, si 2 DEUXIEME, SI 3 C'est que y'a un probleme System.out.println("Passe 5"); int noJoueur; noJoueur =Integer.parseInt(br.readLine()); unJoueurClient.setNoJoueur(noJoueur); System.out.println("Passe 6");// EN GROS SA FAUT JARRANGE,DONC OSEF if (tourAJouer){ unJoueurClient.setJetonJoueur(new Jeton("JetonRouge.gif",Color.red)); unAutreJoueur.setJetonJoueur(new Jeton("JetonBleu.gif",Color.blue)); joueursTours[0]=unJoueurClient; joueursTours[1]=unAutreJoueur; // etatDesBtn(false); }else{ unJoueurClient.setJetonJoueur(new Jeton("JetonBleu.gif",Color.blue)); unAutreJoueur.setJetonJoueur(new Jeton("JetonRouge.gif",Color.red)); joueursTours[0]=unAutreJoueur; joueursTours[1]=unJoueurClient; JOptionPane.showMessageDialog(null, "ABC"); } //CREATION DU FORM GrilleConnect4 GrilleDeJeu = new GrilleConnect4(); //PREND L'INTEGER ET DIT A QUI COMMENCER ! TADAM ! if (unJoueurClient.getNoJoueur() ==1){ tourAJouer=true; }else{ tourAJouer=false; etatDesBtn(false); } //MET LE NOM DU JOUEUR CURRENT EN HAUT, TRES IMPORTANT SINON LA PROF VA SE FUCKER //AVEC DEUX FENETRE IDENTIQUE GrilleDeJeu.setTitle("Connect 4 " + unJoueurClient.getNomJoueur()); //ABRACADABRA APPARAIT FENETRE DE JEU ! GrilleDeJeu.setVisible(true); //MA PARTIE EN COURS, JE NE GERE PAS ENCORE LA FIN DUNE PARTIE...A suivre dans //le prochain episode while(partieEnCours){ rempliPanneau(Integer.parseInt(br.readLine()),false); etatDesBtn(true); } // lesParties= (ArrayList<Partie>)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<nbColonnes;i++){ btnCol[i].setVisible(btnEtat); } } public static boolean continuerPartie(){ return true; } private void ReinitialiseP4(){ for(int x=0;x<nbLignes;x++) { for(int y=0;y<nbColonnes;y++) { lblGridLayOut[x][y].setIcon(new ImageIcon(jetonBlanc)); } } for(int x=0;x<nbColonnes;x++){ hauteurCol[x] = nbLignes-1; } }}