Bouncing Beholder, un jeu de plateforme JavaScript, étonne par sa taille minuscule de seulement 1 024 octets, tout en offrant une aventure complète. Malgré son format réduit, il propose des animations fluides et un design de niveaux aléatoires, défiant les conventions des jeux modernes. Une véritable prouesse technique !
Bite-sized: Le jeu de plateforme JavaScript Bouncing Beholder est incroyablement petit, ne pesant que 1 024 octets – environ mille fois moins de données qu’une seule capture d’écran promotionnelle pour un jeu vidéo phare. Malgré sa taille minuscule, il comprend tous les éléments essentiels d’un jeu de plateforme classique.
Les jeux continuent de devenir de plus en plus grands chaque année, mais un groupe de développeurs s’oppose à cette tendance. Nous avons déjà vu des versions étonnamment petites de Tetris, Snake et Doom, mais leur taille de fichier réduite s’accompagne souvent de compromis tels que des contrôles maladroits, une animation limitée et un manque de couleur.
Bouncing Beholder, cependant, est différent. Malgré sa taille minuscule, il propose une véritable aventure en défilement latéral avec des animations fluides, une physique réactive, des terrains générés aléatoirement, des objets à collectionner et des dangers à éviter.
Les joueurs contrôlent un œil qui rebondit continuellement en utilisant les flèches du clavier, naviguant dans un paysage sournoisement invitant rempli de dangers. L’objectif est de collecter le plus de versions possible tout en évitant les obstacles. Et lorsque vous perdez inévitablement, le design de niveaux aléatoires garantit que chaque partie semble fraîche.

Le jeu a été écrit par Marijn Haverbeke, qui l’a initialement créé pour le concours de codage JS1K en 2010. Il a été récemment redécouvert grâce à sa stricte limite de taille de fichier.
Haverbeke a atteint ce niveau d’optimisation incroyable grâce à une série d’astuces de codage astucieuses. Celles-ci incluent l’abrègement de noms de variables longs et la représentation des états du jeu en utilisant des formules mathématiques au lieu de stocker des données directement.
Par exemple, les emplacements des versions ne sont pas pré-définis mais suivent une règle simple : les versions apparaissent sur toute plateforme dont la hauteur est divisible par six. Collecter une version abaisse légèrement la hauteur de la plateforme, ce qui supprime efficacement la version.
Haverbeke a également conçu un système pour raccourcir automatiquement les noms de méthodes longues de l’API HTML5 Canvas utilisée pour rendre les graphiques. Au lieu d’écrire canvas.quadraticCurveTo(), il peut simplement utiliser qt(). Lorsque votre jeu entier tient dans un seul kilooctet, chaque caractère compte.
En fait, le code est si densément empaqueté que des outils de compression modernes comme Google’s Closure Compiler ont en fait augmenté la taille du fichier plutôt que de la réduire.
Comme le note Haverbeke avec humour sur son blog : « En termes de productivité, c’est une façon terrible de coder. Mais c’est certainement amusant. Sans parler du fait que cela me donne une excuse pour utiliser tous les types de hacks étranges auxquels je peux penser. »
Le code du jeu complet peut être trouvé sur le blog de Haverbeke.
