suite du traville avec grille et cas

This commit is contained in:
lecointre
2026-03-30 22:33:20 +02:00
commit 14a3eb2803
6 changed files with 214 additions and 0 deletions
+28
View File
@@ -0,0 +1,28 @@
import java.io.Serializable;
public class Case implements Serializable {
private boolean minee;
private boolean revelee;
private int marqueur;
private int nbMinesVoisines;
public Case() {
this.minee = false;
this.revelee = false;
this.marqueur = 0;
this.nbMinesVoisines = 0;
}
public boolean isMinee() { return this.minee; }
public boolean isRevelee() { return this.revelee; }
public int getMarqueur() { return this.marqueur; }
public int getNbMinesVoisines() { return this.nbMinesVoisines; }
public void setMinee(boolean m) { this.minee = m; }
public void setRevelee(boolean r) { this.revelee = r; }
public void setNbMinesVoisines(int n) { this.nbMinesVoisines = n; }
public void changerMarqueur() {
this.marqueur = (this.marqueur + 1) % 3;
}
}
+37
View File
@@ -0,0 +1,37 @@
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class ControleurMenu implements ActionListener {
private MenuPrincipal menu;
public ControleurMenu(MenuPrincipal m) {
this.menu = m;
}
@Override
public void actionPerformed(ActionEvent evenement) {
if (evenement.getSource() == this.menu.getBtnNouvellePartie()) {
System.out.println("Création d'une nouvelle partie...");
Grille nouvelleGrille = new Grille(10, 10, 10);
FenetreJeu fenetre = new FenetreJeu(nouvelleGrille);
fenetre.setVisible(true);
this.menu.dispose();
} else if (evenement.getSource() == this.menu.getBtnReprendre()) {
System.out.println("Chargement de la sauvegarde...");
} else if (evenement.getSource() == this.menu.getBtnQuitter()) {
System.out.println("Fermeture du jeu.");
System.exit(0);
}
}
}
+31
View File
@@ -0,0 +1,31 @@
import javax.swing.*;
import java.awt.*;
public class FenetreJeu extends JFrame {
private Grille grille;
public FenetreJeu(Grille g) {
super("Démineur - Partie en cours");
this.grille = g;
this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());
JPanel panneauGrille = new JPanel();
panneauGrille.setLayout(new GridLayout(10, 10));
for (int i = 0; i < 10; i++) {
for (int j = 0; j < 10; j++) {
JButton boutonCase = new JButton("?");
panneauGrille.add(boutonCase);
}
}
this.add(panneauGrille, BorderLayout.CENTER);
}
}
+25
View File
@@ -0,0 +1,25 @@
import java.io.Serializable;
import java.util.Random;
public class Grille implements Serializable {
private Case[][] plateau;
private int lignes;
private int colonnes;
private int mines;
public Grille(int l, int c, int m) {
this.lignes = l;
this.colonnes = c;
this.mines = m;
this.plateau = new Case[this.lignes][this.colonnes];
for (int i = 0; i < this.lignes; i++) {
for (int j = 0; j < this.colonnes; j++) {
this.plateau[i][j] = new Case();
}
}
}
}
+23
View File
@@ -0,0 +1,23 @@
JC = javac
JFLAGS = -implicit:none
all: MenuPrincipal.class Grille.class
Case.class: Case.java
$(JC) $(JFLAGS) Case.java
Grille.class: Grille.java Case.class
$(JC) $(JFLAGS) Grille.java
FenetreJeu.class: FenetreJeu.java Grille.class
$(JC) $(JFLAGS) FenetreJeu.java
MenuPrincipal.class: MenuPrincipal.java ControleurMenu.java FenetreJeu.class
$(JC) $(JFLAGS) MenuPrincipal.java ControleurMenu.java
run: all
java MenuPrincipal
clean:
rm -f *.class
+70
View File
@@ -0,0 +1,70 @@
import javax.swing.*;
import java.awt.*;
/**
* Fenêtre principale affichant le menu du Démineur.
*/
public class MenuPrincipal extends JFrame {
private JButton btnNouvellePartie;
private JButton btnReprendre;
private JButton btnQuitter;
/**
* Constructeur du menu principal.
*/
public MenuPrincipal() {
// Configuration de la fenêtre (héritée de JFrame)
super("Démineur - Menu Principal");
this.setSize(300, 250);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// Mise en page principale
this.setLayout(new BorderLayout());
// Titre en haut
JLabel etiquetteTitre = new JLabel("DÉMINEUR");
etiquetteTitre.setHorizontalAlignment(JLabel.CENTER);
this.add(etiquetteTitre, BorderLayout.NORTH);
// Panneau pour les boutons au centre
JPanel panneauBoutons = new JPanel();
panneauBoutons.setLayout(new GridLayout(3, 1)); // 3 lignes, 1 colonne
// Création des boutons
this.btnNouvellePartie = new JButton("Commencer une nouvelle partie");
this.btnReprendre = new JButton("Reprendre la partie précédente");
this.btnQuitter = new JButton("Quitter");
// Désactivation du bouton "Reprendre" par défaut (comme demandé dans le sujet)
this.btnReprendre.setEnabled(false);
// Ajout des boutons au panneau
panneauBoutons.add(this.btnNouvellePartie);
panneauBoutons.add(this.btnReprendre);
panneauBoutons.add(this.btnQuitter);
// Ajout du panneau au centre de la fenêtre
this.add(panneauBoutons, BorderLayout.CENTER);
// Connexion avec l'observateur (le contrôleur)
ControleurMenu observateur = new ControleurMenu(this);
this.btnNouvellePartie.addActionListener(observateur);
this.btnReprendre.addActionListener(observateur);
this.btnQuitter.addActionListener(observateur);
}
// --- Accesseurs pour que l'observateur puisse identifier les boutons ---
public JButton getBtnNouvellePartie() { return this.btnNouvellePartie; }
public JButton getBtnReprendre() { return this.btnReprendre; }
public JButton getBtnQuitter() { return this.btnQuitter; }
/**
* Méthode principale pour lancer le programme.
* @param args arguments de la ligne de commande (inutilisés)
*/
public static void main(String[] args) {
MenuPrincipal menu = new MenuPrincipal();
menu.setVisible(true);
}
}