Para concluir com esta lição introdutória em algoritmos de resolução de labirintos, vamos investigar outra forma de encontrar a saída. O buggle nesta lição é um buggle especial: é um jedi. Pode sentir a Força. Isto significa que pode sentir o ambiente.
Sem nem sequer sair da posição dele, pode recuperar informações sobre o mundo que está a viver, com as seguintes funções:
getWorldWidth() da a largura ("width") do mundo.getWorldHeight() da a altura ("height") do mundo.hasTopWall(x,y) diz se a célula (x,y) deste mundo tem uma
parede no topo.hasLeftWall(x,y) diz se a célula (x,y) deste mundo tem uma
parede na esquerda.hasBaggle(x,y) diz se a célula (x,y) deste mundo tem um baggle.setIndication(x,y,i) adiciona a indicação inteira
i à célula (x,y).getIndication(x,y,i) obtém a indicação inteira da célula (x,y)
(ou 9999 se não houver indicação).Note que não é possível construir uma parede na borda de baixo ou na borda à direita de uma célula. Portanto, se tal parede existe, significa que foi construído nas células vizinhas -- como uma parede na borda de cima (respetivamente da esquerda) da célula que é localizada abaixo (respetivamente à direita) da célula atual.
O seu buggle deve primeiro escrever a distância à saída em cada célula (ou
pelo menos nas células úteis).
Para isto, encontre a saída e escreva 0 lá. Então, escreva 1 em cada célula
vizinha que não esteja separada da saída por uma parede. E depois marque
cada célula a partir da qual possa alcançar a saída em 2 passos e itere para
todas as células até que todas as células estejam marcadas.
Uma vez que as células estejam marcadas, faça o seu buggle jedi percorrer a
caminho mais curto. Basicamente o buggle tem apenas que andar em cada caso
com a menor distância à saída. Pode usar o método
setDirection(direction) para fazer o seu buggle virar para a
direção específica como [!scala|java|python]Direction.[/!]NORTH
ou [!scala|java|python]Direction.[/!]EAST.