2026-04-06 20:18:32 +02:00
|
|
|
import javax.swing.*;
|
|
|
|
|
import java.awt.*;
|
|
|
|
|
|
|
|
|
|
// Fenetre principal du jeu (ou il y a la grille de boutons)
|
|
|
|
|
|
|
|
|
|
public class FenetreJeu {
|
|
|
|
|
|
|
|
|
|
private JFrame fenetre;
|
|
|
|
|
private JPanel panneauGrille;
|
|
|
|
|
private JButton[][] boutons;
|
|
|
|
|
private Grille grille;
|
|
|
|
|
|
|
|
|
|
public FenetreJeu(Grille g) {
|
|
|
|
|
this.grille = g;
|
|
|
|
|
int l = grille.getLigne();
|
|
|
|
|
int c = grille.getColonne();
|
|
|
|
|
|
|
|
|
|
fenetre = new JFrame("Demineur");
|
2026-04-08 17:16:52 +02:00
|
|
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
2026-04-06 20:18:32 +02:00
|
|
|
|
|
|
|
|
panneauGrille = new JPanel();
|
|
|
|
|
panneauGrille.setLayout(new GridLayout(l, c));
|
|
|
|
|
boutons = new JButton [l][c];
|
|
|
|
|
|
|
|
|
|
// creation de tous les boutons de la grille
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < l; i++) {
|
|
|
|
|
for (int j = 0; j < c; j++) {
|
|
|
|
|
boutons[i][j] = new JButton();
|
|
|
|
|
boutons[i][j].setPreferredSize(new Dimension(45, 45));
|
|
|
|
|
boutons[i][j].setFont(new Font("Arial", Font.BOLD, 16));
|
|
|
|
|
// ecouteur de clics
|
|
|
|
|
boutons[i][j].addMouseListener(new ActionCase(this, i, j));
|
|
|
|
|
panneauGrille.add(boutons[i][j]);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fenetre.add(panneauGrille);
|
|
|
|
|
fenetre.pack();
|
|
|
|
|
fenetre.setLocationRelativeTo(null);
|
|
|
|
|
fenetre.setVisible(true);
|
|
|
|
|
|
|
|
|
|
actualiserAffichage();
|
|
|
|
|
}
|
|
|
|
|
|
2026-04-08 17:16:52 +02:00
|
|
|
public void revelerCaseProche(int l, int c){
|
|
|
|
|
if (l < 0 || l >= grille.getLigne() || c < 0 || c >= grille.getColonne() )return;
|
|
|
|
|
Case caseActuelle = grille.getCase(l, c);
|
|
|
|
|
if (caseActuelle.getMarqueur() != 0 || caseActuelle.getEstRevelee() == true )return;
|
|
|
|
|
caseActuelle.setEstRevelee(true);
|
|
|
|
|
if(caseActuelle.getNbMinesautour() == 0){
|
|
|
|
|
for(int i = -1; i <= 1; i++){
|
|
|
|
|
for(int j = -1; j <= 1; j++){
|
|
|
|
|
int vL = l + i;
|
|
|
|
|
int vC = c + j;
|
|
|
|
|
revelerCaseProche(vL,vC);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2026-04-06 20:18:32 +02:00
|
|
|
// logique du clic droit
|
|
|
|
|
public void clicDroit(int l, int c) {
|
|
|
|
|
Case caseCliquee = grille.getCase(l, c);
|
|
|
|
|
caseCliquee.boucleMarqueur();
|
|
|
|
|
actualiserAffichage();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// logique clic gauche
|
|
|
|
|
public void clicGauche(int l, int c) {
|
|
|
|
|
Case caseCliquee = grille.getCase(l, c);
|
|
|
|
|
|
|
|
|
|
// secu on ne peut pas cliquer une une case avec un marqueur etoile ou ?
|
|
|
|
|
|
|
|
|
|
if (caseCliquee.getMarqueur() != 0) return;
|
|
|
|
|
|
|
|
|
|
if (caseCliquee.getEstMinee()) {
|
|
|
|
|
System.out.println("BOOM ! Vous avez touché une mine... !");
|
|
|
|
|
caseCliquee.setEstRevelee(true);
|
|
|
|
|
|
|
|
|
|
} else {
|
2026-04-08 17:16:52 +02:00
|
|
|
revelerCaseProche(l,c);
|
2026-04-06 20:18:32 +02:00
|
|
|
}
|
|
|
|
|
actualiserAffichage();
|
|
|
|
|
}
|
2026-04-08 17:16:52 +02:00
|
|
|
|
2026-04-06 20:18:32 +02:00
|
|
|
|
|
|
|
|
// mise à jour du texte et couleurs de tous les boutons
|
|
|
|
|
public void actualiserAffichage() {
|
|
|
|
|
int l = grille.getLigne();
|
|
|
|
|
int c = grille.getColonne();
|
|
|
|
|
|
|
|
|
|
for (int i = 0; i < l; i++) {
|
|
|
|
|
for (int j = 0; j < c; j++) {
|
|
|
|
|
Case currentCase = grille.getCase(i, j);
|
|
|
|
|
JButton btn = boutons[i][j];
|
|
|
|
|
|
|
|
|
|
if (currentCase.getEstRevelee()) {
|
|
|
|
|
btn.setEnabled(false); // pour rendre le bouton incliquable
|
|
|
|
|
if (currentCase.getEstMinee()) {
|
|
|
|
|
btn.setText("¤");
|
|
|
|
|
btn.setBackground(Color.RED);
|
|
|
|
|
} else {
|
|
|
|
|
int nb = currentCase.getNbMinesautour();
|
|
|
|
|
if (nb > 0) {
|
|
|
|
|
btn.setText(String.valueOf(nb));
|
|
|
|
|
} else {
|
|
|
|
|
btn.setText(""); // case viiiide
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
btn.setEnabled(true);
|
|
|
|
|
int mq = currentCase.getMarqueur();
|
|
|
|
|
if (mq == 1) btn.setText("*");
|
|
|
|
|
else if (mq == 2) btn.setText("?");
|
|
|
|
|
else btn.setText("");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|