récupération infos marquage

This commit is contained in:
Haïssous Kayyissa 2022-05-05 22:29:04 +02:00
parent e955b3871c
commit e1f22fe43d
8 changed files with 115 additions and 42 deletions

View File

@ -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;
}
}

View File

@ -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);
}
}

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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<mines;i++){
caseMine[i] = rand.nextInt(lignes*colonnes);
caseMine[i] = rand.nextInt(taille);
// On vérifie que la case n'a pas déjà été minée, auquel cas on change de case
for (int j=0;j<=(i-1);j++){
if (caseMine[i]==caseMine[j]){
caseMine[i] = rand.nextInt(lignes*colonnes);
caseMine[i] = rand.nextInt(taille);
j=-1;
}
}
}
// On place maintenant les mines sur la plateau en fixant la variable minee des cases à true
for (int i=0; i<lignes*colonnes;i++){
for (int i=0; i<taille;i++){
for (int j=0;j<mines;j++){
if (caseMine[j]==i){
plateau[i].setMine();
@ -49,7 +55,7 @@ public class Grille extends JPanel {
}
// On cherche à connaître le nombre de mines autour de chaque case
for (int i=0;i<lignes*colonnes;i++){
for (int i=0;i<taille;i++){
int entourage = 0;
// On vérifie pour chaque case qu'elle n'est pas déjà à l'extrémité du plateau on cherche une case
// Mine au dessus à droite
@ -69,7 +75,7 @@ public class Grille extends JPanel {
}
}
// Mine en dessous à droite
if ((i<=lignes*colonnes-colonnes)&&(i%colonnes!=colonnes-1)){
if ((i<=taille-colonnes)&&(i%colonnes!=colonnes-1)){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+colonnes+1){
entourage+=1;
@ -77,7 +83,7 @@ public class Grille extends JPanel {
}
}
// Mine en bas à gauche
if ((i!=lignes*colonnes-colonnes)&&(i%colonnes!=0)){
if ((i!=taille-colonnes)&&(i%colonnes!=0)){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+colonnes-1){
entourage+=1;
@ -93,7 +99,7 @@ public class Grille extends JPanel {
}
}
// Mine en dessous
if (i<=lignes*colonnes-colonnes){
if (i<=taille-colonnes){
for (int j=0;j<mines;j++){
if (caseMine[j]==i+colonnes){
entourage+=1;
@ -121,14 +127,14 @@ public class Grille extends JPanel {
// On place les cases à leur état actuel dans la grille
AfficherPlateau(lignes*colonnes);
AfficherPlateau(taille);
}
// Méthode pour Génerer le plateau
protected void GenererPlateau(int taille, Dimension caseSize){
this.plateau= new Case[taille];
for (int i=0;i<taille;i++){
this.plateau[i]= new Case(caseSize);
this.plateau[i]= new Case(this,caseSize);
}
}
@ -143,4 +149,16 @@ public class Grille extends JPanel {
public Dimension getGrilleSize(){
return grilleSize;
}
// Méthode pour déterminer le nombre de mines restantes
public void MinesLeft(){
int minesLeft=this.mines;
for (int i=0;i<taille;i++){
//System.out.println("case repéree ? == "+plateau[i].getReperee());
if(plateau[i].getReperee()==true){
minesLeft-=1;
}
}
this.banniere.setMinesLeft(minesLeft);
}
}

View File

@ -19,7 +19,7 @@ public class ListenerCase implements MouseListener{
if ((evenement.getButton() == MouseEvent.BUTTON3)&&(panel.getVisible()==false)) {
// Au premier click, on place une étoile pour indiquer la présence d'une mine
if (this.marquage==0){
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
panel.setReperee(true);
this.marquage=1;
}
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la réflexion
@ -30,6 +30,7 @@ public class ListenerCase implements MouseListener{
}
// Au troisième click on efface tout marquage
else if (this.marquage==2){
panel.setReperee(false);
panel.removeAll();
this.marquage=0;
}

24
MineLeft.java Normal file
View File

@ -0,0 +1,24 @@
import javax.swing.JComponent;
import java.awt.*;
public class MineLeft extends JComponent {
private int minesLeft;
private Dimension banniereSize;
public MineLeft(int minesLeft, Dimension banniereSize) {
super();
this.minesLeft = minesLeft;
this.banniereSize=banniereSize;
System.out.println("Mines restantes : "+this.minesLeft);
}
@Override
protected void paintComponent(Graphics pinceau) {
Graphics chiffre = pinceau.create();
//Font font = new Font("Arial", Font.BOLD, banniereSize.width*1/10);
//chiffre.setFont(font);
//chiffre.setColor(new Color(236, 214, 0));
//chiffre.drawString(Integer.toString(this.minesLeft),banniereSize.width*2/5,banniereSize.height/2);
//chiffre.drawString("ALED",banniereSize.width/2,banniereSize.height/2);
chiffre.setColor(Color.black);
chiffre.fillRect(10, 10, 200, 100);
}
}

View File

@ -1,5 +1,5 @@
public class Test {
public static void main(String[] args) {
new FrameJeu(15,20,20);
new FrameJeu(15,20,40);
}
}