//Tom Monin et Clément Martins // observateurChoix V4 //Class de l'observateur des Cases import java.awt.*; import java.awt.event.*; import javax.swing.*; import java.time.*; public class observateurCase implements MouseListener{ private int ligne, collonne; private Case[][] tableau; private plateau plat; public observateurCase(int ligne0, int collonne0, Case[][] tableau0, plateau plat0){ this.ligne=ligne0; this.collonne=collonne0; this.tableau=tableau0; this.plat=plat0; } @Override public void mouseClicked(MouseEvent evenement){ //si on clique gauche if(evenement.getButton() == MouseEvent.BUTTON1){ //si la case n'est pas suspecter(d'etre une bombe ou je sais pas) et que elle n'est pas visible if(this.tableau[this.ligne][this.collonne].getSuspition()==0 && this.tableau[this.ligne][this.collonne].getVisibiliter()==false){ //nous la rendons visible et la reafichons this.tableau[this.ligne][this.collonne].setVisibiliter(true); this.tableau[this.ligne][this.collonne].repaint(); //si elle n'a pas de voisin nous pouvons afficher les case aux alentours qui serons évidentes a cliquer if(this.tableau[this.ligne][this.collonne].getVoisin()==0 && this.tableau[this.ligne][this.collonne].getBombe()==false){ this.cliqueEvident(this.ligne, this.collonne); } } } //si clique droit if(evenement.getButton() == MouseEvent.BUTTON3){ //nous modifions la suspitions de la case et la reafichons si la case n'est pas visible if(this.tableau[this.ligne][this.collonne].getVisibiliter()==false){ this.tableau[this.ligne][this.collonne].suspition(); this.tableau[this.ligne][this.collonne].repaint(); } //nous testons si le joeur a gagner/perdu if(this.tableau[this.ligne][this.collonne].getSuspition()==1){ plat.setScore(-1); }if(this.tableau[this.ligne][this.collonne].getSuspition()==2){ plat.setScore(+1); } } //nous testons si le joueur a gagner/perdu //si perdu if(plat.etatDeVictoire()==-1){ //on precise quelle case a exploser this.tableau[this.ligne][this.collonne].setSuspition(4); } //si gagner if(plat.etatDeVictoire()==1){ //on initialise le nombre de minute a 0 int min=0; //on regarde si le joueur a passer plus de 1h if(LocalTime.now(ZoneId.systemDefault()).getHour()-this.plat.getTemps().getHour()>0){ //si oui on recupere ses minutes avec h*60 plus n minute min+=LocalTime.now(ZoneId.systemDefault()).getHour()-this.plat.getTemps().getHour()*60; } //le score sera calculer de cette manière: //frequence de bombe par rapport au nombre de case *10 000 / le temps en min passer a le résoudre //temps en minute: float resultatTemps=LocalTime.now(ZoneId.systemDefault()).getMinute()+this.plat.getMinute()-this.plat.getTemps().getMinute()+1; //fréquence des bombe float frequenceBombe=(this.plat.getBombe()*10000)/(this.plat.getLigne()*this.plat.getCollonne()); //score final= frequenceBombe/resultatTemps //on affiche au joueur son score JOptionPane.showMessageDialog(this.plat.getFenetre(), "Vous avez gagné! \n Votre score est de "+frequenceBombe/resultatTemps); } } @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){ } //--------------------------------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){ //nous affichons la case si elle n'est pas suspecter (pour laisser l'erreur au joueur) if(this.tableau[ligneDelta][collonneDelta].getSuspition()==0){ this.tableau[ligneDelta][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta][collonneDelta].repaint(); } //nous affichons les cases possédants des voisins this.affichageVoisinEvident(ligneDelta, collonneDelta); //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){ //on utilise la fonction recurisve sur la case du haut this.cliqueEvident(ligneDelta-1, collonneDelta); } //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){ this.cliqueEvident(ligneDelta-1, collonneDelta-1); } if(ligneDelta0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()==0 && this.tableau[ligneDelta][collonneDelta-1].getBombe()==false){ this.cliqueEvident(ligneDelta, collonneDelta-1); } if(collonneDelta>0 && ligneDelta0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()==0 && this.tableau[ligneDelta-1][collonneDelta+1].getBombe()==false){ this.cliqueEvident(ligneDelta-1, collonneDelta+1); } if(collonneDelta0 && this.tableau[ligneDelta-1][collonneDelta].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta].getSuspition()==0){ this.tableau[ligneDelta-1][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta].repaint(); } if(ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta].getSuspition()==0){ this.tableau[ligneDelta+1][collonneDelta].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta].repaint(); } if(collonneDelta0 && this.tableau[ligneDelta][collonneDelta+1].getSuspition()==0){ this.tableau[ligneDelta][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta][collonneDelta+1].repaint(); } if(collonneDelta>0 && this.tableau[ligneDelta][collonneDelta-1].getVisibiliter()==false && this.tableau[ligneDelta][collonneDelta-1].getVoisin()>0 && this.tableau[ligneDelta][collonneDelta-1].getSuspition()==0){ this.tableau[ligneDelta][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta][collonneDelta-1].repaint(); } 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].getSuspition()==0){ this.tableau[ligneDelta-1][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta-1].repaint(); } if(collonneDelta>0 && ligneDelta0 && this.tableau[ligneDelta+1][collonneDelta-1].getSuspition()==0){ this.tableau[ligneDelta+1][collonneDelta-1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta-1].repaint(); } if(collonneDelta0 && this.tableau[ligneDelta-1][collonneDelta+1].getVisibiliter()==false && this.tableau[ligneDelta-1][collonneDelta+1].getVoisin()>0 && this.tableau[ligneDelta-1][collonneDelta+1].getSuspition()==0){ this.tableau[ligneDelta-1][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta-1][collonneDelta+1].repaint(); } if(collonneDelta0 && this.tableau[ligneDelta+1][collonneDelta+1].getSuspition()==0){ this.tableau[ligneDelta+1][collonneDelta+1].setVisibiliter(true); this.tableau[ligneDelta+1][collonneDelta+1].repaint(); } } }