1 2 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