Clone du jeu de réflexion Sokoban en C, avec parsing de niveaux, déplacement de caisses et détection de victoire.
Telecharger & tester
make && ./my_sokoban carte.txt (jeu Sokoban en ncurses, boucle de saisie interactive TTY : pas de demo WebAssembly pertinente)
My_sokoban est un projet Epitech de Tek1 (module de programmation systeme UNIX, solo) qui consiste a reimplementer en C, avec la bibliotheque ncurses, le jeu de reflexion classique Sokoban : deplacer un magasinier dans un entrepot pour pousser des caisses jusqu'a des emplacements de stockage.
Le joueur se deplace aux fleches directionnelles sur une grille qui n'est pas necessairement rectangulaire, uniquement fermee par des murs. Il peut pousser une caisse dans la case suivante s'il n'y a ni mur ni autre caisse derriere elle, mais ne peut jamais la tirer ni pousser deux caisses a la fois.
La carte est fournie sous forme de fichier texte n'autorisant que l'espace, le retour a la ligne, '#' pour les murs, 'X' pour les caisses, 'O' pour les emplacements de stockage et 'P' pour la position de depart du joueur ; toute carte contenant un autre caractere est rejetee et provoque l'arret du programme avec une erreur.
La partie est gagnee, avec un code de retour 0, quand toutes les caisses reposent sur un emplacement de stockage, et perdue, avec un code de retour 1, des lors qu'aucune caisse ne peut plus etre deplacee ; dans les deux cas le dernier etat du plateau est affiche avant de quitter. Le jeu peut etre reinitialise a la volee avec la barre espace, et le redimensionnement du terminal est gere en affichant un message centre invitant a agrandir la fenetre tant que l'espace disponible est insuffisant pour la carte entiere.
Seules les fonctions ncurses ainsi qu'un ensemble restreint d'appels systeme (malloc, free, exit, (f)open/(f)close/(f)read/(f)write, getline, ioctl, usleep, sigaction, signal, stat/lstat/fstat) sont autorisees, ce qui pousse a isoler la logique du jeu (etat de la carte, deplacements, conditions de victoire) des appels a ncurses pour la rendre testable independamment, comme le suggere l'exemple de tests unitaires fourni dans le sujet.
Projet suivant
