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; private boolean partieTerminee = false; private JLabel labelStatut; public FenetreJeu(Grille g) { this.grille = g; int l = grille.getLigne(); int c = grille.getColonne(); fenetre = new JFrame("Demineur"); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 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.setLayout(new BorderLayout()); fenetre.add(panneauGrille, BorderLayout.CENTER); // Panneau de contrôle en bas JPanel panneauBas = new JPanel(); panneauBas.setLayout(new BorderLayout()); labelStatut = new JLabel("Partie en cours...", SwingConstants.CENTER); labelStatut.setFont(new Font("Arial", Font.BOLD, 14)); // pour aligner les boutons horizontalement JPanel conteneurBoutons = new JPanel(); JButton boutonMenu = new JButton("Menu Principal"); boutonMenu.addActionListener(new ActionRetourMenu(fenetre)); JButton boutonSauver = new JButton("Sauver et Quitter"); boutonSauver.addActionListener(new ActionSauverQuitter(grille)); conteneurBoutons.add(boutonMenu); conteneurBoutons.add(boutonSauver); panneauBas.add(labelStatut, BorderLayout.NORTH); panneauBas.add(conteneurBoutons, BorderLayout.SOUTH); fenetre.add(panneauBas, BorderLayout.SOUTH); fenetre.pack(); fenetre.setLocationRelativeTo(null); fenetre.setVisible(true); actualiserAffichage(); } public void verifierVictoire() { int casesAReveler = (grille.getLigne() * grille.getColonne()); int nbMines = 0; int nbRevelees = 0; for (int i = 0; i < grille.getLigne(); i++) { for (int j = 0; j < grille.getColonne(); j++) { if (grille.getCase(i, j).getEstMinee()) nbMines++; if (grille.getCase(i, j).getEstRevelee()) nbRevelees++; } } if (nbRevelees == (casesAReveler - nbMines)) { partieTerminee = true; System.out.println("Vous avez gagné !"); } } 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); } } } } public void partiePerdu(){ for(int i =0; i 0) { btn.setText(String.valueOf(nb)); } else { btn.setText(""); // case vide } } } } else { // La case est encore cachée btn.setEnabled(true); int mq = currentCase.getMarqueur(); if (mq == 1) btn.setText("★"); else if (mq == 2) btn.setText("?"); else btn.setText(""); } } } } }