Zappy
Jeu réseau où des équipes de drones autonomes s'affrontent sur une carte à ressources — j'ai porté le client graphique (SFML) et la suite de tests de l'IA.

Contexte
Projet de fin de 2ᵉ année à Epitech (module G-YEP-400), en équipe de 4. Plusieurs équipes de drones autonomes s'affrontent sur une carte à ressources, chaque camp relié en TCP à un serveur qui fait autorité sur l'état du monde.
Problème
Faire tenir ensemble trois programmes qui ne se font jamais confiance : un serveur source de vérité, une IA autonome par joueur, et un client graphique qui doit rester synchronisé en temps réel sans jamais ralentir le jeu.
Contraintes
- Protocole texte strict sur TCP, à respecter à la lettre entre les 3 binaires
- Le serveur reste mono-thread (poll()) : rien côté client ne doit le ralentir
- Rendu temps réel en SFML/OpenGL, à tenir à jour sans connaître l'état interne du serveur
Approche
Architecture
- Serveur
- C · poll() mono-thread · Protocole TCP texte
- Interface graphique
- C++17 · SFML + OpenGL · HUD, caméra, animations
- IA cliente
- Tests unitaires Python · Survie, exploration, incantation
Décisions
Un thème visuel cohérent plutôt que des sprites disparates
Le HUD et les animations sont pensés autour d'un habillage cohérent, pour que l'interface reste lisible même avec plusieurs équipes et beaucoup d'entités à l'écran en même temps.
Tests unitaires sur l'IA plutôt qu'uniquement du bout en bout
Les comportements critiques (survie, exploration, coordination d'incantation) sont couverts par des tests Python indépendants du serveur, pour isoler une régression sans dépendre d'une partie complète.
Résultat
Les trois binaires tournent ensemble et respectent le protocole du sujet ; le rendu graphique gère plusieurs équipes, les animations de déplacement et d'incantation, et une suite de tests couvre les comportements clés de l'IA.
Synchroniser un client graphique avec un serveur qui ne partage que du texte, sur un protocole strict, apprend à séparer nettement l'état affiché de l'état réel — et à ne jamais supposer que les deux sont à jour au même instant.