Neste momento, o labirinto é um pouco mais complicado. Aleatoriedade pode não ser suficiente, sejamos mais espertos!
A boa notícia é que este labirinto é mais simples do que pode parecer à primeira vista: cada parede é conectada às outras. para sair deste tipo de labirinto, o buggle tem que simplesmente seguir uma parede (a que fica à sua esquerda ou à sua direita, não importa). Enquanto manter uma pata na parede, o buggle deve se mover para a frente até encontrar a saída do labirinto e o biscoitinho que ele tanto gosta.
Isto funciona aqui por que não existem ilhas ou paredes isoladas, logo o nosso buggle não vai entrar num loop para sempre sem encontrar seu baggle.
Como dito anteriormente, não importa se você decide seguir a parede na esquerda ou da direita. Simplesmente, a demonstração segue a da esquerda, logo você deve fazer o mesmo em sua solução para facilitar a comparação de 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. Você deve garantir que o buggle sempre mantenha a pata na
parede, mas também que ele não bata numa parede. Você pode checar a
dica para mais informações sobre isto, mas faça isto apenas se você
estiver perdido. Tente primeiro fazer sem a dica.
Então, escreva o algoritmo inteiro para percorrer o labirinto passo a
passo (usando keepHandOnSideWall()
) até encontrar o
biscoito e a saída. Não esqueça de pegar o baggle quando o encontrar.
Quando seu buggle tem uma parede à esquerda, existem três situações a considerar, dependendo das paredes em volta. A tabela a seguir explica cada situação inicial, e onde você deve deixar seu buggle parar após cada passo.
Caso 1 | Caso 2 | Caso 3 | |
Situação inicial | ![]() |
![]() |
![]() |
Onde é o próximo passo | ![]() |
![]() |
![]() |
Se você faz um right()
em qualquer caso no final da sua
função, é possível escrever ela com 3 linhas com um loop
while
.