Ce repo contient la structure d’un projet R-Type avec un client, serveur, et un ECS chacun dans son propre répertoire. Le projet utilise CMake pour gérer la configuration et la compilation. Le projet est compilable sur Linux et Windows.
Linux & WINDOWS par Cmake
L’architecture ECS est utilisée pour gérer les entités du jeu. Elle sépare les données (composants) de la logique (systèmes) afin de gérer efficacement les entités. Cette structure permet de garantir une grande flexibilité et une meilleure gestion des ressources pour un jeu de grande envergure.
Le serveur gère la communication réseau et la synchronisation de l’état du jeu. Il utilise plusieurs threads pour traiter les paquets entrants et sortants, garantissant ainsi un état de jeu cohérent entre les clients. Le serveur est développé pour fonctionner sur TCP/UDP et s’appuie sur Asio pour la gestion des sockets.
Le client est responsable de la communication avec le serveur, de l’envoi des actions des joueurs et du rendu de l’état du jeu reçu depuis le serveur. Il utilise une architecture graphique pour afficher l'état du jeu, gérer les inputs des joueurs et afficher les événements en temps réel.
Pour compiler le projet, exécutez simplement la commande suivante à la racine du dépôt :
makeAprès la compilation, naviguez dans le répertoire build, puis dans les répertoires client et server pour exécuter les exécutables respectifs.
cd build/server
./r_type_servercd build/client
./r_type_clientLe serveur fonctionne sur un modèle multi-threads pour traiter les requêtes des clients et gérer la logique de jeu. Il reçoit les paquets des clients, traite les actions (mouvement, tirs, état du jeu), et les renvoie aux joueurs connectés.
- Le serveur gère les lobbies avec des commandes permettant de créer, rejoindre, quitter un lobby.
- Il utilise un système ECS pour traiter les entités du jeu en fonction de leur état (par exemple, le mouvement des joueurs, les collisions, la gestion des ennemis).
Le client gère l’interaction utilisateur et la communication avec le serveur via UDP/TCP. Chaque action (comme les déplacements, les tirs) est envoyée au serveur, et l’état du jeu est récupéré et affiché en temps réel.
Le client peut demander la liste des lobbies disponibles via la commande LIST_LOBBIES.
Un joueur peut créer un lobby en utilisant la commande CREATE_LOBBY <lobbyId>.
Un joueur peut rejoindre un lobby avec la commande JOIN_LOBBY <lobbyId>.
Un joueur peut quitter son lobby avec la commande LEAVE_LOBBY.
Les joueurs peuvent envoyer des messages dans un chat de lobby via SEND_MESSAGE <message>.
Les joueurs peuvent récupérer l’historique du chat avec GET_CHAT_HISTORY.
Les informations de connexion UDP pour rejoindre un lobby peuvent être récupérées via GET_UDP_INFO <lobbyId>.
Les diagrammes suivants illustrent l'architecture de l'ECS, du Client et du Serveur pour mieux comprendre leur interaction. Vous pouvez consulter les diagrammes complets dans le dossier docs à la racine du projet.
Le projet suit la norme de commit définie par commitlint avec la configuration @commitlint/config-conventional.
Vous pouvez consulter le lien pour plus de détails sur la norme de commit ici : CommitLint Configuration.
Le style de codage C++20 utilisé par cppcheck pour l’analyse du code est disponible ici : C++20 Coding Style.
Merci à tous les contributeurs qui ont participé à ce projet :
- Mathis Champin
- Mathis Liberati
- Arthur Baudelot
- Pablo Peiro
- Alexandre Lorgeoux



