Pour conclure avec cette leçon d'introduction aux algorithmes de sortie de labyrinthe, nous allons étudier un autre moyen de trouver la sortie. La buggle de cette leçon est spécial : c'est un jedi. Il peut ressentir la Force. Cela signifie qu'elle peut ressentir son environnement.
Sans même changer de place, elle peut retrouver des informations sur le monde qui l'entoure, avec les instructions suivantes :
getMondeLargueur()
pour connaitre la largeur du mondegetMondeHauteur()
pour connaitre la hauteur du monde.aMurNord(x,y)
indique si la cellule (x,y) de ce monde est
fermée par un mur en haut.aMurOuest(x,y)
indique si la cellule (x,y) de ce monde est
fermée par un mur à gauche.aBiscuit(x,y)
indique si un baggle se trouve dans la cellule
(x,y) de ce monde.setIndication(x,y,i)
ajoute une indication entière
i
sur le sol de la cellule (x,y).getIndication(x,y,i)
retourne l'indication entière qui se
trouve dans la cellule (x,y) (ou bien la valeur 9999 s'il n'y a pas
d'indication à l'endroit indiqué).Il est bon de noter qu'il n'est pas possible de construire un mur sur la côté inférieur ou droit d'une case. Néanmoins, quand de tels murs existent, cela signifie qu'il a été construit sur une case voisine -- comme mur supérieur (respectivement gauche) sur la case qui est située en dessous (respectivement sur à droite) de la case courante.
Votre buggle devrait tout d'abord écrire sur chaque case importante la
distance qui la sépare de la sortie.
Pour cela, trouvez la sortie et écrivez 0 dessus. Ensuite, écrivez 1 sur
toutes les cases adjacentes à la sortie qui n'en sont pas séparées par un
mur. Ensuite, écrivez 2 sur toutes les cases à partir desquelles on peut
atteindre une case marquée 1, puis faites de même pour toutes les cases
jusqu'à numéroter la case où se trouve votre buggle.
Une fois que toutes les cases sont marquées, faites en sorte que votre
buggle jedi trouve le plus court chemin en suivant les indications écrites
au sol. Pour celà, il lui suffit à chaque pas d'aller sur la case de plus
petite distance parmis celles accessibles. Vous pouvez utiliser la méthode
void setDirection(Direction d)
pour faire regarder votre buggle
dans une direction spécifique comme Direction.NORTH
,
Direction.SOUTH
, Direction.EAST
ou
Direction.WEST
, qui correspondent respectivement au nord, sud,
est et ouest.