Aller au contenu
/tous les projets

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.

Rôle
Client graphique (SFML) & tests de l'IA — équipe de 4
Année
2026
Réalisé avec
C++, SFML, Python, C
Illustration de deux équipes reliées par un réseau de connexions

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

  1. 01

    Rendu de base

    Renderer SFML et branchement dans la boucle principale.

  2. 02

    Interface de jeu

    HUD (équipes, joueurs, ressources, sélection), caméra zoom/pan.

  3. 03

    Fiabilisation

    Correction des animations (déplacements, incantations) et des cas limites : joueurs superposés, couleurs d'équipe, cycle de vie des œufs.

  4. 04

    Tests IA

    Suite de tests unitaires Python sur les comportements clés (survie, exploration, incantation).

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.