avancee debut/fin

This commit is contained in:
Haïssous Kayyissa 2022-05-16 20:19:51 +02:00
parent bb1215eab7
commit 528870aeff
9 changed files with 102 additions and 156 deletions

BIN
Avancee.odt Normal file

Binary file not shown.

View File

@ -8,17 +8,17 @@ public class Case extends JPanel {
private boolean visible; private boolean visible;
private boolean minee; private boolean minee;
private boolean reperee; private boolean reperee;
private boolean deminee;
private ListenerCase listener; private ListenerCase listener;
private boolean finDePartie;
// Définition du constructeur // Définition du constructeur
public Case(Grille grille, Dimension caseSize) { public Case(Grille grille, Dimension caseSize) {
super(); super();
// Initialisation des attributs // Initialisation des attributs
this.visible=false; this.visible=false;
this.reperee=false; this.reperee=false;
this.deminee=false;
this.grille=grille; this.grille=grille;
this.finDePartie=false;
// 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();
@ -31,28 +31,34 @@ public class Case extends JPanel {
this.setBackground(new Color(70, 70, 70)); this.setBackground(new Color(70, 70, 70));
} }
// Méthode qui permet de montrer la case, et de la considérer comme minée // Méthode qui permet de montrer la case, et fait perdre si elle est minée
public void setVisible(){ public void setVisible(){
if (this.visible==false){ if (!this.visible){
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)&&(!this.finDePartie)) {
this.setBackground(new Color(200, 0, 0));
this.grille.setAllVisible();
this.finDePartie=true;
}
else if ((this.minee)&&(this.finDePartie)) {
this.setBackground(new Color(236, 0, 140)); this.setBackground(new Color(236, 0, 140));
} 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, this.getSize())); this.add(new Entourage(this.entourage, this.getSize()));
} }
this.grille.verifVictoire();
} }
// Mise à jour de l'affichage de la case // Mise à jour de l'affichage de la case
this.updateUI(); this.updateUI();
if ((this.entourage == 0)&&(minee==false)) { if ((this.entourage == 0)&&(!minee)) {
this.grille.setEntourageVisible(this); this.grille.setEntourageVisible(this);
} }
this.grille.verifVictoire();
} }
} }
@ -90,7 +96,6 @@ public class Case extends JPanel {
public void setReperee(boolean reperee){ public void setReperee(boolean reperee){
this.reperee=reperee; this.reperee=reperee;
if ((reperee)&&(minee)){ if ((reperee)&&(minee)){
this.deminee=true;
this.grille.verifVictoire(); this.grille.verifVictoire();
} }
this.grille.MinesLeft(); this.grille.MinesLeft();
@ -101,8 +106,18 @@ public class Case extends JPanel {
return this.reperee; return this.reperee;
} }
// Methode pour dire si la case a été déminée // Methode pour montrer que la partie est gagnée
public boolean getDeminee(){ public void setVictoire(){
return this.deminee; this.finDePartie=true;
if (this.minee==true){
removeAll();
this.setBackground(new Color(236, 214, 0));;
}
}
// Methode pour savoir dans le Listener si la partie est finie ou non
public boolean getFinDePartie(){
return this.finDePartie;
} }
} }

View File

@ -1,21 +0,0 @@
import javax.swing.JComponent;
import java.awt.*;
public class Chiffre extends JComponent {
private int entourage;
private Dimension caseSize;
public Chiffre(int entourage, Dimension caseSize) {
super();
this.entourage = entourage;
this.caseSize=caseSize;
}
@Override
protected void paintComponent(Graphics pinceau) {
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.drawString(Integer.toString(this.entourage),caseSize.width*2/5,caseSize.height*3/5);
}
}

View File

@ -1,5 +0,0 @@
public class FrameVictoire {
public FrameVictoire(Grille grille){
System.out.println("Victoire!");
}
}

View File

@ -28,7 +28,7 @@ public class Grille extends JPanel {
this.mines=mines; this.mines=mines;
this.banniere=banniere; this.banniere=banniere;
// On génère le plateau contenant les cases // On génère le plateau contenant les cases
GenererPlateau(taille, caseSize); GenererPlateau(caseSize);
// Instalation des mines // Instalation des mines
@ -130,24 +130,31 @@ 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(taille); AfficherPlateau();
} }
// Méthode pour Génerer le plateau // Méthode pour Génerer le plateau
protected void GenererPlateau(int taille, Dimension caseSize){ protected void GenererPlateau(Dimension caseSize){
this.plateau= new Case[taille]; this.plateau= new Case[this.taille];
for (int i=0;i<taille;i++){ for (int i=0;i<this.taille;i++){
this.plateau[i]= new Case(this,caseSize); this.plateau[i]= new Case(this,caseSize);
} }
} }
// Méthode pour Afficher le plateau // Méthode pour Afficher le plateau
protected void AfficherPlateau(int taille){ protected void AfficherPlateau(){
for (int i=0;i<taille;i++){ for (int i=0;i<this.taille;i++){
this.add(this.plateau[i]); this.add(this.plateau[i]);
} }
} }
// Méthode pour montrer toutes les cases à la fin de la partie
public void setAllVisible(){
for (int i=0;i<this.taille;i++){
this.plateau[i].setVisible();
}
}
// Méthode pour obtenir la taille de la grille de jeu // Méthode pour obtenir la taille de la grille de jeu
public Dimension getGrilleSize(){ public Dimension getGrilleSize(){
return grilleSize; return grilleSize;
@ -166,17 +173,25 @@ public class Grille extends JPanel {
// Méthode déterminant les conditions de victoire // Méthode déterminant les conditions de victoire
public void verifVictoire(){ public void verifVictoire(){
int casesDeminees=0; int casesVisibles=0;
for (int i=0;i<this.taille;i++){ for (int i=0;i<this.taille;i++){
if(plateau[i].getDeminee()==true){ if(plateau[i].getVisible()==true){
casesDeminees+=1; casesVisibles+=1;
} }
} }
if (taille==casesDeminees){ // Lance la victoire si les conditions sont remplies
new FrameVictoire(this); if (taille-mines==casesVisibles){
for (int i=0;i<taille;i++){
this.plateau[i].setVictoire();
}
} }
} }
// Methode pour récupérer le plateau de jeu
public Case[] getPlateau(){
return this.plateau;
}
// Méthode pour rendre visibles les cases autour d'un 0 // Méthode pour rendre visibles les cases autour d'un 0
public void setEntourageVisible(Case panel){ public void setEntourageVisible(Case panel){
for(int i=0; i<this.taille;i++){ for(int i=0; i<this.taille;i++){

View File

@ -1,44 +0,0 @@
import java.awt.event.*;
import java.awt.*;
public class Listener implements MouseListener{
private int marquage=0;
@Override
public void mouseClicked(MouseEvent evenement){
Case panel = (Case)evenement.getSource();
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){
panel.setVisible();
if (panel.getMine()==true){
System.out.println("Perdu!");
}
}
if (evenement.getButton() == MouseEvent.BUTTON3) {
if (this.marquage==0){
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
this.marquage=1;
}
else if (this.marquage==1){
panel.removeAll();
panel.add(new Sus(panel.getSize()), BorderLayout.CENTER);
this.marquage=2;
}
else if (this.marquage==2){
panel.removeAll();
this.marquage=0;
}
panel.updateUI();
System.out.println(""+this.marquage);
}
}
public void mouseEntered(MouseEvent evenement){
}
public void mouseExited(MouseEvent evenement){
}
public void mousePressed(MouseEvent evenement){
}
public void mouseReleased(MouseEvent evenement){
}
}

View File

@ -1,54 +1,58 @@
import java.awt.event.*; import java.awt.event.*;
import java.awt.*; import java.awt.*;
public class ListenerCase implements MouseListener{ public class ListenerCase implements MouseListener {
private int marquage=0; private int marquage = 0;
@Override @Override
// Méthode qui va servir à détecter le click de la souris // Méthode qui va servir à détecter le click de la souris
public void mouseClicked(MouseEvent evenement){ public void mouseClicked(MouseEvent evenement) {
Case panel = (Case)evenement.getSource(); Case panel = (Case) evenement.getSource();
// Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera révélée if (panel.getFinDePartie() == false) {
if ((evenement.getButton() == MouseEvent.BUTTON1)&&(panel.getVisible()==false)&&(this.marquage==0)){ // Si le joueur clique gauche, tant que la case n'est pas marquée, elle sera
panel.setVisible(); // révélée
if (panel.getMine()==true){ if ((evenement.getButton() == MouseEvent.BUTTON1) && (panel.getVisible() == false)
System.out.println("Perdu!"); && (this.marquage == 0)) {
panel.setVisible();
} }
} // Si le joueur clique droit, la case sera marquée
// Si le joueur clique droit, la case sera marquée 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) {
// TODO: Regarder switch panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER);
if (this.marquage==0){ panel.setReperee(true);
panel.add(new Etoile(panel.getSize()), BorderLayout.CENTER); this.marquage = 1;
panel.setReperee(true); }
this.marquage=1; // Au second, on met un point d'interrogation en cas de soupçon pour aider à la
// réflexion
else if (this.marquage == 1) {
panel.removeAll();
panel.add(new Doute(panel.getSize()), BorderLayout.CENTER);
this.marquage = 2;
}
// Au troisième click on efface tout marquage
else if (this.marquage == 2) {
panel.setReperee(false);
panel.removeAll();
this.marquage = 0;
}
// On met à jour l'affichage de la case cliquée
panel.updateUI();
} }
// Au second, on met un point d'interrogation en cas de soupçon pour aider à la réflexion
else if (this.marquage==1){
panel.removeAll();
panel.add(new Doute(panel.getSize()), BorderLayout.CENTER);
this.marquage=2;
}
// Au troisième click on efface tout marquage
else if (this.marquage==2){
panel.setReperee(false);
panel.removeAll();
this.marquage=0;
}
// On met à jour l'affichage de la case cliquée
panel.updateUI();
} }
} }
// Les autres méthodes de l'interface n'interviennent pas // Les autres méthodes de l'interface n'interviennent pas
public void mouseEntered(MouseEvent evenement){ public void mouseEntered(MouseEvent evenement) {
} }
public void mouseExited(MouseEvent evenement){
} public void mouseExited(MouseEvent evenement) {
public void mousePressed(MouseEvent evenement){ }
}
public void mouseReleased(MouseEvent evenement){ public void mousePressed(MouseEvent evenement) {
}
public void mouseReleased(MouseEvent evenement) {
} }
} }

View File

@ -1,18 +0,0 @@
import javax.swing.JComponent;
import java.awt.*;
public class Sus extends JComponent {
private Dimension caseSize;
public Sus(Dimension caseSize) {
super();
this.caseSize=caseSize;
}
@Override
protected void paintComponent(Graphics pinceau) {
Graphics chiffre = pinceau.create();
Font font = new Font("Arial", Font.BOLD, caseSize.width*3/5);
chiffre.setFont(font);
chiffre.setColor(new Color(236, 0, 140));
chiffre.drawString("?",caseSize.width*3/10,caseSize.height*4/5);
}
}

View File

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