Nine to One
Jeu de cartes multijoueur en temps réel, de deux à cinq joueurs, pensé pour le téléphone. Les places libres peuvent se remplir avec des bots, dont un entraîné par machine learning.
- Jeu
- Terminé
- 2026
- 1 semaines
- Next.js
- TypeScript
- FastAPI
- WebSocket
- PyTorch
- NumPy
- PostgreSQL
- Tailwind CSS

Un jeu de cartes auquel je joue avec mes amis, que personne n'avait porté en ligne. On entre un pseudo, on crée une table, on partage son code : pas de compte, pas d'installation, l'adresse s'ouvre dans le navigateur du téléphone et la partie démarre.
Le temps réel
Chaque table vit dans la mémoire du serveur et parle aux joueurs par WebSocket. Le serveur est seul juge : il applique les règles, calcule les coups légaux et n'envoie à chaque joueur que ce qu'il a le droit de voir. Le client n'a aucune logique de jeu, il affiche un état et transmet des intentions.
Le moteur de règles est couvert par 68 tests. Un jeu de cartes, c'est avant tout une longue liste de cas particuliers, et chacun a fini par avoir son test après m'être fait avoir en partie.
Les bots
Trois niveaux. Le premier joue un coup légal au hasard, le deuxième suit une heuristique écrite à la main, le troisième est un réseau de neurones entraîné par auto-jeu en apprentissage par renforcement, puis exporté en NumPy pour tourner en production sans PyTorch. Au moment de jouer, il complète sa décision par une recherche sur les cartes qu'il ne voit pas.
Ce bot ne triche pas : il reçoit exactement la vue d'un joueur assis à sa place. Il réfléchit dans un thread séparé, avec un budget de temps et un nombre de réflexions simultanées bornés, pour que la boucle réseau continue de servir les autres tables pendant ce temps. Le processus complet tient dans 75 Mo, poids du réseau compris, sur un VPS partagé avec mes autres sites.