Se poser pour les nuls

Bravo ! Vous avez gagné dans une boîte de céréales un voyage (aller simple) pour Mars. La NASA vous a même fourni un module d'excursion lunaire pour l'occasion, et c'est donc avec ce véhicule que vous voyagerez.

Avant le décollage, vous devez vous entraîner sur simulateur aux bases de l'alunissage. Si tout se passe comme prévu, vous ne devriez pas avoir à voler en mode manuel, mais mieux vaut prévenir que guérir, comme ils disent.

Votre mission est de poser le module avec une vitesse verticale inférieure à 10 m/s. Il y a deux façons d'influer sur la trajectoire du module : en modifiant son angle, ou en réglant la poussée de son moteur. Dans cette simulation, nous ne nous intéressons qu'à la poussée, exprimée en m/s².

Vous devez écrire le [!python]corps de la fonction step(), qui sera appelée[/!][!scala|java|c]code qui sera appellé[/!] tous les dixièmes de seconde pendant la simulation. Il faut ajuster la poussée du moteur en utilisant la fonction [!java]void [/!]setPousseeDesiree([!java]int [/!]poussee[!scala]:Integer[/!])poussee est un entier entre 0 et 4 (représentant une poussée entre 0 m/s² et 4 m/s²). Vous ne pouvez incrémenter ou décrémenter la poussée que de 1 entre deux pas de la simulation. Ainsi, si la poussée du moteur est actuellement de 2 et que vous demandez 4, vous n'aurez que 3 à la prochaine étape. Si vous demandez une valeur inférieure à 0 (ou supérieure à 4), tout se passera comme si vous aviez demandé 0 (ou 4).

Afin de prendre des décisions informées, vous pouvez demander des informations sur l'état actuel du module. Dans cette simulation, vous ne serez probablement intéressé que par sa position verticale (accessible grâce à [!java]double [/!]getY()[!scala]:Double[/!]) et sa vitesse verticale (accessible grâce à [!java]double [/!]getVitesseY()[!scala]:Double[/!]). Vous pouvez également demander la poussée actuelle du moteur (avec [!java]int [/!]getPoussee()[!scala]:Integer[/!]) si vous avez oublié ce que vous avez demandé. Rappelez vous que la gravité martienne est de 3.711 m/s², cela peut vous être utile.

Une dernière chose : le module est plutôt petit, et vous n'avez pas tant de carburant que cela. À chaque pas de simulation, il consomme autant d'unité de carburant que la poussée actuelle du moteur. Si vous tombez en panne sèche, vous serez en chute libre alors attention ! Vous pouvez consulter le niveau du réservoir avec [!java]int [/!]getFuel()[!scala]:Integer[/!].

Bon courage !