Aller au contenu
En production Solide

R-Type

multijoueur

Recréation R-Type client-serveur en C++23 : réseau temps réel UDP 20 Hz, chat vocal Opus, plugins dynamiques, architecture hexagonale.

20 Hz netcode UDP
C++23 archi hexagonale
Opus chat vocal
netcode temps réel · C++23 · archi hexagonale UDP · Boost.ASIO · Opus JOUEUR 1 client · prédiction JOUEUR 2 client · prédiction JOUEUR 3 client · prédiction JOUEUR 4 client · prédiction SERVEUR 20 Hz monde autoritatif
Moteur client-serveur en C++23 : le serveur fait autorité et sérialise l'état du monde à 20 Hz (toutes les 50 ms) en UDP ; chaque client prédit puis se resynchronise au tick. Chat vocal compressé en Opus, plugins dynamiques, cœur de jeu isolé par une architecture hexagonale.

Le défi

Recréer un shoot-them-up en multijoueur temps réel oblige à affronter d’un coup plusieurs problèmes durs : synchroniser l’état entre machines, encaisser la latence, garder une architecture extensible, et industrialiser le tout. C’est moins un jeu qu’un prétexte à faire du réseau bas niveau proprement.

Le netcode

Le moteur est client-serveur, en C++23, avec un réseau UDP à 20 Hz (Boost.ASIO). Le choix d’UDP plutôt que TCP est dicté par le temps réel : un jeu ne peut pas se permettre qu’une retransmission fige tout le flux. Le serveur fait autorité et sérialise l’état des entités à chaque tick (toutes les 50 ms) ; le client affiche et corrige à réception. C’est le compromis classique du jeu en réseau, tenu ici à la main.

Architecture hexagonale

Le cœur de jeu est isolé des détails techniques (rendu, réseau, entrée) par une architecture hexagonale. L’intérêt est concret : la logique reste testable indépendamment de SFML ou du socket, et les implémentations se branchent par des ports bien définis. C’est ce qui rend les plugins possibles.

Plugins et voix

Le rendu et certains systèmes sont chargés dynamiquement sous forme de plugins, ce qui permet d’étendre le jeu sans recompiler le cœur. Le chat vocal est compressé en Opus, un codec conçu pour la voix à faible latence et faible débit, taillé pour le temps réel.

Industrialisation et état

L’intégration continue tourne sous Jenkins. Le jeu est jouable en réseau. Le projet a surtout servi de terrain à deux exigences : une architecture propre et un netcode bas niveau que l’on mesure et que l’on garde testable. Code public, réalisé en équipe.