Lander 101

Parabéns! Você ganhou uma viagem (só de ida) para Marte numa caixa de cereais. A NASA está orgulhosa em doar o módulo da excursão lunar para esta missão, e é ele que você vai pilotar.

Antes de pousar, você vai realizar algumas simulações de pouso. Você não tem que pilotar o módulo se tudo for como planejado mas, como dizem, "é melhor prevenir que remediar".

Sua missão é pousar o módulo com velocidade vertical de no máximo 10 m/s. Existem duas formas de influenciar o curso do módulo: ajustando seu ângulo ou ajustando sua potência. Nesta simulação vamos nos preocupar apenas com ajustar a potência, expressa em m/s².

[!python]A função step() [/!][!scala|java|c]O código[/!] que você vai escrever agora vai ser chamad[!python]a[/!][!scala|java|c]o[/!] a cada 0.1 segundos durante a simulação. Certifique-se que seu código não demora muito para executar, sem usar loop while! Ele apenas deve ajustar a potência desejada para o próximo passo da simulação, chamando [!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²). Você só pode aumentar ou diminuir a potênciapor 1 entre dois passos da simulação. Portanto, se a potência atual é 2 e você pede 4, você vai conseguir apenas 3 no próximo passo. Se você pede por menos que 0 (ou, respectivamente, mais que 4), vai ser como se você tivesse pedido 0 (ou, respectivamente, 4).

Para tomar decisões informadas, você pode consultar o status do módulo. Nesta simulação você provavelmente vai estar interessado na posição vertical: [!java]double [/!]getY()[!scala]:Double[/!], e na velocidade vertical: [!java]double [/!]getSpeedY()[!scala]:Double[/!]. Você também pode pedir a potência com [!java]int [/!]getThrust()[!scala]:Integer[/!] caso você não lembre o que pediu. Lembre que a gravidade de Marte é 3.711 m/s². Isto pode ser útil.

Uma última coisa: o módulo é bem pequeno, logo você 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 você fique sem combustível você vai cair em queda livre, portanto cuidado! Você pode consultar o quantidade de unidades de combustível restante usando [!java]int [/!]getFuel()[!scala]:Integer[/!].

Boa Sorte!