Files
SAE21_2025/FenetreJeu.java
T

113 lines
4.0 KiB
Java
Raw Normal View History

2026-03-30 22:33:20 +02:00
import javax.swing.*;
import java.awt.*;
public class FenetreJeu extends JFrame {
private Grille grille;
2026-04-03 18:41:45 +02:00
private JButton[][] boutons;
2026-04-07 16:21:33 +02:00
private JLabel labelCompteur;
private JButton btnActionBas; // NOUVEAU : On garde le bouton en mémoire
2026-03-30 22:33:20 +02:00
public FenetreJeu(Grille g) {
super("Démineur - Partie en cours");
this.grille = g;
2026-04-03 18:41:45 +02:00
this.boutons = new JButton[g.getLignes()][g.getColonnes()];
2026-03-30 22:33:20 +02:00
this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
2026-04-07 16:21:33 +02:00
this.labelCompteur = new JLabel("Mines restantes : " + g.getMinesRestantes());
this.labelCompteur.setHorizontalAlignment(SwingConstants.CENTER);
this.labelCompteur.setFont(new Font("Arial", Font.BOLD, 16));
this.add(this.labelCompteur, BorderLayout.NORTH);
2026-03-30 22:33:20 +02:00
JPanel panneauGrille = new JPanel();
2026-04-03 16:56:08 +02:00
panneauGrille.setLayout(new GridLayout(g.getLignes(), g.getColonnes()));
2026-03-30 22:33:20 +02:00
2026-04-03 18:41:45 +02:00
ControleurGrille controleurSouris = new ControleurGrille(this, this.grille);
2026-04-03 16:56:08 +02:00
for (int i = 0; i < g.getLignes(); i++) {
for (int j = 0; j < g.getColonnes(); j++) {
2026-04-03 18:41:45 +02:00
JButton boutonCase = new JButton("");
this.boutons[i][j] = boutonCase;
2026-03-30 22:33:20 +02:00
panneauGrille.add(boutonCase);
2026-04-03 18:41:45 +02:00
boutonCase.addMouseListener(controleurSouris);
2026-03-30 22:33:20 +02:00
}
}
this.add(panneauGrille, BorderLayout.CENTER);
2026-04-03 16:56:08 +02:00
2026-04-07 16:21:33 +02:00
// --- MODIFICATION DU BOUTON DU BAS ---
this.btnActionBas = new JButton("Sauver et Quitter");
this.add(this.btnActionBas, BorderLayout.SOUTH);
2026-04-03 18:41:45 +02:00
ControleurJeu controleurQuitter = new ControleurJeu(this);
2026-04-07 16:21:33 +02:00
this.btnActionBas.addActionListener(controleurQuitter);
2026-03-30 22:33:20 +02:00
}
2026-04-03 18:41:45 +02:00
2026-04-07 16:21:33 +02:00
// --- NOUVEAUX OUTILS ---
public JButton getBouton(int l, int c) { return this.boutons[l][c]; }
public Grille getGrille() { return this.grille; } // Permet au contrôleur de lire la grille
public void changerBoutonEnRetourMenu() {
this.btnActionBas.setText("Retour au Menu");
}
public void mettreAJourCompteur() {
this.labelCompteur.setText("Mines restantes : " + this.grille.getMinesRestantes());
2026-04-03 18:41:45 +02:00
}
public void rafraichirCase(int l, int c) {
Case caseLogique = this.grille.getCase(l, c);
JButton btn = this.boutons[l][c];
if (caseLogique.isRevelee()) {
btn.setEnabled(false);
if (caseLogique.isMinee()) {
btn.setText("M");
btn.setBackground(Color.RED);
} else if (caseLogique.getNbMinesVoisines() > 0) {
btn.setText("" + caseLogique.getNbMinesVoisines());
} else {
btn.setText("");
}
} else {
if (caseLogique.getMarqueur() == 1) {
btn.setText("★");
} else if (caseLogique.getMarqueur() == 2) {
btn.setText("?");
} else {
btn.setText("");
}
}
}
public void rafraichirTouteLaGrille() {
for (int i = 0; i < grille.getLignes(); i++) {
for (int j = 0; j < grille.getColonnes(); j++) {
rafraichirCase(i, j);
}
}
}
2026-04-07 16:21:33 +02:00
2026-04-07 13:54:01 +02:00
public void afficherDefaite(int lExplose, int cExplose) {
for (int i = 0; i < grille.getLignes(); i++) {
for (int j = 0; j < grille.getColonnes(); j++) {
Case c = grille.getCase(i, j);
JButton btn = boutons[i][j];
btn.setEnabled(false);
if (i == lExplose && j == cExplose) {
btn.setText("BOUM");
btn.setBackground(Color.RED);
2026-04-07 16:21:33 +02:00
} else if (c.isMinee() && c.getMarqueur() != 1) {
2026-04-07 13:54:01 +02:00
btn.setText("M");
btn.setBackground(Color.ORANGE);
2026-04-07 16:21:33 +02:00
} else if (!c.isMinee() && c.getMarqueur() == 1) {
btn.setText("X");
2026-04-07 13:54:01 +02:00
btn.setBackground(Color.YELLOW);
}
}
}
}
2026-04-07 16:21:33 +02:00
}