Reconstruire un jeu de cartes complet et optimiser ses decks
Implémenter à la lettre les règles d'un jeu de cartes, de l'extension d'origine jusqu'à Vendetta : puis faire évoluer des decks légaux par algorithme génétique évalué en simulation.
- Client
- Projet personnel : R&D
- Période
- 2025 – aujourd'hui
- Secteur
- Simulation / Moteur de règles
Architecture, moteur de règles & simulation
841
cartes intégralement couvertes
1 919
clauses de règles implémentées
5
extensions gérées, jusqu'à Vendetta
Le problème de départ
Trouver le meilleur deck d'un jeu de cartes est un problème combinatoire hors de portée : avec environ 180 cartes légales et des decks de 40 cartes exactes, l'espace de recherche approche 10⁴⁰ combinaisons par légende. Tester chaque deck une milliseconde prendrait plus que l'âge de l'univers. Impossible d'énumérer, il faut faire évoluer.
L'approche retenue
Deux briques indissociables. D'abord un moteur de règles fidèle : sans simulation juste, toute optimisation est du bruit. Ensuite une co-évolution génétique où chaque légende fait évoluer sa population de decks, évaluée par affrontements simulés contre les meilleurs decks adverses, la méta évolue donc avec les decks.
Ce que j'ai construit
- Un moteur de règles couvrant 1 919 clauses, des cartes de base jusqu'aux mécaniques de Vendetta (EMPOWER, FLOW, BURN)
- Un validateur de légalité appliquant les règles de tournoi officielles (deck de 40 cartes exactes, contraintes de champion et de couleur)
- Un algorithme génétique : croisement, mutation et réparation systématique vers un deck légal
- Une fonction de fitness fondée sur le taux de victoire mesuré en simulation Monte Carlo
- Une co-évolution multi-légendes : chaque population affronte les meilleurs decks des autres
- Un audit de fidélité automatisé confrontant le texte des cartes au comportement du moteur
- Un rapport de couverture mesurant en continu la part de règles réellement simulées
- Un déploiement containerisé (base de données, application, relais temps réel, reverse proxy) avec mode multijoueur
Les résultats
- 841 cartes jouables couvertes à 100 %, sans couverture partielle résiduelle
- 1 919 clauses de règles implémentées et vérifiées automatiquement
- Un espace de 10⁴⁰ decks rendu explorable par évolution plutôt que par énumération
- Des écarts entre texte officiel et implémentation détectés par audit automatisé, pas à l'œil
- Une architecture multi-service déployable en une commande, avec parties multijoueur
Stack technique
- Next.js
- TypeScript
- Algorithme génétique
- Simulation Monte Carlo
- PostgreSQL
- Docker
- Caddy
- WebSocket