Mes projets

Dragon's Gems Swipe - 2026

Développeur · Ludiven Studio
Unity 6
C#
TypeScript
Tests de parité
Son procédural
Android
iOS

Un puzzle de gemmes à glisser, né mini-jeu sur ce site puis porté en appli iPhone, iPad et Android. Un moteur de règles écrit une fois en TypeScript, recopié ligne à ligne en C# et tenu identique par des tests de parité ; des sons synthétisés sans un seul fichier audio ; des captures et des vidéos tournées par un robot.

Dragon's Gems Swipe — Bijou, le bébé dragon, sur son tas d'or, devant un plateau de gemmes

Cette page raconte la fabrication de Dragon's Gems Swipe. Pour le jeu lui-même — ce qu'il propose, ce qu'il coûte, où le télécharger — la page de l'appli est faite pour ça, et la version web se joue tout de suite.

Un mini-jeu d'abord

Le jeu est né sur ce site, dans la rubrique des mini-jeux. Un geste fait glisser tout le plateau jusqu'au bord, comme dans 2048 ; trois gemmes de la même couleur qui se touchent explosent, et le plateau reglisse. Chaque règle a été gardée ou jetée sur une mesure : un robot joue des milliers de parties pour dire si une variante fait plus de chaînes, si un niveau se gagne, en combien de coups. C'est lui qui choisit les 250 niveaux de la carte et leur nombre de coups : assez pour qu'un joueur moyen en gagne quatre sur cinq, un peu moins un niveau sur dix.

Un seul moteur, deux plateformes

Les règles tiennent dans un moteur pur écrit en TypeScript pour le site. L'appli ne les réécrit pas : elle les recopie ligne à ligne en C#, dans un assembly qui ne connaît rien d'Unity, avec le même générateur pseudo-aléatoire. Un script rejoue le moteur TypeScript sur des parties de référence et en tire un fichier de parité ; les tests de l'appli rejouent les mêmes parties et comparent chaque état, coup par coup.

La règle du jeu entre les deux : quand un test de parité échoue, c'est le portage qui a tort, jamais le fichier. C'est ce qui permet au défi du jour d'être le même plateau sur le site et dans l'appli, avec un seul classement mondial pour les deux.

Des tests qui jouent

Le robot du site existe aussi en C#. Dans les tests de l'appli, il joue chacun des niveaux jusqu'au bout : un niveau impossible ou une règle cassée par un changement se voit avant d'arriver sur un téléphone.

Des sons sans fichiers

Aucun son du jeu n'est un enregistrement. Les effets du site sont synthétisés en direct (WebAudio) ; l'appli porte ce code en C# et fabrique chaque son à sa première utilisation, avec une réverbération de type Freeverb et un compresseur calqué sur celui de WebAudio. Le jeu web et l'appli sonnent donc pareil, sans un fichier audio dans le paquet.

Une interface générée

L'appli est faite avec Unity 6 (URP), sur le gabarit des applis du studio. Ses écrans ne sont jamais retouchés à la main : des scripts d'éditeur les génèrent, avec Prefab Fusion, l'outil du studio pour construire et modifier des prefabs par description. Un écran se refait donc en relançant son script, dans les cinq langues du jeu.

Des captures tournées par un robot

Les captures des stores et les vidéos de présentation sortent des tests en mode jeu : le robot joue à 30 images par seconde de temps de jeu, chaque image est enregistrée, et les sons joués sont notés puis remixés sur la vidéo. Refaire toutes les images après un changement d'écran, pour l'iPhone, l'iPad et Android et dans chaque langue, ne demande qu'une commande.

L'application en images

Un niveau : glisse les gemmes, déclenche les explosionsL'histoire de Bijou, au premier lancementLa carte des cinq contréesLe souffle du petit dragonLe défi du jour