← Retour aux projets

Projet personnel / En cours

Undercover

Jeu de déduction sociale multijoueur en temps réel

TypeScriptNextJsReactCloudflare WorkersDurable ObjectsWebSocketVitest
Undercover

Dans le détail

01

Attribution de rôles et paires de mots

Rôles civil/undercover/Mr. White distribués selon le nombre de joueurs (2 undercover à partir de 7, Mr. White optionnel à partir de 5), avec garantie mathématique de majorité civile. Le mot de l'undercover est choisi par similarité de tags avec celui du civil (niveaux aucune/proche/très proche), avec relâchement automatique du niveau si le thème choisi n'a pas assez de personnages pour le satisfaire, et une variante où le mot de l'undercover devient un simple attribut du personnage du civil plutôt qu'un personnage entier.

02

Mode note (numérique)

Variante sans personnages : civil et undercover reçoivent chacun une note aléatoire (0-20) séparées d'un écart configurable par l'hôte, écart toujours garanti réalisable même aux valeurs extrêmes (0 ou 20). Un joueur propose un thème à chaque manche, à tour de rôle.

03

Tours d'indices et rotation

Ordre de passage tiré une fois par partie et conservé sur toute la partie. Les joueurs déconnectés sont automatiquement sautés (indice vide) sans bloquer la manche ; un timer d'indice configurable (30-90s) déclenche le même comportement pour un joueur lent, sans l'éliminer. Nombre de manches d'indices avant chaque vote réglable par l'hôte (1 à 5).

04

Vote à la pluralité avec départage

Vote à la pluralité (pas de majorité absolue requise), avec possibilité de s'abstenir ou de changer son vote jusqu'à la fin du délai. Résolution anticipée dès que tout le monde a voté (avec un court délai de grâce pour changer d'avis), ou au bout d'un timer configurable (30-180s) sinon. Une égalité relance un tour de vote restreint aux joueurs à égalité ; une égalité encore rouvre le vote à tout le monde.

05

Vote bonus au lieu d'exclusion

Un joueur qui manque son timer d'indice n'est plus éliminé d'office : il reçoit un "vote accusateur" fantôme, cumulé à son encontre au prochain dépouillement puis remis à zéro, quel qu'en soit le résultat.

06

Élimination et fin de partie

Phase de révélation après chaque élimination (rôle/mot optionnellement masqué), vérification de la condition de victoire (civils, undercover ou Mr. White) après chaque élimination et après chaque exclusion. Mr. White dispose d'une fenêtre de 60s pour deviner le mot ou la note du civil et voler la victoire.

07

Réglages hôte

Choix des thèmes et filtrage par sous-catégorie (franchise/série), niveau de similarité des mots, activation de Mr. White, mode classique/note, écart des notes, timers d'indice et de vote (activables ou non, durée réglable), nombre de manches par vote, révélation du rôle à l'élimination — tous modifiables uniquement dans le salon, avant le lancement.

08

Reconnexion et gestion des joueurs

Reconnexion dans le même siège après une coupure réseau, sans perte de progression ; transfert automatique du rôle d'hôte si celui-ci se déconnecte. Exclusion par l'hôte à tout moment de la partie (bannissement du client, distinct d'une simple perte de connexion), avec résolution immédiate de la conséquence (passage de tour, recalcul du vote, victoire).

09

Architecture temps réel

Un salon = une Durable Object Cloudflare (état persisté en SQLite embarqué, survit aux redéploiements), pilotée par une seule machine à états (lobby → révélation → indices/thème → vote → élimination → fin) et un unique minuteur d'alarme multiplexé selon la phase. Diffusion en WebSocket d'un état personnalisé par joueur (les infos secrètes des autres restent cachées côté serveur).

10

Interface et contenu

Écrans dédiés par phase (lobby, révélation de rôle, indices, vote, élimination, fin), tableau récapitulatif des manches, bouton "Règles" expliquant l'ensemble du jeu, plusieurs franchises de personnages (films, animes...) avec dizaines d'entrées chacune.