O objetivo desta série de exercícios é fazer o buggle percorrer seu mundo. Ele deve numerar as células por onde passa para mostrar a ordem do caminho.
O loop principal de seu código deve ser algo como:
enquanto não estiver na posição final vá para a próxima posição rotule a célula com um número
Ao contrário dos exercícios que vimos até agora, não vamos usar os métodos
avançar()
, recuar()
e similares. Ao invés disto,
vamos calcular as coordenadas da próxima posição de buggle e usar o método
setPos(x, y)
para teletransportar o buggle diretamente
para esta posição. Por exemplo, setPos(3, 5)
teletransporta o
buggle para a célula onde x=3 e y=5.
Sua primeira tarefa é escrever uma função booleana indicando se o buggle
alcançou a posição final ou não, ou seja se ele alcançou o canto inferior
direito do mundo. Para isto, você pode usar getLarguraDoMundo()
e getAlturaDoMundo()
que retornam respectivamente a largura e
altura do mundo. Seu teste deve comparar a posição atual do buggle (que você
pode acessar com getX()
e getY()
) com as dimensões
do mundo.
Cuidado, a primeira linha e coluna são numeradas com 0 e não com 1, e o
ponto (0,0) fica no canto superior esquerdo. Isto pode parecer estranho, mas
é bem comum em ciência da computação.
Então, você tem que escrever o código para alcançar a próxima posição. Neste exercício, você tem que percorrer o mundo linha após linha. Logo, se você está no fundo de uma linha, você tem que se mover para o topo da próxima, caso contrário você tem que se mover para a célula abaixo.
Neste ponto, você pode lançar seu programa para verificar se o buggle percorre corretamente o mundo na ordem esperada, e que ele pára quando tem que parar. Use oo botão stop se o buggle não parar corretamente.
Agora é hora de escrever os números das células. Para isto, você vai
precisar de um contador iniciando em zero no começo do seu código, e
incrementar de um em cada passo (por exemplo com counter +=
1;
). Então, você terá que usar escreverMensagem()
para
escrever o valor no chão.
Você provavelmente vai precisar escrever o primeiro [!java|scala|c]ou último
[/!]valor fora do loop principal [!java|scala|c], dependendo se você prefere
usar um while
ou um do/while
[/!].
Sua vez...