Aller au contenu principal
sports_esports Lab Canvas 2D Physique vectorielle Wrapping torique Découpage récursif

Astéroïdes — inertie, espace torique et découpage récursif en Canvas 2D

Le classique spatial de 1979 réécrit from scratch en Canvas 2D : un vaisseau à inertie qui intègre vitesse et accélération en 2D, un espace torique où l'on ressort du bord opposé, des astéroïdes qui se scindent récursivement à chaque tir et un petit système de particules pour les explosions. Zéro dépendance.

Flèches ← → : tourner, ↑ : pousser (inertie) Espace : tirer — P : mettre en pause Espace : démarrer et rejouer

Un grand classique pour parler de physique

Astéroïdes (Atari, 1979) tient en trois idées : un vaisseau qui dérive, des rochers qui flottent, et un espace sans bords. Je m'en sers ici comme prétexte pour montrer, sans moteur de jeu ni dépendance, ce qui fait la nervosité d'un jeu spatial : l'inertie, le wrapping torique, le découpage des astéroïdes et un soupçon de particules — le tout en quelques kilo-octets de JavaScript et un rendu Canvas 2D.

Un mouvement intégré en deux dimensions

Le vaisseau ne « saute » pas d'une position à l'autre : il obéit à une intégration temporelle. Je maintiens une vitesse et une accélération en 2D. Pousser (↑) ajoute une accélération dans la direction du nez ; à chaque image, la vitesse s'ajoute à la vitesse courante, puis la position s'ajoute à la vitesse — le tout multiplié par le delta time. C'est ce qui donne cette inertie caractéristique : on relâche la poussée et le vaisseau continue de glisser, exactement comme un corps sans frottement. J'ajoute juste un léger amortissement et un plafond de vitesse pour garder l'engin pilotable.

Un espace torique, sans bords

Il n'y a pas de mur : sortir par la droite, c'est réapparaître à gauche ; sortir par le haut, c'est revenir par le bas. Cet espace « torique » (un tore, comme la surface d'un donut) se code en une ligne — un modulo sur la position — mais il a une conséquence sur les distances. Deux objets proches des bords opposés sont en réalité voisins. Mes tests de collision calculent donc la distance la plus courte en tenant compte de ce repli : le tir qui « sort » d'un côté touche bien l'astéroïde de l'autre.

Un découpage récursif

Toucher un gros astéroïde ne le fait pas disparaître : il se scinde en deux fragments plus petits, plus rapides, qui se scindent à leur tour jusqu'au plus petit palier — qui, lui, s'évapore. C'est une récursion qui se lit dans le score : plus les morceaux sont petits, plus ils rapportent, et plus l'écran se remplit de cibles véloces. Cette mécanique tient en une poignée de lignes parce que chaque astéroïde ne connaît que sa taille et sait fabriquer ses propres enfants.

Des explosions en quelques particules

Chaque impact projette une petite gerbe de points éjectés dans toutes les directions, avec une durée de vie et une opacité qui décroissent. Ce mini système de particules ne coûte presque rien — un tableau d'objets légers, mis à jour et recyclés à chaque image — mais il transforme une disparition sèche en un vrai retour visuel. C'est le détail qui fait « sentir » l'action plutôt que de la constater.

Ce que ça dit de ma façon de travailler

Derrière ce jeu, il n'y a que des fondamentaux maîtrisés : une boucle de rendu indépendante du matériel, une physique lisible, des structures de données simples et une gestion honnête des cas limites (les bords, les collisions, la fin de partie). C'est exactement ce que j'apporte sur vos projets : pas d'effets de manche, mais une base technique claire, performante et pérenne — que vos équipes peuvent reprendre et faire évoluer en toute autonomie.

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