Aller au contenu principal
sports_esports Lab Canvas 2D Physique Atterrissage Zéro dépendance

Lunar Lander — gravité constante, poussée orientée et atterrissage sous contrôle en Canvas 2D

Le classique spatial de 1979 réécrit from scratch en Canvas 2D : un module lunaire soumis à une gravité constante, une poussée orientée selon l'angle du module et intégrée par delta-time, un carburant limité et quatre conditions strictes pour valider l'atterrissage (vitesses verticale et horizontale sous leurs seuils, inclinaison quasi nulle, sur la plateforme). Zéro dépendance.

Flèches ← → : pivoter, ↑ : pousser Poussée limitée par le carburant Espace : démarrer et rejouer

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.

Photo d'Emmanuel BALLERY, fondateur de x10

À propos de l'auteur

Emmanuel BALLERY est le fondateur de x10 solutions. Ces petits jeux sont surtout un plaisir de développeur, codés le week-end — pas une vitrine de mes missions, qui sont bien plus exigeantes. J'y soigne quand même la performance et la lisibilité, par habitude.

Voir plus arrow_forward
rocket_launch

Un vrai projet en tête ?

Ce petit jeu m'amuse, mais il ne dit pas grand-chose de mon métier : mes missions sont bien plus complexes. Si vous avez une application à concevoir ou à fiabiliser, c'est là que je suis vraiment utile.

Discuter de mon projet arrow_forward