Jeu réseau multijoueur inspiré de Zaphod : serveur en C, IA client en Python et GUI de visualisation en C++.
Telecharger & tester
make && ./zappy_server -p port -x largeur -y hauteur -n team1 team2 -c clientsNb -f freq (serveur + IA + GUI reseau, jeu multi-agents)
Zappy est le projet de fin d'annee Epitech (Tek2, B-YEP-410, groupe) qui consiste a developper un jeu reseau en trois binaires distincts : zappy_server en C, qui simule le monde et ses habitants ; zappy_gui, un client graphique dans un langage libre qui affiche l'etat du monde ; et zappy_ai, un client autonome qui pilote un joueur (drone) via des ordres envoyes au serveur, sur le meme principe que le projet Corewar. Plusieurs equipes s'affrontent sur une carte de tuiles contenant des ressources, l'equipe gagnante etant la premiere a compter six joueurs ayant atteint l'elevation maximale.
Le monde, nomme Trantor, est une carte plane a bords connectes (sortir a droite fait reapparaitre a gauche) contenant de la nourriture et six types de pierres (linemate, deraumere, sibur, mendiane, phiras, thystame), generees selon une densite fixe rapportee a la surface de la carte et renouvelees toutes les 20 unites de temps. Chaque joueur dispose d'un champ de vision qui s'elargit a chaque niveau d'elevation, et le rituel d'elevation impose de reunir sur une meme case un nombre precis de joueurs de meme niveau avec une combinaison exacte de pierres, definie par un tableau de sept paliers (du niveau 1 au niveau 8) — les verifications de la recette se faisant au debut et a la fin de l'incantation.
La communication client-serveur repose sur des sockets TCP en texte brut, avec un multiplexage via select cote serveur (processus et thread uniques, sans attente active). Chaque joueur ne repond qu'a un ensemble ferme de commandes (Forward, Right, Left, Look, Inventory, Broadcast, Connect_nbr, Fork, Eject, Take, Set, Incantation), chacune associee a un temps d'execution proportionnel a 1/f (f etant la frequence passee en parametre du serveur, 100 par defaut) ; le client peut envoyer jusqu'a dix requetes sans attendre de reponse, au-dela desquelles le serveur les ignore.
La reproduction des joueurs se fait via la commande Fork, qui pond un oeuf sur la case du joueur et autorise un nouveau client a se connecter a l'equipe une fois l'oeuf eclos ; le son (Broadcast) se propage a travers toute la carte et chaque joueur percoit uniquement la direction relative de la source, calculee par le plus court chemin sur un monde sans relief. Les objets ne sont identifiables que par leur classe, jamais individuellement — deux sibur sont donc rigoureusement indiscernables.
Le client graphique doit offrir au moins une visualisation 2D du monde par icones, une representation 3D etant appreciee en bonus mais non prioritaire sur la fonctionnalite. Aucun protocole n'est impose entre zappy_gui et le serveur : un protocole de reference est fourni a titre indicatif pour permettre de tester son client face au serveur de reference, mais chaque equipe est libre de definir le sien tant que le protocole serveur/IA decrit dans le sujet est, lui, strictement respecte.
Projet suivant