Files
mario/QUICKSTART.md
2025-12-14 11:15:50 +01:00

6.9 KiB

🚀 Guide de Démarrage Rapide

Ce qui est déjà fait

Votre jeu Mario Runner est entièrement fonctionnel avec :

Fonctionnalités Complètes

  • Version PC : Contrôles clavier (Flèches + Espace)
  • Version Mobile : Gyroscope + Bouton tactile
  • Détection automatique PC/Mobile
  • Physique complète (gravité, sauts, collisions)
  • Plateformes (sol + 7 plateformes en l'air)
  • Obstacles (collision → perte points)
  • Cadeaux (collecte → gain points)
  • Système de score
  • Timer 3 minutes avec fin de partie
  • Caméra qui suit le joueur
  • Background avec effet parallaxe
  • Niveau étendu (3x largeur écran)
  • Menu avec demande permission gyroscope iOS
  • PWA configuré

🎮 Tester Maintenant

Sur PC (Développement)

Le serveur est déjà lancé sur :

Contrôles PC :

  • : Déplacer
  • Espace ou : Sauter

Sur Mobile

  1. Sur le même WiFi :

  2. Avec HTTPS (pour gyroscope iOS) :

    # Installez ngrok
    npm install -g ngrok
    
    # Dans un nouveau terminal
    ngrok http 3001
    
    # Utilisez l'URL HTTPS donnée (ex: https://xyz.ngrok.io)
    

Contrôles Mobile :

  • Inclinez le téléphone : Déplacer
  • Bouton vert (bas droite) : Sauter

📂 Structure du Projet

mario/
├── src/
│   ├── main.ts              # Point d'entrée
│   ├── game.ts              # Config Phaser
│   ├── scenes/              # Scènes du jeu
│   │   ├── BootScene.ts     # Chargement
│   │   ├── MenuScene.ts     # Menu + permission gyro
│   │   └── GameScene.ts     # Jeu principal ⭐
│   ├── controls/            # Contrôles
│   │   ├── GyroControl.ts   # Gyroscope iOS/Android
│   │   └── JumpButton.ts    # Bouton tactile
│   ├── entities/            # Entités du jeu
│   │   ├── Player.ts        # Joueur
│   │   ├── Obstacle.ts      # Obstacles
│   │   └── Gift.ts          # Cadeaux
│   └── utils/
│       └── constants.ts     # Constantes ⚙️
├── public/
│   ├── assets/
│   │   └── sprites/
│   │       └── SPRITE_WORKFLOW.md  # Guide création sprites
│   ├── icons/               # Icônes PWA (à créer)
│   └── manifest.json        # Config PWA
├── DEVELOPMENT_GUIDE.md     # Guide développement complet
├── DEPLOY.md                # Guide déploiement
└── README.md                # Documentation

🎨 Prochaines Étapes (Personnalisation)

1. Créer les Sprites du Personnage

📖 Consultez public/assets/sprites/SPRITE_WORKFLOW.md

Résumé :

  1. Détourer la photo du neveu (GIMP, remove.bg)
  2. Créer animations avec Piskel ou Aseprite
  3. Placer dans public/assets/sprites/player_spritesheet.png
  4. Charger dans src/scenes/BootScene.ts

2. Ajouter des Sons

// Dans BootScene.preload()
this.load.audio('jump', 'assets/audio/jump.mp3');
this.load.audio('collect', 'assets/audio/collect.mp3');
this.load.audio('music', 'assets/audio/background.mp3');

// Dans GameScene
this.sound.play('jump');  // Lors du saut
this.sound.play('collect');  // Lors de collecte

3. Créer Plus de Niveaux

Utilisez Tiled (mapeditor.org) :

  1. Créer un tilemap
  2. Exporter en JSON
  3. Charger dans Phaser

4. Créer les Icônes PWA

Générez sur https://pwabuilder.com/imageGenerator

  • 192x192 → public/icons/icon-192.png
  • 512x512 → public/icons/icon-512.png

5. Déployer en Ligne

📖 Consultez DEPLOY.md

Méthode rapide (Netlify) :

npm run build
npx netlify-cli deploy --prod --dir=dist

🔧 Personnalisation Rapide

Changer la Difficulté

Éditez src/utils/constants.ts :

// Plus facile
export const PLAYER_JUMP_VELOCITY = -500;  // Sauts plus hauts
export const PLAYER_MAX_SPEED = 250;       // Plus lent
export const LEVEL_DURATION = 240;         // 4 minutes

// Plus difficile
export const PLAYER_JUMP_VELOCITY = -350;  // Sauts plus bas
export const PLAYER_MAX_SPEED = 350;       // Plus rapide
export const LEVEL_DURATION = 120;         // 2 minutes

Ajuster le Gyroscope

export const GYRO_DEADZONE = 10;      // Zone morte plus grande
export const GYRO_MAX_TILT = 20;      // Moins de tilt nécessaire
export const GYRO_SENSITIVITY = 15;   // Plus sensible

Ajouter des Obstacles

Dans GameScene.ts, méthode spawnTestObjects() :

// Ajouter plus d'obstacles
[400, 800, 1200, 1500, 2200, 2800].forEach((x) => {
    const obstacle = this.add.rectangle(x, height - 80, 40, 60, 0xF44336);
    this.physics.add.existing(obstacle);
    this.obstacles!.add(obstacle);
});

📚 Commandes Utiles

# Développement (avec hot reload)
npm run dev

# Build de production
npm run build

# Prévisualiser le build
npm run preview

# Lancer sur mobile avec HTTPS
ngrok http 3001  # (après npm run dev)

🐛 Dépannage

Le jeu ne démarre pas

# Réinstaller les dépendances
rm -rf node_modules
npm install
npm run dev

Erreurs TypeScript

# Rebuild complet
npm run build

Le gyroscope ne fonctionne pas

  • Vérifiez que vous utilisez HTTPS (iOS requis)
  • Vérifiez que la permission a été accordée dans le menu
  • Testez sur un vrai appareil (pas simulateur)

Le jeu est trop rapide/lent

Ajustez dans src/utils/constants.ts :

  • PLAYER_MAX_SPEED
  • PLAYER_ACCELERATION
  • GYRO_SENSITIVITY

🎯 Objectifs de Gameplay

But actuel :

  • Survivre 3 minutes
  • Collecter un maximum de cadeaux (jaunes) = +100 pts
  • Éviter les obstacles (rouges) = -50 pts

Idées d'amélioration :

  • Système de vies (3 vies, game over si 0)
  • Power-ups (invincibilité, double saut, vitesse)
  • Ennemis mobiles
  • Checkpoints
  • Multiple niveaux avec progression
  • Leaderboard avec LocalStorage

💡 Astuces

  1. Mode Debug : Activez dans src/game.ts :

    arcade: {
        debug: true,  // Voir les hitboxes
    }
    
  2. Test Rapide Mobile :

    • Utilisez Chrome DevTools → Toggle Device Toolbar (F12)
    • Simulez gyroscope : Sensors tab
  3. Performance :

    • Le jeu cible 60 FPS
    • Testé sur mobile moderne
    • Optimisé avec pooling d'objets (à venir)

🎊 C'est Parti !

Votre jeu est 100% fonctionnel !

Testez-le maintenant sur http://localhost:3001/

Prochaine étape recommandée : Créer les sprites du personnage 🎨

Pour toute question, consultez :

  • DEVELOPMENT_GUIDE.md - Guide complet
  • DEPLOY.md - Déploiement
  • public/assets/sprites/SPRITE_WORKFLOW.md - Création sprites

Bon développement ! 🚀