récupération infos marquage
This commit is contained in:
parent
e955b3871c
commit
e1f22fe43d
50
Case.java
50
Case.java
@ -3,32 +3,38 @@ import java.awt.*;
|
|||||||
|
|
||||||
public class Case extends JPanel {
|
public class Case extends JPanel {
|
||||||
// Definition d'attributs
|
// Definition d'attributs
|
||||||
private Dimension caseSize;
|
private Grille grille;
|
||||||
private int entourage;
|
private int entourage;
|
||||||
private boolean visible;
|
private boolean visible;
|
||||||
private boolean minee;
|
private boolean minee;
|
||||||
|
private boolean reperee;
|
||||||
|
private boolean deminee;
|
||||||
private ListenerCase listener;
|
private ListenerCase listener;
|
||||||
|
|
||||||
// Définition du constructeur
|
// Définition du constructeur
|
||||||
public Case(Dimension caseSize) {
|
public Case(Grille grille, Dimension caseSize) {
|
||||||
super();
|
super();
|
||||||
this.visible=false; // Par défaut la case est cachée
|
// Initialisation des attributs
|
||||||
this.caseSize= caseSize;
|
this.visible=false;
|
||||||
this.setSize(caseSize);
|
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
|
// On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur
|
||||||
this.listener = new ListenerCase();
|
this.listener = new ListenerCase();
|
||||||
this.addMouseListener(this.listener);
|
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);
|
GridLayout unique = new GridLayout(1,1);
|
||||||
this.setLayout(unique);
|
this.setLayout(unique);
|
||||||
this.setBackground(new Color(70, 70, 70));
|
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(){
|
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
|
// On affiche une mine si la case est minée, sinon le nombre de mines autour d'elle
|
||||||
if (this.minee == true) {
|
if (this.minee == true) {
|
||||||
@ -36,24 +42,24 @@ public class Case extends JPanel {
|
|||||||
} else {
|
} else {
|
||||||
this.setBackground(new Color(80, 80, 80));
|
this.setBackground(new Color(80, 80, 80));
|
||||||
if (this.entourage>0){
|
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
|
// Mise à jour de l'affichage de la case
|
||||||
this.updateUI();
|
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(){
|
public boolean getVisible(){
|
||||||
return this.visible;
|
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(){
|
public void setMine(){
|
||||||
this.minee=true;
|
this.minee=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Permet de savoir si une case est minée
|
// Permet de dire si une case est minée
|
||||||
public boolean getMine(){
|
public boolean getMine(){
|
||||||
return this.minee;
|
return this.minee;
|
||||||
}
|
}
|
||||||
@ -62,4 +68,24 @@ public class Case extends JPanel {
|
|||||||
public void setEntourage(int entourage){
|
public void setEntourage(int entourage){
|
||||||
this.entourage=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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,8 +14,7 @@ public class Entourage extends JComponent {
|
|||||||
Graphics chiffre = pinceau.create();
|
Graphics chiffre = pinceau.create();
|
||||||
Font font = new Font("Arial", Font.BOLD, caseSize.width*2/5);
|
Font font = new Font("Arial", Font.BOLD, caseSize.width*2/5);
|
||||||
chiffre.setFont(font);
|
chiffre.setFont(font);
|
||||||
Color jaune = new Color(236, 214, 0);
|
chiffre.setColor(new Color(236, 214, 0));
|
||||||
chiffre.setColor(jaune);
|
|
||||||
chiffre.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5);
|
chiffre.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2,19 +2,20 @@ import javax.swing.*;
|
|||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
|
||||||
public class EtatPartie extends JPanel {
|
public class EtatPartie extends JPanel {
|
||||||
private ListenerCase listener;
|
|
||||||
// Définition du constructeur
|
// Définition du constructeur
|
||||||
public EtatPartie(Grille grille, int mines) {
|
public EtatPartie(int mines) {
|
||||||
super();
|
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
|
// 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));
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
@ -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
|
// 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();
|
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");
|
JFrame fenetre = new JFrame("Démineur - En Jeu");
|
||||||
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
fenetre.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||||
|
|
||||||
@ -16,13 +16,17 @@ public class FrameJeu{
|
|||||||
fenetre.setLayout(new GridBagLayout());
|
fenetre.setLayout(new GridBagLayout());
|
||||||
GridBagConstraints miseEnPage = new GridBagConstraints();
|
GridBagConstraints miseEnPage = new GridBagConstraints();
|
||||||
|
|
||||||
// Création de la grille de Jeu
|
|
||||||
Grille grille=new Grille(lignes,colonnes,mines);
|
|
||||||
|
|
||||||
// Création de la bannière
|
// 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
|
// 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.fill = GridBagConstraints.BOTH;
|
||||||
miseEnPage.gridx = 0;
|
miseEnPage.gridx = 0;
|
||||||
miseEnPage.gridy = 0;
|
miseEnPage.gridy = 0;
|
||||||
|
42
Grille.java
42
Grille.java
@ -3,11 +3,14 @@ import java.awt.*;
|
|||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
public class Grille extends JPanel {
|
public class Grille extends JPanel {
|
||||||
|
private EtatPartie banniere;
|
||||||
private Dimension grilleSize=new Dimension(0,0);
|
private Dimension grilleSize=new Dimension(0,0);
|
||||||
private Case[] plateau;
|
private Case[] plateau;
|
||||||
|
private int taille;
|
||||||
|
private int mines;
|
||||||
|
|
||||||
// Définition du constructeur qui correspond à une grille de jeu
|
// 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
|
// Découpage de l'espace en fonction des paramètres pour la mise en place de la grille
|
||||||
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
|
||||||
@ -18,8 +21,11 @@ public class Grille extends JPanel {
|
|||||||
System.out.println("Taille de la Grille : "+grilleSize);
|
System.out.println("Taille de la Grille : "+grilleSize);
|
||||||
this.setLayout(damier);
|
this.setLayout(damier);
|
||||||
this.setSize(grilleSize);
|
this.setSize(grilleSize);
|
||||||
|
this.taille=lignes*colonnes;
|
||||||
|
this.mines=mines;
|
||||||
|
this.banniere=banniere;
|
||||||
// On génère le plateau contenant les cases
|
// On génère le plateau contenant les cases
|
||||||
GenererPlateau(lignes*colonnes, caseSize);
|
GenererPlateau(taille, caseSize);
|
||||||
|
|
||||||
|
|
||||||
// Instalation des mines
|
// Instalation des mines
|
||||||
@ -27,20 +33,20 @@ public class Grille extends JPanel {
|
|||||||
int[] caseMine = new int[mines];
|
int[] caseMine = new int[mines];
|
||||||
Random rand = new Random();
|
Random rand = new Random();
|
||||||
// On initialise les emplacements des mines
|
// On initialise les emplacements des mines
|
||||||
caseMine[0] = rand.nextInt(lignes*colonnes);
|
caseMine[0] = rand.nextInt(taille);
|
||||||
for (int i=1;i<mines;i++){
|
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
|
// 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++){
|
for (int j=0;j<=(i-1);j++){
|
||||||
if (caseMine[i]==caseMine[j]){
|
if (caseMine[i]==caseMine[j]){
|
||||||
caseMine[i] = rand.nextInt(lignes*colonnes);
|
caseMine[i] = rand.nextInt(taille);
|
||||||
j=-1;
|
j=-1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// On place maintenant les mines sur la plateau en fixant la variable minee des cases à true
|
// 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++){
|
for (int j=0;j<mines;j++){
|
||||||
if (caseMine[j]==i){
|
if (caseMine[j]==i){
|
||||||
plateau[i].setMine();
|
plateau[i].setMine();
|
||||||
@ -49,7 +55,7 @@ public class Grille extends JPanel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// On cherche à connaître le nombre de mines autour de chaque case
|
// 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;
|
int entourage = 0;
|
||||||
// On vérifie pour chaque case qu'elle n'est pas déjà à l'extrémité du plateau où on cherche une case
|
// On vérifie pour chaque case qu'elle n'est pas déjà à l'extrémité du plateau où on cherche une case
|
||||||
// Mine au dessus à droite
|
// Mine au dessus à droite
|
||||||
@ -69,7 +75,7 @@ public class Grille extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Mine en dessous à droite
|
// 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++){
|
for (int j=0;j<mines;j++){
|
||||||
if (caseMine[j]==i+colonnes+1){
|
if (caseMine[j]==i+colonnes+1){
|
||||||
entourage+=1;
|
entourage+=1;
|
||||||
@ -77,7 +83,7 @@ public class Grille extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Mine en bas à gauche
|
// 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++){
|
for (int j=0;j<mines;j++){
|
||||||
if (caseMine[j]==i+colonnes-1){
|
if (caseMine[j]==i+colonnes-1){
|
||||||
entourage+=1;
|
entourage+=1;
|
||||||
@ -93,7 +99,7 @@ public class Grille extends JPanel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Mine en dessous
|
// Mine en dessous
|
||||||
if (i<=lignes*colonnes-colonnes){
|
if (i<=taille-colonnes){
|
||||||
for (int j=0;j<mines;j++){
|
for (int j=0;j<mines;j++){
|
||||||
if (caseMine[j]==i+colonnes){
|
if (caseMine[j]==i+colonnes){
|
||||||
entourage+=1;
|
entourage+=1;
|
||||||
@ -121,14 +127,14 @@ public class Grille extends JPanel {
|
|||||||
|
|
||||||
|
|
||||||
// On place les cases à leur état actuel dans la grille
|
// On place les cases à leur état actuel dans la grille
|
||||||
AfficherPlateau(lignes*colonnes);
|
AfficherPlateau(taille);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Méthode pour Génerer le plateau
|
// Méthode pour Génerer le plateau
|
||||||
protected void GenererPlateau(int taille, Dimension caseSize){
|
protected void GenererPlateau(int taille, Dimension caseSize){
|
||||||
this.plateau= new Case[taille];
|
this.plateau= new Case[taille];
|
||||||
for (int i=0;i<taille;i++){
|
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(){
|
public Dimension getGrilleSize(){
|
||||||
return grilleSize;
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -19,7 +19,7 @@ public class ListenerCase implements MouseListener{
|
|||||||
if ((evenement.getButton() == MouseEvent.BUTTON3)&&(panel.getVisible()==false)) {
|
if ((evenement.getButton() == MouseEvent.BUTTON3)&&(panel.getVisible()==false)) {
|
||||||
// Au premier click, on place une étoile pour indiquer la présence d'une mine
|
// Au premier click, on place une étoile pour indiquer la présence d'une mine
|
||||||
if (this.marquage==0){
|
if (this.marquage==0){
|
||||||
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
|
panel.setReperee(true);
|
||||||
this.marquage=1;
|
this.marquage=1;
|
||||||
}
|
}
|
||||||
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la réflexion
|
// 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
|
// Au troisième click on efface tout marquage
|
||||||
else if (this.marquage==2){
|
else if (this.marquage==2){
|
||||||
|
panel.setReperee(false);
|
||||||
panel.removeAll();
|
panel.removeAll();
|
||||||
this.marquage=0;
|
this.marquage=0;
|
||||||
}
|
}
|
||||||
|
24
MineLeft.java
Normal file
24
MineLeft.java
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user