Une recréation du jeu Game Boy classique construite avec ViteJS et Canvas.
Incarnez Snoopy dans ce jeu de puzzle/action où vous devez collecter tous les Woodstock tout en évitant les boules rebondissantes ! Traversez 7 niveaux remplis de défis avec des blocs déplaçables, des téléporteurs, des flèches directionnelles et plus encore.
- ✅ Mouvement sur grille (9x8 cases)
- ✅ Collectibles - Récupérez tous les Woodstock pour terminer le niveau
- ✅ Ennemis - Boules rebondissantes qui vous font perdre une vie
- ✅ Blocs déplaçables - Poussez les blocs pour créer un chemin
- ✅ Blocs cassables - Utilisez le bouton d'action pour les détruire
- ✅ Téléporteurs - Sautez d'un portail à l'autre
- ✅ Flèches directionnelles - Forces qui vous propulsent dans une direction
- ✅ Power-ups
- 🟢 Speed - Augmente votre vitesse
- 🟡 Invincible - Protection temporaire contre les boules
- ✅ Écran de menu avec instructions
- ✅ Écran Game Over avec score final
- ✅ Écran de victoire pour finir tous les niveaux
- ✅ Écran de transition entre niveaux
- ✅ Système de vies (3 vies)
- ✅ Score (Woodstock: 500pts, Power-ups: 200pts, Boules détruites: 100pts)
- ✅ Support mobile/tactile avec contrôles virtuels
- 🎯 7 niveaux avec difficulté progressive
- Welcome to the Show! - Introduction
- Bouncing Around - Blocs poussables et flèches
- Push and Slide - Maîtrise du push
- Teleport Maze - Labyrinthe avec téléporteurs
- The Gauntlet - Flèches et multiples boules
- Break Out - Blocs cassables
- Final Show - Boss final avec toutes les mécaniques
- Flèches / WASD - Déplacement
- Espace / Entrée - Action (casser les blocs, menu)
- P - Pause
- D-Pad virtuel - Déplacement
- Bouton A - Action
# Installation des dépendances
npm install
# Lancer le serveur de développement
npm run dev
# Build de production
npm run build
# Prévisualiser le build
npm run previewsnoopys-magic-show/
├── src/
│ ├── config.js # Configuration du jeu
│ ├── main.js # Point d'entrée
│ ├── style.css # Styles globaux
│ ├── engine/ # Moteur du jeu
│ │ ├── game.js # Boucle de jeu principale
│ │ ├── renderer.js # Rendu Canvas
│ │ ├── input-manager.js # Gestion des entrées
│ │ ├── level-manager.js # Gestion des niveaux
│ │ └── entity-manager.js # Gestion des entités
│ ├── entities/ # Entités du jeu
│ │ ├── entity.js # Classe de base
│ │ ├── player.js # Joueur (Snoopy)
│ │ ├── ball.js # Boules ennemies
│ │ ├── woodstock.js # Collectibles
│ │ └── power-up.js # Power-ups
│ ├── tiles/ # Système de tuiles
│ │ └── tile-types.js # Types de tuiles
│ ├── ui/ # Interface utilisateur
│ │ ├── game-states.js # États du jeu
│ │ ├── ui-manager.js # Gestion des écrans
│ │ └── touch-controls.js # Contrôles tactiles
│ └── levels/ # Niveaux JSON
│ ├── level-1.json
│ ├── level-2.json
│ ├── level-3.json
│ ├── level-4.json
│ ├── level-5.json
│ ├── level-6.json
│ └── level-7.json
├── public/
├── index.html
└── package.json
Les niveaux sont définis en JSON avec un système de caractères :
0- Vide1- Mur (collision)2- Bloc poussable (toutes directions)3- Bloc cassable4- Téléporteur A5- Téléporteur B6- Flèche Haut7- Flèche Droite8- Flèche Bas9- Flèche GaucheA- Bloc poussable Haut uniquementB- Bloc poussable Bas uniquementC- Bloc poussable Gauche uniquementD- Bloc poussable Droite uniquementE- Bloc Toggle (alterne entre solide et passable)
{
"id": 1,
"name": "Welcome to the Show!",
"width": 9,
"height": 8,
"startPosition": { "x": 1, "y": 1 },
"tiles": [
"111111111",
"100000001",
"101020101",
"100000001",
"100030001",
"101000101",
"100000001",
"111111111"
],
"entities": [
{ "type": "woodstock", "x": 7, "y": 6 },
{ "type": "ball", "x": 4, "y": 4, "vx": 1, "vy": 1 },
{ "type": "powerup", "x": 2, "y": 4, "powerType": "speed" },
{
"type": "powerup",
"x": 1,
"y": 1,
"powerType": "time",
"hidden": true,
"blockX": 3,
"blockY": 2,
"targets": {
"up": { "x": 3, "y": 0 },
"down": { "x": 5, "y": 5 },
"left": { "x": 0, "y": 2 },
"right": { "x": 8, "y": 2 }
}
}
]
}Les power-ups peuvent être cachés dans des blocs cassables (3) ou poussables (2, A, B, C, D). Paramètres disponibles :
"hidden": true- Le power-up est caché"blockX"et"blockY"- Position du bloc contenant le power-up"targets"(optionnel) - Positions cibles selon la direction de Snoopy- Format:
{ "up": {x, y}, "down": {x, y}, "left": {x, y}, "right": {x, y} } - Si non spécifié : le power-up se déplace automatiquement de 3 cases dans la direction de Snoopy
- Si spécifié : le power-up se déplace vers les coordonnées correspondant à la direction depuis laquelle Snoopy a cassé/poussé le bloc
- Exemple : Si Snoopy casse par le bas (
down), le power-up ira verstargets.down
- Format:
## 🎨 Palette de Couleurs Game Boy
Le jeu utilise une palette authentique Game Boy :
- **#0f380f** - Vert foncé
- **#306230** - Vert moyen foncé
- **#8bac0f** - Vert moyen clair
- **#9bbc0f** - Vert clair
## 🔧 Technologies
- **ViteJS** - Build tool et serveur de développement
- **Vanilla JavaScript** (ES6+)
- **Canvas API** - Rendu 2D
- **JSON** - Définition des niveaux
## 🎯 Prochaines Améliorations Possibles
- [ ] Sons et musique
- [ ] Effets de particules
- [ ] Plus d'animations
- [ ] Sauvegarde du high score (localStorage)
- [ ] Plus de types de power-ups
- [ ] Éditeur de niveaux
- [ ] Mode multijoueur
## 📝 Licence
Ce projet est une recréation fan-made à des fins éducatives.
## 👤 Auteur
Développé avec ❤️ et ViteJS
---
**Bon jeu ! 🎮**