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"); 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.add(panneauGrille); fenetre.pack(); fenetre.setLocationRelativeTo(null); fenetre.setVisible(true); actualiserAffichage(); } 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); } } } } // 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 { revelerCaseProche(l,c); } actualiserAffichage(); } // 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(""); } } } } }