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 {
2022-04-28 18:15:17 +02:00
private int ligne , collonne ;
2022-04-27 13:19:57 +02:00
private Case [ ] [ ] tableau ;
2022-04-28 18:15:17 +02:00
private plateau plat ;
2022-04-29 14:20:40 +02:00
public observateurCase ( int ligne0 , int collonne0 , Case [ ] [ ] tableau0 , plateau plat0 ) {
2022-04-28 18:15:17 +02:00
this . ligne = ligne0 ;
this . collonne = collonne0 ;
2022-04-27 13:19:57 +02:00
this . tableau = tableau0 ;
2022-04-29 14:20:40 +02:00
this . plat = plat0 ;
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-29 14:20:40 +02:00
if ( evenement . getButton ( ) = = MouseEvent . BUTTON1 & & plat . etatDeVictoire ( ) = = 0 ) {
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
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
this . cliqueEvident ( this . ligne , this . collonne ) ;
2022-04-29 12:04:55 +02:00
}
2022-04-27 18:01:00 +02:00
}
2022-04-27 13:19:57 +02:00
}
2022-04-28 21:31:03 +02:00
//si clique droit
2022-04-29 14:20:40 +02:00
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 ( ) ;
}
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 ) {
2022-04-29 14:20:40 +02:00
plat . setScore ( - 1 ) ;
2022-04-29 00:33:24 +02:00
}
if ( this . tableau [ this . ligne ] [ this . collonne ] . getSuspition2 ( ) = = false & & this . tableau [ this . ligne ] [ this . collonne ] . getSuspition ( ) = = true ) {
2022-04-29 14:20:40 +02:00
plat . setScore ( + 1 ) ;
2022-04-29 00:33:24 +02:00
}
2022-04-27 13:19:57 +02:00
}
2022-05-05 02:06:48 +02:00
//nous testons si le joueur a gagner/perdu
//si perdu
if ( plat . etatDeVictoire ( ) = = - 1 ) {
plateau . removeListener ( this . tableau ) ;
for ( int i = 0 ; i < this . tableau . length ; i + + ) {
for ( int t = 0 ; t < this . tableau [ i ] . length ; t + + ) {
this . tableau [ i ] [ t ] . setVisibiliter ( true ) ;
this . tableau [ i ] [ t ] . repaint ( ) ;
}
}
plat . perdu ( ) ;
plat . paintLogo ( ) ;
}
//si gagner
if ( plat . etatDeVictoire ( ) = = 1 ) {
plateau . removeListener ( this . tableau ) ;
plat . gagner ( ) ;
plat . paintLogo ( ) ;
}
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-----------------------------
2022-04-28 18:15:17 +02:00
private void cliqueEvident ( int ligneDelta , int collonneDelta ) {
2022-04-28 21:31:03 +02:00
//nous affichons la case
2022-04-28 18:15:17 +02:00
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
2022-04-28 18:15:17 +02:00
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
2022-04-28 18:15:17 +02:00
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 18:15:17 +02:00
}
2022-04-28 21:31:03 +02:00
//la même chose pour les 8 cases possible donc recursivite possible (voir principe en haut)
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta - 1 , collonneDelta - 1 ) ;
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta + 1 , collonneDelta ) ;
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta , collonneDelta + 1 ) ;
2022-04-28 18:15:17 +02:00
}
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 ) ;
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta + 1 , collonneDelta - 1 ) ;
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta - 1 , collonneDelta + 1 ) ;
2022-04-28 18:15:17 +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 ] . getBombe ( ) = = false ) {
2022-04-28 21:31:03 +02:00
this . cliqueEvident ( ligneDelta + 1 , collonneDelta + 1 ) ;
2022-04-28 18:15:17 +02:00
}
}
2022-04-28 21:31:03 +02:00
//--------------------------------------fonction qui affiche toutes les case possédant un voisin d'une case donnée------------------------------------------
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
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 ) {
2022-04-28 18:15:17 +02:00
this . tableau [ ligneDelta + 1 ] [ collonneDelta + 1 ] . setVisibiliter ( true ) ;
this . tableau [ ligneDelta + 1 ] [ collonneDelta + 1 ] . repaint ( ) ;
}
}
2022-04-27 13:19:57 +02:00
}