Poser un module en douceur, tout est dans la physique
Lunar Lander (Atari, 1979) tient en une seule tension : un module lunaire tombe sous une gravité constante, et je dispose d'une poussée limitée pour contrarier cette chute et me poser sans casse. Aucun ennemi, aucun score à battre — juste des équations du mouvement à dompter. C'est le prétexte idéal pour montrer comment on intègre proprement une physique temps réel dans le navigateur, en quelques kilo-octets de JavaScript et sans aucune dépendance.
Une gravité constante intégrée par le delta-time
À chaque image, j'ajoute à la vitesse verticale une accélération de pesanteur fixe, multipliée par le temps écoulé depuis l'image précédente (delta time), puis j'avance la position selon cette vitesse. Ce même delta borne le pas de simulation : sur un écran 60, 120 ou 144 Hz, la chute garde exactement la même vitesse réelle. C'est la différence entre une simulation qui « accélère » sur une machine rapide et un comportement identique partout — un principe qui vaut bien au-delà d'un jeu.
Une poussée orientée selon l'angle du module
La poussée principale ne pousse pas « vers le haut » : elle pousse dans l'axe
du module. Je projette donc une accélération constante sur la direction que
donne l'inclinaison courante — une composante horizontale en
sin(angle), une composante verticale en -cos(angle) —
et je l'ajoute au vecteur vitesse. Piloter, c'est alors composer en continu
cette poussée orientée avec la gravité : incliner pour freiner une dérive
latérale, se redresser pour ralentir la descente, sans jamais gaspiller.
Un carburant qui rend chaque décision coûteuse
La poussée consomme un carburant limité : tant que la touche est enfoncée et qu'il en reste, la réserve baisse au prorata du temps de poussée, jauge à l'appui. Réservoir vide, le moteur se tait et la gravité reprend seule la main. Cette contrainte transforme un simple exercice de physique en problème d'arbitrage : freiner tôt et sûr, ou tard et juste. L'affichage en direct de la vitesse verticale, de la vitesse horizontale et de l'altitude sert de seul instrument de bord.
Les conditions d'un atterrissage réussi
Le terrain est généré à chaque partie : une ligne brisée irrégulière qui comporte toujours au moins une zone plate, la plateforme. Quand les pieds du module touchent le sol, quatre conditions décident du verdict, toutes en même temps : être au-dessus de la plateforme, une vitesse verticale sous son seuil, une vitesse horizontale sous le sien, et une inclinaison quasi nulle. Une seule qui manque, et c'est le crash — trop rapide, trop de travers, ou à côté de la cible. Réussir, c'est réunir les quatre.
Ce qu'une démo aussi carrée dit d'une méthode
Derrière ce petit module se joue exactement ce que j'apporte à un projet sérieux : une physique déterministe et prévisible, indépendante du matériel, des règles de validation explicites plutôt qu'un ressenti approximatif, et un état affiché en clair pour que le comportement reste vérifiable. Quand un système obéit à des règles nettes et mesurables, on peut le tester, le déboguer et le faire durer — et c'est cette rigueur, bien plus qu'un effet de manche, qui fait tenir une application en production.