rts-commander / docs /ARCHITECTURE.md
Luigi's picture
deploy(web): full clean snapshot with app code and assets
12d64f8
# 🎮 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
```bash
# 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
```bash
# 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**
```json
{
"type": "move_unit",
"unit_ids": ["uuid1", "uuid2"],
"target": {"x": 100, "y": 200}
}
```
**Construire unité**
```json
{
"type": "build_unit",
"building_id": "uuid",
"unit_type": "tank"
}
```
**Placer bâtiment**
```json
{
"type": "build_building",
"building_type": "barracks",
"position": {"x": 240, "y": 240},
"player_id": 0
}
```
### Messages Serveur → Client
**État initial**
```json
{
"type": "init",
"state": { ... }
}
```
**Mise à jour**
```json
{
"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**