| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
 100
 101
 102
 103
 104
 105
 106
 107
 108
 109
 110
 111
 112
 113
 114
 115
 116
 117
 118
 119
 120
 121
 122
 123
 124
 125
 126
 127
 128
 129
 130
 131
 132
 133
 134
 135
 136
 137
 138
 139
 140
 141
 142
 143
 144
 145
 146
 147
 148
 149
 150
 151
 152
 153
 154
 155
 156
 157
 158
 159
 160
 161
 162
 163
 164
 165
 166
 167
 168
 169
 170
 171
 172
 173
 174
 175
 176
 177
 178
 179
 180
 181
 182
 183
 184
 185
 186
 187
 188
 189
 190
 191
 192
 193
 194
 195
 196
 197
 198
 199
 200
 201
 202
 203
 204
 205
 206
 207
 208
 209
 210
 211
 212
 213
 214
 215
 216
 217
 218
 219
 220
 221
 222
 223
 224
 225
 226
 227
 228
 229
 230
 231
 232
 233
 234
 235
 236
 237
 238
 239
 240
 241
 242
 243
 244
 245
 246
 247
 248
 249
 250
 251
 252
 253
 254
 255
 256
 257
 258
 259
 260
 261
 262
 263
 264
 265
 266
 267
 268
 269
 270
 271
 272
 273
 274
 275
 276
 277
 278
 279
 280
 281
 282
 283
 284
 285
 286
 287
 288
 289
 290
 291
 292
 293
 294
 295
 296
 297
 298
 299
 300
 301
 302
 303
 304
 305
 306
 307
 308
 309
 310
 311
 312
 313
 314
 315
 316
 317
 318
 319
 320
 321
 322
 323
 324
 325
 326
 327
 328
 329
 330
 331
 332
 333
 334
 335
 336
 337
 338
 339
 340
 341
 342
 343
 344
 345
 346
 347
 348
 349
 350
 351
 352
 353
 
 | 
import javax.swing.JFrame;
import java.awt.Dimension;
import javax.swing.JPanel;
import java.awt.Rectangle;
import javax.swing.BorderFactory;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.JLabel;
import javax.swing.JTextField;
import java.awt.Color;
public class FenetreJeu extends JFrame {
	private static final long serialVersionUID = 42L; //serialVersionUID permet d'affecter un numéro de version à la classe
	//construction tableau echequier
	private Echiquier e; // echiquier
	private JLabel[][] tab; // tableau de JLabels:champs non modifiable
	private JPanel panelControle = new JPanel(); // panel du haut
	private JPanel panelGrille = new JPanel(); // panel du bas ( grille )
	GridLayout gridLayout1 = new GridLayout();
	private JButton boutonDebuter = new JButton();
	private JTextField champTexte = new JTextField();
	private JButton boutonfin = new JButton();
	private JPanel panelblanc = new JPanel();
	private JPanel panelnoir = new JPanel();
	private JPanel panellens = new JPanel();
	private JPanel joueurblanc = new JPanel();
	private JPanel joueurnoir = new JPanel();
	JLabel banniere = new JLabel( new ImageIcon( "banniere.jpg"));
	JLabel jblanc = new JLabel( new ImageIcon( "jblanc.jpg"));
	JLabel jnoir = new JLabel( new ImageIcon( "jnoir.jpg"));
	
	 //Constructeur
	public FenetreJeu()
	{
		try {
			initialisationPanel(); //appelle methode initialisationPanel
		} catch (Exception e) {
			e.printStackTrace(); //affiche l'exception au moment de son appel
	    }
	}
	
	 // initialise la surface de jeu. Cre tout les elements et initialise leur position, leur couleur.. etc
	 
	private void initialisationPanel() throws Exception {
		tab = new JLabel[8][8]; // création du tableau de JLabel
		e = new Echiquier(); // création de l'échiquier
		this.getContentPane().setLayout(null); // permet de centrer le cadre du haut
		this.setSize(new Dimension(900, 700)); //dimension fenetre 
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); //fermer la fenetre
		this.setTitle("ECHEC"); //titre de la fenetre
		panelControle.setBounds(new Rectangle(160, 10, 550, 45)); //dimension du bloc du haut
		panelControle.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED)); //bordure cadre du haut
		panelControle.setLayout(null); //permet de voir le champ en haut
		panelGrille.setBounds(new Rectangle(160, 65, 550, 465)); //dimension de l'échiquier
		panelGrille.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
		panelGrille.setLayout(gridLayout1); // insert les colonnes et les lignes pour les cases
		gridLayout1.setColumns(8);
		gridLayout1.setRows(8);
		this.getContentPane().add(panelnoir, null); //visualiser le recuperateur de piece noir
		this.getContentPane().add(panelblanc, null);//visualiser le recuperateur de piece blanche
		this.getContentPane().add(panellens, null);//visualiser la banniere de lens
		this.getContentPane().add(joueurblanc, null);//visualiser le joueur blanc
		this.getContentPane().add(joueurnoir, null);//visualiser le joueur noir
		this.getContentPane().add(panelGrille, null); //visualiser lechiquier
		panelControle.add(boutonfin, null);
		panelControle.add(champTexte, null);
		panelControle.add(boutonDebuter, null);
		this.getContentPane().add(panelControle, null); //visualiser le champ text en haut
		boutonDebuter.setBounds(new Rectangle(15, 10, 130, 25));
		boutonDebuter.setText("Commencer");
		champTexte.setBounds(new Rectangle(160, 10, 215, 25));
		// les écouteurs
		boutonfin.setText("Terminé");
		boutonfin.setBounds(new Rectangle(390, 10, 130, 25));
		GestionnaireEvenement gest = new GestionnaireEvenement();
		boutonDebuter.addMouseListener(gest);
		boutonfin.addMouseListener(gest);
		
		//crŽation des labels
		panelblanc.setBounds(new Rectangle(30, 65, 90, 465)); // dimension recuperateur de piece blanche
		panelblanc.setBackground(new Color(255, 0, 0));
		panelblanc.setLayout(new FlowLayout());
		panelblanc.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
		panelnoir.setBounds(new Rectangle(750, 65, 90, 465)); // dimension recuperateur de piece noire
		panelnoir.setBackground(new Color(0, 0, 0));
		panelnoir.setLayout(new FlowLayout());
		panelnoir.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
		panellens.setBounds(new Rectangle(160, 550, 550, 100)); 
		panellens.setLayout(new FlowLayout());
		panellens.add(banniere);
		joueurblanc.setBounds(new Rectangle(20, 1, 115, 60)); // dimension joueur blanc
		joueurblanc.setLayout(new FlowLayout());
		joueurblanc.add(jblanc);
		joueurnoir.setBounds(new Rectangle(735, 1, 115, 60)); // dimension joueur noir
		joueurnoir.setLayout(new FlowLayout());
		joueurnoir.add(jnoir);
		
		
		//J'attribue la couleur aux JLabels
		int a = 1;
		for (int ligne = 0; ligne < 8; ligne++) {
			a = a == 1 ? 0 : 1;
			for (int colonne = 0; colonne < 8; colonne++) {
				tab[colonne][ligne] = new Case();
				panelGrille.add(tab[colonne][ligne]); // ajouter au Panel
				tab[colonne][ligne].setOpaque(true);
				tab[colonne][ligne].setHorizontalAlignment(SwingConstants.CENTER); //centre les pieces dans les cases
				tab[colonne][ligne].addMouseListener(gest); 
				if ((colonne + 1) % 2 == a)
					tab[colonne][ligne].setCouleur(true); //couleur des cases : blanc
					else
					tab[colonne][ligne].setCouleur(false); //couleur des cases : noir
					}
			}
		}
		
	}
	private void setCouleur() {
		if ( couppossible )
			setBackground(new Color(0, 240, 0)); //couleur d'un coup possible : vert
		if (blanc)
			setBackground(new Color(255, 255, 255)); //couleur des cases : blanc
		else
			setBackground(new Color(153, 153, 153)); //couleur des cases : noir
	}
	for (int ligne = 0; ligne < 8; ligne++) {
		   for (int colonne = 0; colonne < 8; colonne++) {
		      case = new Position(colonne,ligne);
		      Deplacement depalacement=new Deplacement(temp,case);
		      tab[colonne][ligne].setCoupPossible(deplacement.isValide());
		   }
		}
	for (int ligne = 0; ligne < 8; ligne++) {
		   for (int colonne = 0; colonne < 8; colonne++) {
		      tab[colonne][ligne].setCoupPossible(false);
		   }
		}
	public void setCoupPossible(boolean couppossible) {
	    this.couppossible=couppossible;
	    setCouleur();
	}
		public void setCouleur(boolean blanc) {
		    this.blanc=blanc;
		    setCouleur();
		}
	// classe privee pour la gestion des evenement de la souris.
	 
	private class GestionnaireEvenement extends MouseAdapter {
		Piece pieceTampon = null;
		ImageIcon iconeTampon;
		int ligneClic;
		int colonneClic;
		String couleurControle = "blanc";
		Position temp = null;
	
		public void mouseClicked(MouseEvent eve) {
			// si on clique sur le bouton débuter
			if (eve.getSource() == boutonDebuter) {
				//initialise le champ texte, apelle la methode debuter, et initialise toute les variables 
				champTexte.setText("blanc a vous de jouer");
                champTexte.setEnabled(false);
				boutonDebuter.setEnabled(false);
				e.debuter(); // appel
				String dossierIcone = "Icone/";
				char[] ordrePiece = { 'T', 'C', 'F', 'D', 'R', 'F', 'C', 'T' };
				int increment = 1;
				int ligne = 0;
				char couleur = 'N';
				Piece tempo = null;
				e.debuter(); // appel
				// Je place les icones des pieces sur leur cases respectives
				while (increment >= -1) {
					for (int ctr = 0; ctr <= 7; ctr++) {
						tab[ctr][ligne].setIcon(new ImageIcon(dossierIcone + ordrePiece[ctr] + couleur + ".gif"));
						switch(ordrePiece[ctr])
						{
						case 'T':
							tempo = new Tour(ligne < 5 ? "noir " : "blanc");
						break;
						
						case 'C':
							tempo = new Cavalier(ligne < 5 ? "noir" : "blanc");
						break;
						
						case 'F':
							tempo = new Fou(ligne < 5 ? "noir" : "blanc");
						break;
						
						case 'D':
							tempo = new Reine(ligne < 5 ? "noir" : "blanc");
						break;
						
						case 'R':
							tempo = new Roi(ligne < 5 ? "noir" : "blanc");
						break;
						}
						e.getCase(ctr, ligne).setPiece(tempo);
						tab[ctr][ligne + increment].setIcon(new ImageIcon(dossierIcone + 'P' + couleur + ".gif"));
						e.getCase(ctr, ligne + increment).setPiece(new Pion(ligne < 5 ? "noir" : "blanc"));
					}
					couleur = 'B';
					increment -= 2;
					ligne = 7;
				}
			}
			// si on clique sur le bouton recommencer
			else if (eve.getSource() == boutonfin) {
				//on appel la methode RAZ
				RAZ();
				
			}
			else if (eve.getSource() instanceof JLabel) // donc on a cliqué sur un Label
			{
				for (int i = 0; i < 8; i++)
					//on determine sur quel Jlabel on a clique
					for (int j = 0; j < 8; j++) 
						if (eve.getSource() == tab[j][i]) {
							ligneClic = i;
							colonneClic = j;
						}
					//si on a clique sur une case non vide et que le tampon n'est pas null
					if((e.getCase(colonneClic, ligneClic).getPiece() != null | pieceTampon != null) )
					{
						//si le tampon est null
						if(pieceTampon == null )
						{
							//si c'est au tour de la couleur de controle a jouer
							if(e.getCase(colonneClic, ligneClic).getPiece().getCouleur().equals(couleurControle)){
								//J'initialise la piece tampon a la piece sur laquelle on a clique
								pieceTampon = e.getCase(colonneClic, ligneClic).getPiece();
								iconeTampon = (ImageIcon)tab[colonneClic][ligneClic].getIcon();
								temp = new Position(colonneClic,ligneClic);
								tab[colonneClic][ligneClic].setBorder(BorderFactory.createLineBorder(new Color(255,0 ,0),5));
									
							}
							
						}
						else
						{
							//je cree un deplacement
							Deplacement deplacement = new Deplacement(temp, new Position(colonneClic,ligneClic));
							//je verifie si le deplacement est valide, si le chemin est possible et si il est possible, pour un pion de manger la piece
							if ((pieceTampon.estValide(deplacement) && e.cheminPossible(deplacement)) | e.captureParUnPionPossible(deplacement))
							{
								//je cree un jLabel avec l'icone de la piece manger
								JLabel manger = new JLabel(tab[colonneClic][ligneClic].getIcon());
								manger.setHorizontalAlignment(SwingConstants.CENTER);
								
								//je l'ajoute au bon jPanel
								if (couleurControle.equals("blanc"))
									panelblanc.add(manger);
								else		
									panelnoir.add(manger);
								
								// je verifie si la piece manger est un roi, si oui le jeu est termine et l'utilisateur peut choisir si il veut continuer a jouer ou non
								if(e.getCase(colonneClic, ligneClic).getPiece() instanceof Roi)
								{
									if(JOptionPane.showConfirmDialog(null, "Felicitation vous avez gagne ! Desirez-vous jouer de nouveau ?\n", "Victoire !!!", JOptionPane.YES_NO_OPTION) == 0){
										RAZ();
										tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0),0)); // j'enleve le cadre rouge de la piece selectionne
									}
									else
										System.exit(0);
								}
								else//si on depose la piece sur une case vide
								{
									//on met le tampon sur la case vide et on vide le tampon apres
									e.getCase(temp.getColonne(), temp.getLigne()).setPiece(null);
									tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(0, 0, 0),0)); // j'enleve le cadre rouge de la piece selectionne
									tab[colonneClic][ligneClic].setIcon(iconeTampon);
									e.getCase(colonneClic, ligneClic).setPiece(pieceTampon); // pour pouvoir le rebouger plusieurs fois dans une partie
									tab[temp.getColonne()][temp.getLigne()].setIcon(null); // permet de faire bouger la piece selectionne en supprimant la piece bouger de sa position initiale 
	
									pieceTampon = null;
									iconeTampon = null;
									temp = null;
	
									couleurControle = couleurControle.equals("blanc") ? "noir" : "blanc";
									champTexte.setText(couleurControle + " , a vous de jouer");
                                    		
								}
							}
							else
							{
								tab[temp.getColonne()][temp.getLigne()].setBorder(BorderFactory.createLineBorder(new Color(255, 0, 0),0));
								pieceTampon = null;
								iconeTampon = null;
								temp = null;
							}
						
						}
					}
					
				}
		}
	}
	//Je remet tout les attributs de la classe a 0
	public void RAZ()
	{
		for (int ligne = 0; ligne < 8; ligne++) 
			for (int colonne = 0; colonne < 8; colonne++) {
				tab[colonne][ligne].setIcon(null);
				e.getCase(colonne, ligne).setPiece(null);
				
			}
		champTexte.setText("");
		boutonDebuter.setEnabled(true);
		e.debuter();
		panelblanc.removeAll();
		panelblanc.repaint();
		panelnoir.removeAll();
		panelnoir.repaint();
	}
	// main pour pouvoir exécuter l'interface graphique
	public static void main(String[] args) {
		FenetreJeu j = new FenetreJeu();
		j.setVisible(true);
		j.setLocationRelativeTo(null);
		j.setDefaultCloseOperation(EXIT_ON_CLOSE); // ferme le processus associé
	}
} | 
Partager