Bataille navale en ligne de commande en C, avec placement de flotte, tir et suivi de l'état de la grille.
Telecharger & tester
make && ./my_navy (bataille navale reseau utilisant sockets et sigaction/SA_SIGINFO, non supporte par le bac a sable WASI)
My_navy est un projet Epitech de Tek1 (groupe de 2) qui consiste a ecrire en C une version terminal du jeu de bataille navale, avec la particularite que les deux joueurs, executes comme deux processus independants, ne communiquent qu'au moyen des signaux UNIX SIGUSR1 et SIGUSR2, sans socket ni tube nomme.
Le premier joueur lance le programme avec uniquement son fichier de positionnement de flotte et affiche son PID en attendant la connexion de l'adversaire ; le second joueur lance le programme avec ce PID en premier argument et son propre fichier de positionnement en second argument. Les signaux ne transportant aucune donnee et pouvant etre perdus, le protocole d'echange (annonce de tour, envoi d'une attaque, notification du resultat) doit etre concu pour rester coherent malgre cette contrainte.
Chaque fichier de positionnement decrit 4 navires de longueurs 2, 3, 4 et 5 sous la forme LONGUEUR:PREMIERE_CASE:DERNIERE_CASE sur une grille de 8x8 ; un fichier invalide entraine l'arret du programme, et en environnement de test ce fichier n'est accessible qu'en lecture.
A chaque tour, le programme affiche sa propre grille puis celle de l'adversaire telle que connue jusqu'ici, demande une case a attaquer (par exemple B6) et affiche le resultat (touche ou manque) avant de ceder la main. La partie se termine quand tous les navires d'un camp sont coules : le programme affiche alors I won et retourne 0, ou Enemy won et retourne 1.
Les fonctions autorisees sont typiques de la programmation systeme UNIX de bas niveau : signal, sigaction, sigemptyset, kill, getpid, pause, usleep, nanosleep, ainsi que getcontext/setcontext, en plus des appels fichiers classiques (open, read, write, lseek, getline). Une seule variable globale est tolerable, a condition d'etre justifiee.
Projet suivant
