# Regnum Jeu de cartes en ligne multijoueur (2-4 joueurs). Collecte des points en jouant des cartes de royaume simultanément pendant X tours. ## Stack - **Frontend** : Vue 3 + Phaser 3 + Pinia - **Backend** : Node.js + Express + Socket.io - **Temps réel** : WebSockets ## Structure ``` regnum/ ├── client/ # Vue 3 + Phaser 3 │ └── src/ │ ├── views/ # HomeView, LobbyView, GameView │ ├── game/ # Scènes Phaser (Boot, Game, UI) + objets │ ├── stores/ # Pinia store │ └── services/# Socket.io client └── server/ # Node.js └── src/ ├── game/ # Room, RoomManager, cards └── index.js # Serveur Express + Socket.io ``` ## Lancement ### Serveur ```bash cd server npm install npm run dev ``` ### Client ```bash cd client npm install npm run dev ``` Ouvrir `http://localhost:5173` ## Tests Tests unitaires du moteur de jeu (serveur), avec le test runner natif de Node.js : ```bash cd server npm test # exécution unique npm run test:watch # mode watch ``` ## Règles ### Principe général - 2 à 4 joueurs par partie, chacun avec son propre deck des mêmes 12 personnages (seule la couleur d'équipe change). - Chaque joueur commence avec une main de 4 cartes ; le reste du deck (8 cartes) est pioché une carte par tour. - La partie dure **12 tours**. Elle se termine avant si tous les joueurs n'ont plus ni carte en main ni carte à piocher. - Chaque tour, tous les joueurs choisissent **simultanément** une carte (cachée), puis les cartes sont révélées et résolues en même temps. ### Les 4 jauges Chaque personnage possède 4 attributs (valeurs de 1 à 6), qui correspondent à 4 jauges cumulées par le joueur pendant toute la partie : | Jauge | Icône | |---|---| | Nourriture | 🟡 | | Guerre | 🔴 | | Santé | 🟢 | | Diplomatie | 🔵 | ### Résolution d'un tour Pour chaque attribut, un joueur compare la valeur de sa carte jouée à celle de son **voisin de gauche** (ordre des joueurs dans la partie, en boucle) : ``` gain = max(0, ma_valeur - valeur_du_voisin_de_gauche) ``` Le gain (jamais négatif) est ajouté à la jauge correspondante du joueur. Le score total d'un joueur est la somme de ses 4 jauges. ### Les 12 personnages Reine, Prince, Boucher, Médecin, Apothicaire, Fou du Roi, Assassin, Paysan, Bourreau, Chevalier, Marchand, Évêque — chacun avec un profil d'attributs différent (ex : le Paysan est fort en Nourriture mais faible en Diplomatie, l'Assassin est très fort en Guerre mais faible partout ailleurs). ### Objets achetables Pendant la phase de sélection, un joueur peut dépenser des points d'une jauge pour acheter un objet, qui procure un **effet permanent** pour le reste de la partie tant qu'il le possède. Chaque objet coûte 3 points et n'existe qu'en **un seul exemplaire** pour toute la partie (premier arrivé, premier servi) : | Objet | Jauge liée | Effet | |---|---|---| | Trébuchet | 🔴 Guerre | Double le gain de Guerre à chaque tour | | Charrue | 🟡 Nourriture | Double le gain de Nourriture à chaque tour | | Trousse du Médecin | 🟢 Santé | Garantit +2 en Santé à chaque tour, quel que soit le résultat | | Sceau Royal | 🔵 Diplomatie | Copie le meilleur gain de Diplomatie parmi tous les autres joueurs | En cas de conflit (plusieurs joueurs achètent le même objet le même tour), c'est le joueur le plus proche du **"premier joueur"** du tour (rôle qui tourne entre les joueurs à chaque tour) qui l'obtient ; les autres conservent leurs points. ### Fin de partie Le joueur avec le score total (somme des 4 jauges) le plus élevé après 12 tours remporte la partie.