Files
regnum/README.md
T
Kevin L'Hereec 6a1c800253 feat: système d'objets achetables (boutique + effets permanents) et refonte visuelle
- Nouveaux personnages illustrés (12 PNG remplacés dans client/public/cards)
- 4 objets achetables (Trébuchet, Charrue, Trousse du Médecin, Sceau Royal)
  avec effets permanents (double_gain, guaranteed_gain, copy_best_in_game),
  stock unique par partie, priorité d'achat tournante entre joueurs
- Boutique en colonne à gauche du plateau : icônes compactes, carte détaillée
  agrandie au survol (taille découplée du displayScale du jeton), bouton
  ACHETER actif/grisé selon la jauge du joueur, retrait immédiat de la
  colonne une fois l'objet acheté (les autres remontent pour combler)
- Objets achetés affichés "posés sur la table" : à côté de la main pour soi,
  sous le slot de jeu pour les adversaires
- Icône du premier joueur (priorité d'achat) dans le HUD Vue
- Refonte des cartes personnage (CardObject) : portrait plein cadre épuré,
  valeurs d'attribut discrètes aux 4 coins
- Fix removePlayer : nettoyage de pendingBuys/pendingPlays et recalage de
  firstPlayerIndex à la déconnexion d'un joueur
- 77 tests unitaires serveur (node:test) : cards, items, Room, RoomManager
- README mis à jour avec les règles complètes du jeu
- .gitignore : exclusion de .idea/ et .serena/ (artefacts d'outils locaux)
2026-08-21 14:53:58 +02:00

105 lines
3.6 KiB
Markdown

# 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.