Le projet Zappy est un projet de 2e année à Epitech.
Ce projet est un jeu multijoueur utilisant du réseau, une interface graphique et de l'IA, implémenté dans plusieurs langages tels que Python, C et C++.
Le serveur est chargé de répondre aux requêtes client provenant de l'IA et de l'interface graphique.
Le projet est compilé avec un Makefile
makePour demarer le serveur :
./zappy_server -p port -x width -y height -n name1 name2 ... -c clientsNb -f freqPar exemple :
./zappy_server -p 4242 -x 10 -y 10 -n Ender Creeper -c 10 -f 100Pour demarer l'interface graphique :
./zappy_gui -p port -h machinePar exemple :
./zappy_gui -p 4242 -h localhostPour demarer l'inteligence artificielle :
./zappy_ai -p port -n name -h machinePar exemple :
./zappy_ai -p 4242 -n Ender -h localhostsrc/server/
├── main.c # Point d'entrée principal
├── server.c # Gestion du socket serveur TCP
├── clients.c # Gestion des clients connectés (IA/GUI)
├── main_loop.c # Boucle principale avec poll()
├── protocol.c # Gestion des protocoles IA et GUI
├── game.c # Structure du jeu (stub)
└── utils.c # Fonctions utilitaires
include/server/
└── server.h # Structures et prototypes
- Socket serveur TCP non-bloquant sur le port 4242
- Gestion multi-clients avec
poll()(jusqu'à 256 clients simultanés) - Différenciation automatique des clients :
- IA : envoie le nom d'équipe à la connexion
- GUI : envoie "GRAPHIC" à la connexion
- Structure
client_tcomplète avec buffer, type, authentification - Lecture/écriture non-bloquante avec gestion des messages ligne par ligne
- Déconnexion propre et nettoyage automatique
- Protocole IA : commandes Forward, Right, Left, Look, Inventory, etc.
- Protocole GUI : commandes msz, bct, mct, tna, ppo, plv, pin, sgt, sst
- Réponses par défaut pour tester la connectivité
- Z key : monter
- Q key : s'éloigner
- S key : descendre
- D key : se rapprocher
Le serveur peut être testé comme ci-dessous :
# Compilation
make zappy_server
# Lancement
./zappy_server
# Test connexion IA
echo "team1" | nc localhost 4242
# Test connexion GUI
echo "GRAPHIC" | nc localhost 4242WELCOME
1 # Numéro du client dans l'équipe
10 10 # Dimensions de la carte
WELCOME
msz 10 10 # Taille de la carte
sgt 126 # Unité de temps
mct # Contenu de la carte
typedef struct client_s {
int fd; // Socket file descriptor
client_type_t type; // CLIENT_IA ou CLIENT_GUI
char buffer[BUFFER_SIZE]; // Buffer de réception
bool authenticated; // État d'authentification
char *team_name; // Nom d'équipe (IA uniquement)
int x, y, orientation; // Position et orientation
} client_t;typedef struct server_s {
int socket_fd; // Socket serveur
client_t clients[MAX_CLIENTS]; // Clients connectés
struct pollfd poll_fds[MAX_CLIENTS+1]; // Structure poll
int client_count; // Nombre de clients
game_t *game; // État du jeu
} server_t;By radio sound "Box, Box..." 🏎☘︎