SAE21_2021/Case.java

129 lines
3.3 KiB
Java
Raw Normal View History

2022-04-28 16:50:06 +02:00
import javax.swing.*;
import java.awt.*;
2022-04-30 16:38:56 +02:00
public class Case extends JPanel {
2022-05-04 23:03:02 +02:00
// Definition d'attributs
2022-05-05 22:29:04 +02:00
private Grille grille;
2022-04-29 10:03:05 +02:00
private int entourage;
private boolean visible;
private boolean minee;
2022-05-05 22:29:04 +02:00
private boolean reperee;
2022-04-28 16:50:06 +02:00
2022-05-04 23:03:02 +02:00
// Définition du constructeur
2022-05-05 22:29:04 +02:00
public Case(Grille grille, Dimension caseSize) {
2022-04-28 17:57:18 +02:00
super();
2022-05-05 22:29:04 +02:00
// Initialisation des attributs
this.visible=false;
2022-05-16 20:19:51 +02:00
this.reperee=false;
2022-05-05 22:29:04 +02:00
this.grille=grille;
2022-05-04 23:03:02 +02:00
// On place un listener sur notre case pour qu'elle réagisse aux clicks du joueur
2022-05-17 11:11:29 +02:00
this.addMouseListener(new ListenerCase());
2022-05-05 22:29:04 +02:00
// Mise en page de la case et couleur par défaut
this.setSize(caseSize);
2022-04-29 10:03:05 +02:00
GridLayout unique = new GridLayout(1,1);
this.setLayout(unique);
2022-05-04 19:53:32 +02:00
this.setBackground(new Color(70, 70, 70));
}
2022-05-16 20:19:51 +02:00
// Méthode qui permet de montrer la case, et fait perdre si elle est minée
public void setVisible(){
2022-05-17 20:53:21 +02:00
// On vérfie que la case n'est pas déjà visible
2022-05-16 20:19:51 +02:00
if (!this.visible){
2022-05-10 11:10:31 +02:00
this.visible = true;
2022-05-17 20:53:21 +02:00
// On affiche dans la case le nombre de mine adjacentes ( rien si aucune )
if ((!this.minee)&&(!this.reperee)){
2022-05-10 11:10:31 +02:00
this.setBackground(new Color(80, 80, 80));
if (this.entourage > 0) {
this.add(new Entourage(this.entourage, this.getSize()));
}
2022-05-17 20:53:21 +02:00
// Cherche a afficher les cases adjacente s'il n'y a aucune mine autour
else if (this.entourage == 0) {
this.grille.setEntourageVisible(this);
}
2022-05-17 23:04:53 +02:00
if (this.grille.getEnJeu()){
2022-05-17 20:53:21 +02:00
this.grille.verifVictoire();
}
}
// S'il y a une mine et que c'est la première cliquée
2022-05-17 23:04:53 +02:00
else if ((this.minee)&&(this.grille.getEnJeu())) {
this.grille.setEnJeu(false);
2022-05-17 20:53:21 +02:00
this.setBackground(new Color(200, 0, 0));
2022-05-21 17:30:12 +02:00
this.grille.Defaite();
2022-05-17 20:53:21 +02:00
}
// S'il y a une mine est que la partie est finie
2022-05-17 23:04:53 +02:00
else if ((this.minee)&&(!this.grille.getEnJeu())) {
2022-05-17 20:53:21 +02:00
this.setBackground(new Color(236, 0, 140));
// Sinon le nombre de mines autour d'elle
2022-05-10 11:10:31 +02:00
}
2022-05-16 20:19:51 +02:00
2022-05-10 11:10:31 +02:00
// Mise à jour de l'affichage de la case
this.updateUI();
2022-05-17 20:53:21 +02:00
2022-05-04 19:53:32 +02:00
}
}
2022-04-28 16:50:06 +02:00
2022-05-05 22:29:04 +02:00
// Méthode permettant de dire si la case est cachée ou visible
public boolean getVisible(){
return this.visible;
}
2022-05-05 22:29:04 +02:00
// Méthode pour déclarer la présence d'une mine sur une case
2022-05-04 23:03:02 +02:00
public void setMine(){
this.minee=true;
}
2022-04-28 17:57:18 +02:00
2022-05-05 22:29:04 +02:00
// Permet de dire si une case est minée
public boolean getMine(){
return this.minee;
2022-04-28 17:57:18 +02:00
}
2022-05-04 23:03:02 +02:00
// Défini combien de mines entourent la case
public void setEntourage(int entourage){
this.entourage=entourage;
}
2022-05-05 22:29:04 +02:00
2022-05-10 11:10:31 +02:00
// Renvoi l'entourage de la case
public int getEntourage(){
return this.entourage;
}
// Permet d'acceder à la grille sur laquelle est la case
public Grille getGrille(){
return this.grille;
}
2022-05-05 22:29:04 +02:00
// Méthode pour savoir si le joueur pense que la case est minée
public void setReperee(boolean reperee){
this.reperee=reperee;
this.grille.MinesLeft();
}
// Methode pour dire si la case est marquée ou non
public boolean getReperee(){
return this.reperee;
}
2022-05-16 20:19:51 +02:00
// Methode pour montrer que la partie est gagnée
public void setVictoire(){
2022-05-17 23:04:53 +02:00
this.grille.setEnJeu(false);
2022-05-16 20:19:51 +02:00
if (this.minee==true){
removeAll();
this.setBackground(new Color(236, 214, 0));;
2022-05-23 10:47:54 +02:00
this.updateUI();
2022-05-16 20:19:51 +02:00
}
}
// Methode pour savoir dans le Listener si la partie est finie ou non
2022-05-17 20:53:21 +02:00
public boolean getEnJeu(){
2022-05-17 23:04:53 +02:00
return this.grille.getEnJeu();
2022-05-05 22:29:04 +02:00
}
2022-05-21 18:41:24 +02:00
// TODO : Override toString() pour avoir 3 bits désignants l'état de la case
//
2022-04-28 16:50:06 +02:00
}