Neste exercício, você vai transformar seu buggle numa formiga de Langton. Estes pequenos animais artificiais são bastante interessantes por que eles recebem regras simples que dependem apenas do seu ambiente local, e depois de um período de aparente comportamento caótico, um padrão geral surge.
As regras são absolutamente triviais: para calcular qual o próximo passo,
você verifica a cor atual do chão (usando getGroundColor()
). Se
for branco, mude para preto, vire à direita e mova uma célula. Se for preto
mude para branco, vire a esquerda e ande uma célula.
Difícil encontrar regras mais simples, não é? Bem, vamos em frente codificar
isto agora. Você precisa completar o método step()
, que
codifica o comportamento da formiga em cada passo. Você vai provavelmente
usar o método getCorDoChão()
para recuperar a cor da célula na
qual a formiga está no momento. Cores úteis são nomeadas simplesmente de
Cor.preto
e Cor.branco
.
Para comparar cores, você não pode usar o símbolo de igualdade (==), pois estas coisas não são valores escalares, mas objetos. Ao invés disto, você precisa escrever algo como o seguinte:
Cor c /* = alguma inicialização */; if (c.equals(Cor.preto)) { /* é igual */ } else { /* não é igual */ }[/!]
mudar a cor do chão não é difícil, mas meio demorado: você tem que mudar a
cor do pincel de seu buggle, baixar o pincel (para marcar a célula atual --
com abaixarPincel()
), e levantar o pincel de novo (com
levantarPincel()
) para evitar problemas quando o buggle se
mexer. Você é, naturalmente, livre para organizar seu código da forma que
quiser, mas você deve querer escrever um método
setCorDoChão(color)
para separar um pouco as coisas.
Como você pode ver da execução deste exercício, o interessante neste algoritmo é que depois de uns 10000 passos de comportamento relativamente caótico, a formiga começa a construir um padrão regular. O surgimento deste padrão regular em meio ao caos é bastante fascinante, não acha? Mova para o próximo exercício para ver mais disto.