SAE21_2021/CASE/observateurCase.java

164 lines
8.7 KiB
Java
Raw Normal View History

2022-04-27 13:19:57 +02:00
//Tom Monin et Clément Martins
2022-04-28 21:31:03 +02:00
// observateurChoix V4
//Class de l'observateur des Cases
2022-04-27 13:19:57 +02:00
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class observateurCase implements MouseListener{
private int ligne, collonne;
2022-04-27 13:19:57 +02:00
private Case[][] tableau;
private plateau plat;
2022-04-29 00:33:24 +02:00
private paintMenuJeu[] tabScore;
public observateurCase(int ligne0, int collonne0, Case[][] tableau0, paintMenuJeu[] tabScore0){
this.ligne=ligne0;
this.collonne=collonne0;
2022-04-27 13:19:57 +02:00
this.tableau=tableau0;
2022-04-29 00:33:24 +02:00
this.tabScore=tabScore0;
2022-04-27 13:19:57 +02:00
}
@Override
public void mouseClicked(MouseEvent evenement){
2022-04-28 21:31:03 +02:00
//si on clique gauche
2022-04-27 13:19:57 +02:00
if(evenement.getButton() == MouseEvent.BUTTON1){
2022-04-28 21:31:03 +02:00
//si la case n'est pas suspecter(d'etre une bombe ou je sais pas) et que elle n'est pas visible
2022-04-28 20:43:37 +02:00
if(this.tableau[this.ligne][this.collonne].getSuspition()==false && this.tableau[this.ligne][this.collonne].getVisibiliter()==false){
2022-04-28 21:31:03 +02:00
//nous la rendons visible et la reafichons
this.tableau[this.ligne][this.collonne].setVisibiliter(true);
this.tableau[this.ligne][this.collonne].repaint();
2022-04-28 21:31:03 +02:00
//si elle n'a pas de voisin nous pouvons afficher les case aux alentours qui serons évidentes a cliquer
2022-04-28 20:43:37 +02:00
if(this.tableau[this.ligne][this.collonne].getVoisin()==0 && this.tableau[this.ligne][this.collonne].getBombe()==false){
this.cliqueEvident(this.ligne, this.collonne);
}
2022-04-28 21:31:03 +02:00
//nous testons si le joueur a gagner/perdu
2022-04-28 20:43:37 +02:00
int resultat=plateau.etatDeVictoire(this.tableau);
2022-04-28 21:31:03 +02:00
//si il perd
2022-04-28 20:43:37 +02:00
if(resultat==-1){
plateau.perduGagner(this.tableau);
}
2022-04-28 21:31:03 +02:00
//si il gagne
2022-04-28 20:43:37 +02:00
if(resultat==1){
plateau.perduGagner(this.tableau);
}
}
2022-04-27 13:19:57 +02:00
}
2022-04-28 21:31:03 +02:00
//si clique droit
2022-04-27 13:19:57 +02:00
if(evenement.getButton() == MouseEvent.BUTTON3){
2022-04-28 21:31:03 +02:00
//nous modifions la suspitions de la case et la reafichons
this.tableau[this.ligne][this.collonne].suspition();
this.tableau[this.ligne][this.collonne].repaint();
2022-04-28 21:31:03 +02:00
//nous testons si le joeur a gagner/perdu
2022-04-29 00:33:24 +02:00
if(this.tableau[this.ligne][this.collonne].getSuspition2()==true){
for(int i=0; i<tabScore.length; i++){
tabScore[i].setScore(tabScore[i].getScore()-1);
}
}
if(this.tableau[this.ligne][this.collonne].getSuspition2()==false && this.tableau[this.ligne][this.collonne].getSuspition()==true){
for(int i=0; i<tabScore.length; i++){
tabScore[i].setScore(tabScore[i].getScore()+1);
}
}
2022-04-28 20:43:37 +02:00
int resultat=plateau.etatDeVictoire(this.tableau);
2022-04-28 21:31:03 +02:00
//si perdu
2022-04-28 20:43:37 +02:00
if(resultat==-1){
System.out.println("perdu");
}
2022-04-28 21:31:03 +02:00
//si gagner
2022-04-28 20:43:37 +02:00
if(resultat==1){
System.out.println("gagner");
}
2022-04-27 13:19:57 +02:00
}
}
@Override // un bouton cliqué
public void mouseEntered(MouseEvent evenement){
}
@Override // debut du survol
public void mouseExited(MouseEvent evenement){
}
@Override // fin du survol
public void mousePressed(MouseEvent evenement){
}
@Override // un bouton appuyé
public void mouseReleased(MouseEvent evenement){
}
2022-04-28 21:31:03 +02:00
//--------------------------------fonction permettant d'afficher toutes les case n'ayant pas de voisin adjacente utilisant plusieur fonction récursive-----------------------------
private void cliqueEvident(int ligneDelta, int collonneDelta){
2022-04-28 21:31:03 +02:00
//nous affichons la case
this.tableau[ligneDelta][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta].repaint();
2022-04-28 21:31:03 +02:00
//nous affichons les cases possédants des voisins
this.affichageVoisinEvident(ligneDelta, collonneDelta);
2022-04-28 21:31:03 +02:00
//si la case du haut existe et n'est pas visible et n'a pas de voisin et n'est pas une bombe
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta].getBombe()==false){
2022-04-28 21:31:03 +02:00
//on utilise la fonction recurisve sur la case du haut
this.cliqueEvident(ligneDelta-1, collonneDelta);
}
2022-04-28 21:31:03 +02:00
//la même chose pour les 8 cases possible donc recursivite possible (voir principe en haut)
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta-1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta-1, collonneDelta-1);
}
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta+1, collonneDelta);
}
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta+1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta, collonneDelta+1);
}
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta, collonneDelta-1);
}
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta-1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta+1, collonneDelta-1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta-1, collonneDelta+1);
}
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta+1][collonneDelta+1].getBombe()==false){
2022-04-28 21:31:03 +02:00
this.cliqueEvident(ligneDelta+1, collonneDelta+1);
}
}
2022-04-28 21:31:03 +02:00
//--------------------------------------fonction qui affiche toutes les case possédant un voisin d'une case donnée------------------------------------------
private void affichageVoisinEvident(int ligneDelta, int collonneDelta){
2022-04-28 21:31:03 +02:00
//nous regardons les 8 case adjacentes et si elle a des voisin
//si elle en a alors nous la rendons visible
if(ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta].repaint();
}
2022-04-28 21:31:03 +02:00
if(ligneDelta<tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta<tableau[ligneDelta].length-1 && this.tableau[ligneDelta][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta+1].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta][collonneDelta-1].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta>0 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta-1].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta>0 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta-1].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta-1].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta>0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta-1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta-1][collonneDelta+1].repaint();
}
2022-04-28 21:31:03 +02:00
if(collonneDelta<this.tableau[ligneDelta].length-1 && ligneDelta<this.tableau.length-1 && this.tableau[ligneDelta+1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta+1][collonneDelta+1].getVoisin()>0){
this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true);
this.tableau[ligneDelta+1][collonneDelta+1].repaint();
}
}
2022-04-27 13:19:57 +02:00
}