2023-04-28 05:14:35 +02:00
import javax.swing.JOptionPane ;
2023-04-28 20:23:23 +02:00
/ * *
* La class Attente inclu un KeyListener , cette classe a pour objectif d ' attendre une entré sur la touche espace du clavier
* pour regarder le parcours qu ' emprunte l ' algorithme
* @version 1 . 1
* @author Matthis Fauvet
* /
2023-04-28 05:14:35 +02:00
public class Parcours {
private int taille ;
private int ceCompteur = 0 ;
private Cellules [ ] [ ] labyrinthe ;
public Parcours ( Cellules [ ] [ ] tableau , int X , int Y , int len ) {
this . taille = len ;
this . labyrinthe = tableau ;
this . Parcourir ( X , Y ) ;
}
public boolean Parcourir ( int coordX , int coordY ) {
boolean done = false ;
if ( estValide ( coordX , coordY ) ) {
if ( this . labyrinthe [ coordX ] [ coordY ] . getType ( ) = = Cellules . SORTIE ) {
JOptionPane . showMessageDialog ( null , " Nous avons trouvé un chemin en " + ( this . ceCompteur ) + " coups pour ce labyrinthe " , " Information " , JOptionPane . INFORMATION_MESSAGE ) ;
return true ;
} else {
this . labyrinthe [ coordX ] [ coordY ] . setType ( Cellules . MUR ) ;
//Appels récursifs
if ( done ! = true ) {
done = Parcourir ( coordX + 1 , coordY ) ;
done = Parcourir ( coordX , coordY + 1 ) ;
done = Parcourir ( coordX - 1 , coordY ) ;
done = Parcourir ( coordX , coordY - 1 ) ;
}
}
}
return done ;
}
private boolean estValide ( int pos_x , int pos_y ) {
this . ceCompteur + + ;
boolean result = false ;
//Si la case passée en paramètre est dans les dimensions du labyrinthe
if ( pos_x > = 0 & & pos_x < this . taille & & pos_y > = 0 & & pos_y < this . taille ) {
//Et si la case est un espace vide
if ( this . labyrinthe [ pos_x ] [ pos_y ] . getType ( ) = = Cellules . COULOIR | | this . labyrinthe [ pos_x ] [ pos_y ] . getType ( ) = = Cellules . ENTREE | | this . labyrinthe [ pos_x ] [ pos_y ] . getType ( ) = = Cellules . SORTIE ) {
result = true ;
}
}
return result ;
} //Fin estValide()
}