rts-commander / docs /ARCHITECTURE.md
Luigi's picture
deploy(web): full clean snapshot with app code and assets
12d64f8
|
raw
history blame
9.15 kB

🎮 RTS Game - Architecture Web Moderne

📋 Vue d'ensemble

Ce projet est une réimplémentation complète du jeu RTS Python/Pygame vers une architecture web moderne, optimisée pour HuggingFace Spaces avec Docker.

🏗️ Architecture

┌─────────────────────────────────────────────────────────┐
│                    Frontend (Browser)                    │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │  HTML5 Canvas│  │  JavaScript  │  │  CSS Moderne │  │
│  │   Rendering  │  │ Game Client  │  │   UI/UX      │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
└─────────────────────────────────────────────────────────┘
                            ↕ WebSocket
┌─────────────────────────────────────────────────────────┐
│              Backend (FastAPI + Python)                  │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │   FastAPI    │  │  WebSocket   │  │ Game Engine  │  │
│  │   Server     │  │   Manager    │  │  Simulation  │  │
│  └──────────────┘  └──────────────┘  └──────────────┘  │
└─────────────────────────────────────────────────────────┘
                            ↕
┌─────────────────────────────────────────────────────────┐
│                  Docker Container                        │
│              (HuggingFace Spaces)                        │
└─────────────────────────────────────────────────────────┘

🎯 Composants Principaux

Backend (app.py)

FastAPI Server avec les fonctionnalités suivantes :

  • WebSocket en temps réel : Communication bidirectionnelle pour le jeu
  • Game State Manager : Gestion de l'état du jeu côté serveur
  • Game Loop : 20 ticks/seconde pour une simulation fluide
  • AI System : Intelligence artificielle pour l'adversaire
  • Production System : File d'attente et construction d'unités/bâtiments

Classes Principales :

  • GameState : État global du jeu (unités, bâtiments, terrain, joueurs)
  • ConnectionManager : Gestion des connexions WebSocket
  • Unit, Building, Player : Entités de jeu avec dataclasses
  • Enums : UnitType, BuildingType, TerrainType

Frontend

index.html - Structure

  • Top Bar : Ressources, connexion, statistiques
  • Left Sidebar : Menu de construction et entraînement d'unités
  • Canvas Principal : Zone de jeu interactive
  • Minimap : Vue d'ensemble avec indicateur de viewport
  • Right Sidebar : File de production, actions rapides, stats
  • Notifications : Système de messages toast

styles.css - UI/UX Moderne

  • Design sombre : Palette de couleurs professionnelle
  • Animations fluides : Transitions, hover effects, pulse
  • Responsive : Adapté aux différentes tailles d'écran
  • Gradients : Effets visuels modernes
  • Glassmorphism : Effets de transparence et de flou

game.js - Client de Jeu

  • GameClient Class : Gestion complète du client
  • Canvas Rendering : Dessin du terrain, unités, bâtiments
  • Input Handling : Souris, clavier, drag-to-select
  • WebSocket Client : Communication en temps réel
  • Camera System : Pan, zoom, minimap
  • Selection System : Sélection unitaire et multiple

🎮 Fonctionnalités

Gameplay

Types d'unités

  • Infantry (Infanterie) - 100💰
  • Tank (Char) - 300💰
  • Harvester (Récolteur) - 200💰
  • Helicopter (Hélicoptère) - 400💰
  • Artillery (Artillerie) - 500💰

Types de bâtiments

  • HQ (Quartier Général) - Base principale
  • Barracks (Caserne) - Entraînement infanterie
  • War Factory (Usine) - Production véhicules
  • Refinery (Raffinerie) - Traitement ressources
  • Power Plant (Centrale) - Production énergie
  • Defense Turret (Tourelle) - Défense

Système de ressources

  • Ore (Minerai) - Ressource standard
  • Gem (Gemmes) - Ressource rare (valeur supérieure)
  • Credits - Monnaie du jeu
  • Power - Énergie pour les bâtiments

Contrôles intuitifs

  • Sélection par clic ou drag
  • Commandes par clic droit
  • Raccourcis clavier
  • Interface tactile-ready

UI/UX Améliorée

🎨 Design Professionnel

  • Interface sombre avec accents colorés
  • Icônes emoji pour accessibilité
  • Barres de santé dynamiques
  • Indicateurs visuels clairs

📊 HUD Complet

  • Affichage ressources en temps réel
  • Compteur d'unités et bâtiments
  • État de connexion
  • File de production visible

🗺️ Minimap Interactive

  • Vue d'ensemble de la carte
  • Indicateur de viewport
  • Clic pour navigation rapide
  • Code couleur joueur/ennemi

Performances Optimisées

  • Rendu Canvas optimisé
  • Mises à jour incrémentales
  • Gestion efficace de la mémoire
  • Animations fluides 60 FPS

🚀 Déploiement

Local

# Installation
cd web/
pip install -r requirements.txt

# Démarrage
python3 start.py
# ou
uvicorn app:app --host 0.0.0.0 --port 7860 --reload

Docker

# Build
docker build -t rts-game .

# Run
docker run -p 7860:7860 rts-game

HuggingFace Spaces

  1. Créer un Space avec SDK Docker
  2. Uploader tous les fichiers du dossier web/
  3. HuggingFace build automatiquement avec le Dockerfile

📡 API WebSocket

Messages Client → Serveur

Déplacer unités

{
  "type": "move_unit",
  "unit_ids": ["uuid1", "uuid2"],
  "target": {"x": 100, "y": 200}
}

Construire unité

{
  "type": "build_unit",
  "building_id": "uuid",
  "unit_type": "tank"
}

Placer bâtiment

{
  "type": "build_building",
  "building_type": "barracks",
  "position": {"x": 240, "y": 240},
  "player_id": 0
}

Messages Serveur → Client

État initial

{
  "type": "init",
  "state": { ... }
}

Mise à jour

{
  "type": "state_update",
  "state": {
    "tick": 1234,
    "players": {...},
    "units": {...},
    "buildings": {...},
    "terrain": [...],
    "fog_of_war": [...]
  }
}

🔧 Technologies Utilisées

Backend

  • FastAPI : Framework web moderne et performant
  • WebSockets : Communication temps réel
  • Python 3.11 : Langage avec dataclasses, type hints
  • Uvicorn : Serveur ASGI haute performance

Frontend

  • HTML5 Canvas : Rendu 2D performant
  • Vanilla JavaScript : Pas de dépendances lourdes
  • CSS3 : Animations et design moderne
  • WebSocket API : Communication bidirectionnelle

DevOps

  • Docker : Containerisation
  • HuggingFace Spaces : Hébergement cloud
  • Git : Contrôle de version

📈 Améliorations vs Version Pygame

Accessibilité

✅ Fonctionne dans le navigateur (pas d'installation) ✅ Compatible multi-plateforme (Windows, Mac, Linux, mobile) ✅ Hébergeable sur le cloud ✅ Partage facile via URL

UI/UX

✅ Interface moderne et professionnelle ✅ Design responsive ✅ Animations fluides ✅ Meilleure lisibilité

Architecture

✅ Séparation client/serveur ✅ Prêt pour le multijoueur ✅ État du jeu côté serveur ✅ Communication temps réel

Performance

✅ Rendu optimisé Canvas ✅ Mise à jour incrémentale ✅ Gestion efficace réseau ✅ Scalabilité améliorée

🎯 Prochaines Étapes Possibles

  • Système de brouillard de guerre fonctionnel
  • Pathfinding A* pour les unités
  • Combat avec projectiles animés
  • Système de son et musique
  • Mode multijoueur réel
  • Système de sauvegarde
  • Campagne avec missions
  • Éditeur de cartes
  • Classements et statistiques
  • Support tactile amélioré

📝 Notes Techniques

Performance

  • Game Loop : 20 ticks/seconde côté serveur
  • Rendu : 60 FPS côté client
  • Latence WebSocket : < 50ms en moyenne

Sécurité

  • Validation côté serveur de toutes les commandes
  • Rate limiting possible
  • Sanitization des inputs

Scalabilité

  • Architecture prête pour Redis (état partagé)
  • Possibilité de load balancing
  • Stateless pour scaling horizontal

Développé avec ❤️ pour HuggingFace Spaces