Développer une version moderne du jeu Maze Wars en utilisant Rust et le moteur de jeu Bevy, en implémentant une architecture client-serveur multijoueur.
- Langage : Rust
- Moteur de jeu : Bevy
- Protocol réseau : UDP
- Architecture : Client-serveur
-
Serveur central
- Gestion des connexions clients (minimum 10 joueurs simultanés)
- Synchronisation de l'état du jeu
- Gestion des collisions et de la logique de jeu
- Système de rooms/sessions de jeu
-
Client
- Interface graphique avec Bevy
- Gestion des inputs joueur
- Rendu 3D temps réel
- Interface utilisateur
- Communication réseau avec le serveur
-
Systems
- NetworkingSystem
- InputSystem
- PhysicsSystem
- RenderSystem
- UISystem
- GameStateSystem
-
Resources
- GameState
- NetworkState
- PlayerState
- MapState
-
Components
- Player
- Wall
- Projectile
- Camera
- Transform
- Collider
-
Écran de connexion
- Champ pour l'adresse IP du serveur
- Champ pour le nom d'utilisateur
- Bouton de connexion
-
Interface en jeu
- Minimap avec positions des joueurs
- Compteur FPS
- Score
- Vie restante
- Liste des joueurs connectés
- 3 niveaux minimum avec difficulté croissante
- Système de génération de labyrinthe
- Système de chargement de niveau
- Maintenir 50+ FPS constant
- Latence réseau maximale acceptable : 100ms
- Optimisation des assets et des calculs physiques
- Implémentation UDP fiable
- Gestion de la désynchronisation
- Prédiction côté client
- Réconciliation côté serveur
- Tests unitaires pour chaque module
- Documentation complète (rustdoc)
- Gestion des erreurs robuste
- Logging complet
src/
├── bin/
│ ├── client.rs
│ └── server.rs
├── common/
│ ├── network/
│ ├── game_state/
│ └── types/
├── client/
│ ├── graphics/
│ ├── input/
│ └── ui/
└── server/
├── game_logic/
├── physics/
└── session/src/
├── bin/
│ ├── client.rs # Point d'entrée pour le client.
│ └── server.rs # Point d'entrée pour le serveur.
├── common/ # Code partagé entre client et serveur.
│ ├── network/ # Gestion réseau.
│ │ ├── protocol.rs # Définitions des messages réseau.
│ │ ├── udp.rs # Implémentation des connexions UDP avec Tokio.
│ └── types/ # Types et structures partagés.
│ ├── game_state.rs # État global partagé du jeu.
│ └── entities.rs # Structures pour les joueurs, labyrinthes, etc.
├── client/ # Code spécifique au client.
│ ├── graphics/ # Rendu et affichage.
│ │ ├── rendering.rs # Rendu principal avec Bevy.
│ │ └── ui.rs # HUD (mini-carte, FPS, etc.).
│ ├── input/ # Gestion des entrées utilisateur.
│ │ └── input_handler.rs # Déplacement, interactions.
│ └── state/ # Gestion des états côté client.
│ └── client_state.rs # État local du client.
└── server/ # Code spécifique au serveur.
├── game_logic/ # Logique centrale du jeu.
│ ├── maze.rs # Génération procédurale de labyrinthes avec Rand.
│ ├── levels.rs # Gestion des niveaux et difficulté.
│ └── player_logic.rs # Gestion des joueurs.
├── physics/ # Physique avec Rapier3D.
│ └── collision.rs # Détection et gestion des collisions.
└── session/ # Gestion des sessions de jeu.
├── session_manager.rs # Connexions des joueurs et parties actives.
└── events.rs # Gestion des événements du jeu.[dependencies]
bevy = "0.12"
bevy_networking = "0.12"
serde = { version = "1.0", features = ["derive"] }
tokio = { version = "1.0", features = ["full"] }
rand = "0.8"
rapier3d = "0.17" # Pour la physique- Interface graphique pour la création de niveaux
- Sauvegarde/chargement de niveaux personnalisés
- Outils d'édition intuitifs
- Validation de niveau
- Algorithme de génération de labyrinthe
- Paramètres configurables
- Validation de jouabilité
- Seeds pour reproduction
- Pathfinding intelligent (A*)
- Différents niveaux de difficulté
- Comportements variés
- Adaptation au style de jeu du joueur
- Historique des serveurs
- Système d'alias pour les serveurs
- Interface graphique pour la configuration
- Sauvegarde des préférences
- Utilisation de clippy avec configuration stricte
- Format de code rustfmt
- Documentation exhaustive
- Tests de couverture >80%
- Revue de code systématique
- SOLID principles
- Clean Architecture
- Error handling robuste
- Logging complet
- Modularité et réutilisabilité
- Profilage régulier
- Optimisation des allocations
- Minimisation des copies
- Cache-friendly data structures
- Parallel computing quand possible
- Validation des entrées
- Sanitization des données réseau
- Protection contre les attaques DoS
- Rate limiting
- Gestion sécurisée des sessions
- Étudier la bibliothèque Bevy (tutoriels et documentation).
- Définir la structure du projet :
- Séparer les modules pour le client, le serveur et les systèmes communs.
- Créer des wireframes pour l’interface utilisateur.
- Semaine 1 :
- Implémentation de la logique de connexion client-serveur avec UDP.
- Création de l’environnement de jeu de base (mur, joueur, déplacements).
- Semaine 2 :
- Ajout des fonctionnalités de la mini-map.
- Affichage des performances (FPS, ping).
- Gestion des collisions dans le labyrinthe.
- Semaine 3 :
- Développement des niveaux (création manuelle et difficulté croissante).
- Ajout de la configuration client (adresse IP, pseudo).
- Semaine 4 :
- Amélioration des graphismes et de l’interface.
- Tests de charge pour garantir la stabilité du serveur.
- Implémenter un ou plusieurs bonus :
- Génération procédurale de labyrinthe.
- IA pour les joueurs.
- Éditeur de niveaux.
- Documentation du code et des fonctionnalités.
- Test de bout en bout avec plusieurs joueurs.
- Optimisation des performances.
- Déploiement sur une machine ou un serveur public pour démonstration.