From c4757030fa71c65fdf476cf930ea063a1ce8252a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:02:22 +0000 Subject: [PATCH 01/43] Initial plan From 14c2483864ebc0483fc44a6e539b6f9de2795f78 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 10 Feb 2026 09:13:35 +0000 Subject: [PATCH 02/43] Add multiplayer infrastructure: server, client manager, and UI Co-authored-by: Linkatplug <36280686+Linkatplug@users.noreply.github.com> --- .gitignore | 4 + MULTIPLAYER.md | 113 +++++++ README.md | 17 +- index.html | 38 ++- js/Game.js | 156 +++++++++ js/managers/MultiplayerManager.js | 507 ++++++++++++++++++++++++++++++ js/systems/RenderSystem.js | 64 +++- package.json | 17 + server.js | 338 ++++++++++++++++++++ 9 files changed, 1247 insertions(+), 7 deletions(-) create mode 100644 .gitignore create mode 100644 MULTIPLAYER.md create mode 100644 js/managers/MultiplayerManager.js create mode 100644 package.json create mode 100644 server.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..92196ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +package-lock.json +.DS_Store +*.log diff --git a/MULTIPLAYER.md b/MULTIPLAYER.md new file mode 100644 index 0000000..83e6b97 --- /dev/null +++ b/MULTIPLAYER.md @@ -0,0 +1,113 @@ +# Mode Multijoueur - Space InZader 🚀 + +## Description + +Le mode multijoueur permet à 2 joueurs de jouer en coopération contre les vagues d'ennemis. Un joueur héberge la partie et partage un code de salle avec l'autre joueur. + +## Configuration du Serveur + +### Prérequis +- Node.js (version 14 ou supérieure) +- npm (inclus avec Node.js) + +### Installation + +1. Installer les dépendances : +```bash +npm install +``` + +2. Démarrer le serveur : +```bash +npm start +``` + +Le serveur démarre sur le port 3000 par défaut. Vous verrez : +``` +Space InZader Multiplayer Server running on port 3000 +Open http://localhost:3000 to play +``` + +## Comment Jouer en Multijoueur + +### Pour l'Hôte (Joueur 1) + +1. Ouvrez le jeu dans votre navigateur : `http://localhost:3000` +2. Cliquez sur **MULTIJOUEUR** dans le menu principal +3. Attendez la connexion au serveur +4. Sélectionnez votre vaisseau +5. Cliquez sur **CRÉER UNE PARTIE** +6. Un code à 6 caractères s'affiche - **partagez ce code** avec le Joueur 2 +7. Attendez que le Joueur 2 rejoigne +8. Cliquez sur **START GAME** quand les deux joueurs sont prêts + +### Pour le Joueur 2 + +1. Ouvrez le jeu dans votre navigateur : `http://localhost:3000` +2. Cliquez sur **MULTIJOUEUR** dans le menu principal +3. Attendez la connexion au serveur +4. Sélectionnez votre vaisseau +5. Cliquez sur **REJOINDRE UNE PARTIE** +6. Entrez le **code de la salle** fourni par l'Hôte +7. Entrez votre nom (optionnel) +8. Cliquez sur **REJOINDRE** +9. La partie démarre automatiquement quand l'Hôte lance le jeu + +## Contrôles + +- **Joueur 1 & 2** : WASD ou ZQSD pour se déplacer +- Les armes tirent automatiquement +- Ramassez les orbes d'XP verts pour gagner des niveaux +- ESC pour mettre en pause + +## Synchronisation + +Le serveur synchronise : +- ✅ Positions des joueurs +- ✅ Santé des joueurs +- ✅ Apparition des ennemis (contrôlé par l'hôte) +- ✅ Dégâts aux ennemis +- ✅ Collecte d'objets +- ✅ Montée de niveau + +## Remarques Techniques + +### Architecture +- **Serveur** : Node.js + Express + Socket.IO +- **Client** : Vanilla JavaScript avec Socket.IO client +- **Communication** : WebSocket en temps réel +- **Port par défaut** : 3000 + +### Limites +- Maximum **2 joueurs** par partie +- Les deux joueurs doivent être sur le **même réseau local** ou le serveur doit être accessible via internet +- L'hôte contrôle l'apparition des ennemis pour éviter les désynchronisations + +### Résolution de Problèmes + +**Impossible de se connecter au serveur** +- Vérifiez que le serveur est démarré (`npm start`) +- Vérifiez que le port 3000 n'est pas utilisé par une autre application +- Vérifiez votre pare-feu + +**Code de salle invalide** +- Vérifiez que le code est correct (6 caractères) +- Vérifiez que l'hôte n'a pas quitté +- Vérifiez que la salle n'est pas déjà pleine (2 joueurs max) + +**Déconnexion pendant la partie** +- Si un joueur se déconnecte, l'autre joueur reçoit une notification +- La partie peut continuer en solo +- L'hôte peut créer une nouvelle partie + +## Mode Solo + +Le mode solo reste disponible ! Cliquez simplement sur **SOLO** dans le menu principal pour jouer seul. + +## Support + +Pour tout problème ou suggestion, ouvrez une issue sur le dépôt GitHub. + +--- + +**Bon jeu ! 🎮** diff --git a/README.md b/README.md index 42c34ba..34a7ec9 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ A fully playable **roguelite space shooter** web game inspired by Space Invaders and Vampire Survivors. Built with vanilla JavaScript and HTML5 Canvas. +**✨ Nouveau : Mode Multijoueur Coopératif à 2 joueurs !** [Guide Multijoueur](MULTIPLAYER.md) + ![Menu Screenshot](https://github.com/user-attachments/assets/f5370b5d-ecba-4307-8fa3-eebbc7d24cf3) ## 🎮 Features @@ -37,14 +39,19 @@ A fully playable **roguelite space shooter** web game inspired by Space Invaders ## 🚀 How to Play +### Solo Mode 1. **Open `index.html`** in a modern web browser 2. **Select a ship** from the four available options 3. **Click START GAME** to begin -4. **Move** with WASD or ZQSD keys -5. **Weapons auto-fire** at the nearest enemy -6. **Collect green XP orbs** to level up -7. **Choose upgrades** when you level up -8. **Survive** as long as possible! + +### Multiplayer Mode (2 Players Co-op) +1. **Start the server**: `npm install && npm start` +2. **Open** `http://localhost:3000` in two browsers +3. **Player 1**: Click MULTIPLAYER → CREATE GAME → Share room code +4. **Player 2**: Click MULTIPLAYER → JOIN GAME → Enter room code +5. **Start!** When both players are ready + +📖 [Full Multiplayer Guide](MULTIPLAYER.md) ### Controls - **WASD** or **ZQSD** - Move player diff --git a/index.html b/index.html index ac5f832..9486228 100644 --- a/index.html +++ b/index.html @@ -1122,7 +1122,8 @@