Agora, o labirinto é um pouco mais complicado. Aleatoriedade pode não ser suficiente, devemos ser espertos!
A boa notícia é que este labirinto é mais simples do que pode parecer à primeira vista: todas as paredes são conectadas às outras. Para sair deste tipo de labirinto, o buggle tem que simplesmente seguir uma parede (a que fica à esquerda ou à direita dele, não importa). Enquanto manter uma pata na parede, o buggle deve mover para a frente até encontrar a saída do labirinto e o biscoito que tanto gosta.
Isto funciona aqui porque não existem ilhas ou paredes isoladas, pois o nosso buggle não vai entrar num loop para sempre sem encontrar o baggle dele.
Como dito anteriormente, não importa se decide seguir a parede à esquerda ou à direita. Simplesmente, a demonstração segue a da esquerda, logo deve fazer o mesmo na sua solução para facilitar a comparação da sua solução e da demonstração.
Escreva um método keepHandOnSideWall()
que faz o buggle andar
uma casa para a frente enquanto mantém a pata na parede do lado
selecionado. Deve garantir que o buggle sempre mantenha a pata na parede,
mas também que não bata numa parede. Pode controlar a dica para mais
informações, mas faça-o apenas se estiver perdido. Tente primeiro fazer sem
a dica.
Depois escreva o algoritmo inteiro para percorrer o labirinto passo a passo
(a usar keepHandOnSideWall()
) até encontrar o biscoito e a
saída. Não se esqueça de apanhar o baggle quando o encontrar.
Quando o seu buggle tem uma parede à esquerda, existem três situações a considerar, dependente das paredes à volta. A tabela a seguir explica cada situação inicial e onde deve deixar o seu buggle parar depois de cada passo.
Caso 1 | Caso 2 | Caso 3 | |
Situação inicial | ![]() |
![]() |
![]() |
Onde é o próximo passo | ![]() |
![]() |
![]() |
Se faz um right()
em qualquer caso no final da sua função, é
possível escreve-la com 3 linhas com um loop while
.