From 14a3eb2803cb4c1fa150fac2e91e0c3ec4bc98af Mon Sep 17 00:00:00 2001 From: lecointre Date: Mon, 30 Mar 2026 22:33:20 +0200 Subject: [PATCH] suite du traville avec grille et cas --- Case.java | 28 ++++++++++++++++++ ControleurMenu.java | 37 ++++++++++++++++++++++++ FenetreJeu.java | 31 ++++++++++++++++++++ Grille.java | 25 ++++++++++++++++ Makefile | 23 +++++++++++++++ MenuPrincipal.java | 70 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 214 insertions(+) create mode 100644 Case.java create mode 100644 ControleurMenu.java create mode 100644 FenetreJeu.java create mode 100644 Grille.java create mode 100644 Makefile create mode 100644 MenuPrincipal.java diff --git a/Case.java b/Case.java new file mode 100644 index 0000000..38602ff --- /dev/null +++ b/Case.java @@ -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; + } +} diff --git a/ControleurMenu.java b/ControleurMenu.java new file mode 100644 index 0000000..6b8e252 --- /dev/null +++ b/ControleurMenu.java @@ -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); + } + } +} diff --git a/FenetreJeu.java b/FenetreJeu.java new file mode 100644 index 0000000..2708e94 --- /dev/null +++ b/FenetreJeu.java @@ -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); + } +} diff --git a/Grille.java b/Grille.java new file mode 100644 index 0000000..3e50bf5 --- /dev/null +++ b/Grille.java @@ -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(); + } + } + + } +} diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..f6f1fab --- /dev/null +++ b/Makefile @@ -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 diff --git a/MenuPrincipal.java b/MenuPrincipal.java new file mode 100644 index 0000000..d09754c --- /dev/null +++ b/MenuPrincipal.java @@ -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); + } +}