Parabéns! Ganhou uma viagem (só de ida) para Marte numa caixa de cereais. A NASA é orgulhosa em doar o módulo da excursão lunar para esta missão e é o que vai pilotar.
Antes de pousar, vai realizar algumas simulações de pouso. Não tem que pilotar o módulo se tudo for como planeado, mas, como dizem, "é melhor prevenir que remediar".
A sua missão é pousar o módulo com a velocidade vertical máxima de 10 m/s. Existem duas formas de influenciar o curso do módulo: a ajustar o ângulo dele ou a ajustar a potência dele. Nesta simulação vamos nos preocupar apenas a ajustar a potência, expressa em m/s².
[!scala|java|c]O código[/!] [!python] da função step()
[/!],
que vai escrever, agora vai ser chamada a cada 0,1 segundos durante a
simulação. Certifique-se que o seu código não demora muito para executar,
sem usar o loop while! Apenas deve ajustar a potência desejada para o
próximo passo da simulação, a chamar [!java]void
[/!]setDesiredThrust([!java]int
[/!]desiredThrust[!scala]:Integer[/!])
onde
desiredThrust
é algum inteiro entre 0 e 4 (ou seja, uma
potência entre 0 m/s² e 4 m/s²). Só pode aumentar ou diminuir a potência por
1 entre dois passos da simulação. Portanto, se a potência atual é 2 e pede
4, vai conseguir apenas 3 no próximo passo. Se pede por menos que 0 (ou,
respetivamente, mais que 4), vai ser como se tivesse pedido 0 (ou,
respetivamente, 4).
Para tomar decisões informadas, pode consultar o estado do módulo. Nesta
simulação provavelmente vai estar interessado na posição vertical:
[!java]double [/!]getY()[!scala]:Double[/!]
e na velocidade
vertical: [!java]double
[/!]getSpeedY()[!scala]:Double[/!]
. Também pode pedir a potência com
[!java]int [/!]getThrust()[!scala]:Integer[/!]
caso não se
lembre o que pediu. Lembre-se que a gravidade de Marte é 3,711 m/s². Isto
pode ser útil.
Uma última coisa: o módulo é bem pequeno, logo não tem muito combustível. Em
cada passo da simulação o módulo consome tantas unidades de combustível
quanto a potência atual. Uma vez que fique sem combustível vai cair em queda
livre, portanto cuidado! Pode consultar a quantidade de unidades de
combustível restante a usar [!java]int
[/!]getFuel()[!scala]:Integer[/!]
.
Boa Sorte!