From e1f22fe43d8f1d4f863604d054d51206a4c80245 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 5 May 2022 22:29:04 +0200 Subject: [PATCH] =?UTF-8?q?r=C3=A9cup=C3=A9ration=20infos=20marquage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Case.java | 50 +++++++++++++++++++++++++++++++++++------------ Entourage.java | 3 +-- EtatPartie.java | 19 +++++++++--------- FrameJeu.java | 14 ++++++++----- Grille.java | 42 +++++++++++++++++++++++++++------------ ListenerCase.java | 3 ++- MineLeft.java | 24 +++++++++++++++++++++++ Test.java | 2 +- 8 files changed, 115 insertions(+), 42 deletions(-) create mode 100644 MineLeft.java diff --git a/Case.java b/Case.java index 8b99cd3..c4edd1e 100644 --- a/Case.java +++ b/Case.java @@ -3,32 +3,38 @@ import java.awt.*; public class Case extends JPanel { // Definition d'attributs - private Dimension caseSize; + private Grille grille; private int entourage; private boolean visible; private boolean minee; + private boolean reperee; + private boolean deminee; private ListenerCase listener; // Définition du constructeur - public Case(Dimension caseSize) { + public Case(Grille grille, Dimension caseSize) { super(); - this.visible=false; // Par défaut la case est cachée - this.caseSize= caseSize; - this.setSize(caseSize); + // Initialisation des attributs + this.visible=false; + this.reperee=false; + this.deminee=false; + this.grille=grille; // On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur this.listener = new ListenerCase(); this.addMouseListener(this.listener); - // Mise en page de la page et couleur par défaut + // Mise en page de la case et couleur par défaut + this.setSize(caseSize); GridLayout unique = new GridLayout(1,1); this.setLayout(unique); this.setBackground(new Color(70, 70, 70)); } - // Méthode qui permet de montrer la case + // Méthode qui permet de montrer la case, et de la considérer comme déminée public void setVisible(){ - this.visible=true; + this.visible=true; + this.deminee=true; // On affiche une mine si la case est minée, sinon le nombre de mines autour d'elle if (this.minee == true) { @@ -36,24 +42,24 @@ public class Case extends JPanel { } else { this.setBackground(new Color(80, 80, 80)); if (this.entourage>0){ - this.add(new Entourage(this.entourage,caseSize)); + this.add(new Entourage(this.entourage,this.getSize())); } } // Mise à jour de l'affichage de la case this.updateUI(); } - // Méthode permettant de savoir si la case est cachée ou visible + // Méthode permettant de dire si la case est cachée ou visible public boolean getVisible(){ return this.visible; } - // Mathode pour déclarer la présence d'une mine sur une case + // Méthode pour déclarer la présence d'une mine sur une case public void setMine(){ this.minee=true; } - // Permet de savoir si une case est minée + // Permet de dire si une case est minée public boolean getMine(){ return this.minee; } @@ -62,4 +68,24 @@ public class Case extends JPanel { public void setEntourage(int entourage){ this.entourage=entourage; } + + // Méthode pour savoir si le joueur pense que la case est minée + public void setReperee(boolean reperee){ + this.reperee=reperee; + this.add(new Etoile(this.getSize()), BorderLayout.CENTER); + if ((reperee)&&(minee)){ + this.deminee=true; + } + this.grille.MinesLeft(); + } + + // Methode pour dire si la case est marquée ou non + public boolean getReperee(){ + return this.reperee; + } + + // Methode pour dire si la case a été déminée + public boolean getDeminee(){ + return this.deminee; + } } diff --git a/Entourage.java b/Entourage.java index 0446dac..3093710 100644 --- a/Entourage.java +++ b/Entourage.java @@ -14,8 +14,7 @@ public class Entourage extends JComponent { Graphics chiffre = pinceau.create(); Font font = new Font("Arial", Font.BOLD, caseSize.width*2/5); chiffre.setFont(font); - Color jaune = new Color(236, 214, 0); - chiffre.setColor(jaune); + chiffre.setColor(new Color(236, 214, 0)); chiffre.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5); } } diff --git a/EtatPartie.java b/EtatPartie.java index dc21e86..591b8da 100644 --- a/EtatPartie.java +++ b/EtatPartie.java @@ -2,19 +2,20 @@ import javax.swing.*; import java.awt.*; public class EtatPartie extends JPanel { - private ListenerCase listener; // Définition du constructeur - public EtatPartie(Grille grille, int mines) { + public EtatPartie(int mines) { super(); - // On place un listener sur notre grille pour avoir accès à l'état de la partie - this.listener = new ListenerCase(); - this.addMouseListener(this.listener); - // On défini un style et une taille à la bannière - Dimension grilleSize= grille.getGrilleSize(); - Dimension banniereSize=new Dimension(grilleSize.width,grilleSize.height/8); - this.setSize(banniereSize); this.setBackground( new Color(0, 236, 96)); + setMinesLeft(mines); } + + // Méthode pour afficher le nombre de mines restantes + protected void setMinesLeft(int minesLeft){ + this.add(new MineLeft(minesLeft,this.getSize())); + //System.out.println("Mines restantes : "+minesLeft); + this.repaint(); + this.updateUI(); + } } \ No newline at end of file diff --git a/FrameJeu.java b/FrameJeu.java index 2c67746..89a1770 100644 --- a/FrameJeu.java +++ b/FrameJeu.java @@ -8,7 +8,7 @@ public class FrameJeu{ // On récupère les dimensions de l'écran pour adapter la taille par défaut de notre fenêtre Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); - // On crée ensuite notre fenêtre avec des valeurs par défaut + // On crée ensuite notre fenêtre JFrame fenetre = new JFrame("Démineur - En Jeu"); fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); @@ -16,13 +16,17 @@ public class FrameJeu{ fenetre.setLayout(new GridBagLayout()); GridBagConstraints miseEnPage = new GridBagConstraints(); - // Création de la grille de Jeu - Grille grille=new Grille(lignes,colonnes,mines); - // Création de la bannière - EtatPartie banniere = new EtatPartie(grille,mines); + EtatPartie banniere = new EtatPartie(mines); + + // Création de la grille de Jeu + Grille grille=new Grille(banniere,lignes,colonnes,mines); + // Mise en place de la bannière + Dimension grilleSize= grille.getGrilleSize(); + Dimension banniereSize=new Dimension(grilleSize.width,grilleSize.height/8); + banniere.setSize(banniereSize); miseEnPage.fill = GridBagConstraints.BOTH; miseEnPage.gridx = 0; miseEnPage.gridy = 0; diff --git a/Grille.java b/Grille.java index 62565dc..8af56d9 100644 --- a/Grille.java +++ b/Grille.java @@ -3,11 +3,14 @@ import java.awt.*; import java.util.Random; public class Grille extends JPanel { + private EtatPartie banniere; private Dimension grilleSize=new Dimension(0,0); private Case[] plateau; + private int taille; + private int mines; // Définition du constructeur qui correspond à une grille de jeu - public Grille(int lignes, int colonnes, int mines){ + public Grille(EtatPartie banniere,int lignes, int colonnes, int mines){ // Découpage de l'espace en fonction des paramètres pour la mise en place de la grille Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); @@ -18,8 +21,11 @@ public class Grille extends JPanel { System.out.println("Taille de la Grille : "+grilleSize); this.setLayout(damier); this.setSize(grilleSize); + this.taille=lignes*colonnes; + this.mines=mines; + this.banniere=banniere; // On génère le plateau contenant les cases - GenererPlateau(lignes*colonnes, caseSize); + GenererPlateau(taille, caseSize); // Instalation des mines @@ -27,20 +33,20 @@ public class Grille extends JPanel { int[] caseMine = new int[mines]; Random rand = new Random(); // On initialise les emplacements des mines - caseMine[0] = rand.nextInt(lignes*colonnes); + caseMine[0] = rand.nextInt(taille); for (int i=1;i