O objetivo desta série de exercícios é fazer o buggle percorrer o mundo dele. Deve numerar as células por onde passa para mostrar a ordem do caminho.
O loop principal do seu código deve ser algo como:
enquanto não estiver na posição final vá à 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
forward()
, 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 à célula onde x=3 e y=5.
A sua primeira tarefa é escrever uma função booleana a indicar se o buggle
alcançou a posição final ou não, ou seja, se alcançou o canto inferior
direito do mundo. Para isto, pode usar getWorldWidth()
e
getWorldHeight()
que retornam respetivamente a largura e altura
do mundo. O seu teste deve comparar a posição atual do buggle (que 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, tem que escrever o código para alcançar a próxima posição. Neste exercício, tem que percorrer o mundo linha após linha. Logo, se está no fundo de uma linha, tem que mover ao topo da próxima, caso contrário tem que mover à célula abaixo.
Neste ponto, pode lançar o seu programa para verificar se o buggle percorre corretamente o mundo na ordem esperada e que 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, vai precisar de
um contador a iniciar em zero no começo do seu código e incrementar de um em
cada passo (por exemplo com counter += 1;
). Então, terá que
usar writeMessage()
para escrever o valor no chão.
Provavelmente vai precisar escrever o primeiro [!java|scala|c]ou último
[/!]valor fora do loop principal [!java|scala|c], a depender se prefere usar
um while
ou um do/while
[/!].
É asua vez...