2022-05-05 22:45:26 +02:00
//Tom Monin et Clément Martins
// observateurChoix V4
//Class de l'observateur des Cases
import java.awt.* ;
import java.awt.event.* ;
import javax.swing.* ;
2022-05-20 13:39:53 +02:00
import java.time.* ;
2022-05-05 22:45:26 +02:00
public class observateurCase implements MouseListener {
private int ligne , collonne ;
private Case [ ] [ ] tableau ;
private plateau plat ;
2022-05-20 13:39:53 +02:00
private int minute ;
private LocalTime temps ;
public observateurCase ( int ligne0 , int collonne0 , Case [ ] [ ] tableau0 , plateau plat0 , int minute0 , LocalTime temps0 ) {
2022-05-05 22:45:26 +02:00
this . ligne = ligne0 ;
this . collonne = collonne0 ;
this . tableau = tableau0 ;
this . plat = plat0 ;
2022-05-20 13:39:53 +02:00
this . minute = minute0 ;
this . temps = temps0 ;
2022-05-05 22:45:26 +02:00
}
@Override
public void mouseClicked ( MouseEvent evenement ) {
//si on clique gauche
if ( evenement . getButton ( ) = = MouseEvent . BUTTON1 & & plat . etatDeVictoire ( ) = = 0 ) {
//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 & & plat . etatDeVictoire ( ) = = 0 ) {
//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 ) {
2022-05-20 13:39:53 +02:00
if ( LocalTime . now ( ZoneId . systemDefault ( ) ) . getHour ( ) - this . temps . getHour ( ) > 0 ) {
this . minute + = LocalTime . now ( ZoneId . systemDefault ( ) ) . getHour ( ) - this . temps . getHour ( ) * 60 ;
}
float resultatTemps = LocalTime . now ( ZoneId . systemDefault ( ) ) . getMinute ( ) + this . minute - this . temps . getMinute ( ) + 1 ;
float frequenceBombe = ( this . plat . getBombe ( ) * this . plat . getLigne ( ) * this . plat . getCollonne ( ) ) / ( this . plat . getLigne ( ) * this . plat . getCollonne ( ) ) * 100 ;
float scorefinal = frequenceBombe / resultatTemps ;
JOptionPane . showMessageDialog ( this . plat . getFenetre ( ) , " Vous avez Gagnez! \ n votre score est de " + scorefinal ) ;
2022-05-05 22:45:26 +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 ) {
}
//--------------------------------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 ( 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 ) {
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 ) {
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 ) {
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 ) {
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 ) {
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 ) {
this . cliqueEvident ( ligneDelta + 1 , collonneDelta + 1 ) ;
}
}
//--------------------------------------fonction qui affiche toutes les case possédant un voisin d'une case donnée------------------------------------------
private void affichageVoisinEvident ( int ligneDelta , int collonneDelta ) {
//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 ] . getSuspition ( ) = = 0 ) {
this . tableau [ ligneDelta - 1 ] [ collonneDelta ] . setVisibiliter ( true ) ;
this . tableau [ ligneDelta - 1 ] [ collonneDelta ] . repaint ( ) ;
}
if ( ligneDelta < tableau . length - 1 & & 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 ( collonneDelta < tableau [ ligneDelta ] . length - 1 & & 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 & & 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 & & 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 ] . getSuspition ( ) = = 0 ) {
this . tableau [ ligneDelta + 1 ] [ collonneDelta - 1 ] . setVisibiliter ( true ) ;
this . tableau [ ligneDelta + 1 ] [ collonneDelta - 1 ] . repaint ( ) ;
}
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 ] . getSuspition ( ) = = 0 ) {
this . tableau [ ligneDelta - 1 ] [ collonneDelta + 1 ] . setVisibiliter ( true ) ;
this . tableau [ ligneDelta - 1 ] [ collonneDelta + 1 ] . repaint ( ) ;
}
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 ] . getSuspition ( ) = = 0 ) {
this . tableau [ ligneDelta + 1 ] [ collonneDelta + 1 ] . setVisibiliter ( true ) ;
this . tableau [ ligneDelta + 1 ] [ collonneDelta + 1 ] . repaint ( ) ;
}
}
}