← Tous les projets

Étude de cas

Petit Bac, des règles partagées

Petit Bac multijoueur sur téléphone. Le serveur tient les phases et les chronos ; les règles de score vivent dans un paquet partagé entre le serveur et le client.

TypeScriptReactSocket.IOZodPWApnpm workspaces
2 à 8joueurs
10 / 5points par réponse
PB-XXXXcode de salon

Le point de départ

C’est le jeu que j’ai écrit en dernier, avec ce que j’avais appris sur les autres : serveur autoritaire dès le premier jour, et une interface pensée d’abord pour un téléphone tenu d’une main, autour d’une table.

Les choix qui comptent

Un paquet partagé

Les constantes, les schémas Zod, le protocole et les règles pures (valider une réponse, détecter un doublon, compter les points) vivent dans un paquet commun. Le client s’en sert pour afficher, le serveur pour décider : les deux ne peuvent pas diverger.

Des réponses secrètes jusqu’à la relecture

Tant que la manche dure, le serveur n’envoie à personne les réponses des autres. On ne peut pas copier son voisin, même en ouvrant les outils du navigateur.

Un doublon, c’est subtil

Pour décider si deux joueurs ont donné la même réponse, on ignore les accents, la casse, le pluriel et l’article devant (« l’éléphant » vaut « éléphant »). Une réponse unique rapporte 10 points, une réponse partagée 5.

Les joueurs jugent

Pendant la relecture, tout le monde voit toutes les réponses et peut refuser les douteuses. Une réponse n’est invalidée que si plus de la moitié des autres joueurs la refusent : un seul rabat-joie ne suffit pas.

Ce qui a été difficile

Le chrono. Le premier qui finit crie « Bac ! » et les autres ont dix secondes : c’est le serveur qui tient l’horloge et qui clôt la manche, pas les clients. Il fallait gérer en même temps les joueurs qui se déconnectent en pleine manche et le moment où le dernier vote arrive.

Ce que je ferais autrement

La validation des mots reste humaine (le vote). Un dictionnaire embarqué aiderait à départager, mais poserait des questions de langue et de mots familiers ; je préfère laisser la table trancher, tant que c’est amusant.