The Arena — RPS Royale : jeu multijoueur Pierre-Feuille-Ciseaux avec paris blockchain
- Add GAME_DESIGN.md with complete mechanics, economy, modes, visual and audio design documentation - Update README with procedural audio/graphics features, AI mode, guest play, and links to all docs Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> |
||
|---|---|---|
| .forgejo/workflows | ||
| apps | ||
| docs | ||
| packages/shared | ||
| .dockerignore | ||
| .env.example | ||
| .gitignore | ||
| CLAUDE.md | ||
| docker-compose.prod.yml | ||
| docker-compose.yml | ||
| package.json | ||
| pnpm-lock.yaml | ||
| pnpm-workspace.yaml | ||
| README.md | ||
The Arena — RPS Royale
Un jeu multijoueur Pierre-Feuille-Ciseaux en 2D premium avec paris sur la blockchain (pattern commit-reveal anti-triche), animations cinématiques et musique adaptive.
Démo en ligne
- Frontend : https://jeu.cosmolan.fr
- API : https://api.jeu.cosmolan.fr
- Forgejo : https://git.cosmolan.fr/ubuntu/rps-royale
Stack technique
| Couche | Technologie |
|---|---|
| Moteur 2D | Phaser 3 (WebGL) |
| Frontend | Next.js 15 + Tailwind CSS |
| Temps réel | Node.js + Socket.io |
| API & DB | Express + Prisma ORM + PostgreSQL 17 |
| Cache | Redis |
| Blockchain | Hardhat + Solidity + Ethers.js v6 |
| Audio | Web Audio API (procédural) |
| CI/CD | Forgejo Actions |
| Reverse Proxy | Nginx Proxy Manager |
Structure du monorepo
rps-royale/
├── apps/
│ ├── web/ # Next.js + Phaser (jeu)
│ ├── server/ # Node.js + Socket.io + API
│ └── contracts/ # Hardhat + Solidity
├── packages/
│ └── shared/ # Types et constantes partagés
├── docs/ # Documentation complète
└── docker-compose.yml
Fonctionnalités
- Matchmaking temps réel : appariement automatique par montant de mise
- Mode IA : joue contre un adversaire IA si personne n'est disponible
- Sans wallet : génération automatique d'une adresse guest
- Anti-triche : pattern commit-reveal via hash keccak256
- Audio procédural : musique et SFX générés en temps réel (pas de fichiers audio)
- Graphismes procéduraux : sprites générés par Phaser (pas d'assets externes)
- Animations premium : zoom, shake, particules, clash cinématique
- Smart contract : 7/7 tests passants, déployé sur Hardhat local
Développement local
Prérequis
- Node.js 20+
- pnpm 9+
- Docker & Docker Compose
Installation
# À la racine du monorepo
pnpm install
# Démarrer la base de données et Redis
docker-compose up -d rps-db rps-redis hardhat-node
# Générer les types Prisma et migrer la DB
pnpm db:generate
pnpm db:migrate
# Compiler et déployer le contrat en local
pnpm contract:compile
pnpm contract:deploy:local
# Lancer le serveur et le frontend (dans deux terminaux)
pnpm --filter server dev
pnpm --filter web dev
Déploiement production
Le déploiement est entièrement automatisé via Forgejo Actions. Un push sur la branche main déclenche :
- Build des images Docker
- Déploiement sur le VPS via SSH +
docker-compose
Voir docs/DEPLOYMENT.md pour les détails.
Game Design
Le jeu repose sur un pattern commit-reveal blockchain pour garantir l'intégrité :
- Commit : chaque joueur envoie le hash de son choix + nonce secret
- Suspense : phase cinématique avec musique et particules
- Reveal : les joueurs dévoilent leur nonce et choix
- Résultat : le smart contract vérifie les hashes et distribue le pot
Voir docs/GAME_DESIGN.md pour la documentation complète.
Documentation
Licence
MIT