TD02 : Jouer en Mode Texte
Objectifs : Dans le contexte du projet, nous vous proposons de programmer une version du jeu en mode texte, c'est-à-dire jouable dans un terminal Linux.
Voici une petite démonstration animée du jeu Mosaic en mode texte :
Dans ce TD, nous vous fournissons l'archive src.zip, qui contient les fichiers suivants :
game.h
: l'interface des fonctions principales du jeu ;game_aux.h
: l'interface des fonctions auxiliaires ;libgame.a
: la bibliothèque game (au format binaire, compilé sous Linuxx86_64
) qui fournit une implémentation des fonctions degame.h
etgame_aux.h
.
Et vous devez produire les fichiers suivants :
game_text.c
: un programme exécutable (disposant de la fonctionmain
) qui permet à un utilisateur de jouer interactivement en mode texte ;Makefile
: un fichier qui permet de compiler l'ensemble du projet.
Pour vous aider à effectuer cet exercice, vous disposez de la documentation en ligne du projet, générée avec l'outil Doxygen à partir des fichiers précédents.
Exercice 1 : prise en main de l'API
Pour commencer, nous vous proposons d'implémenter une version simplifiée du
programme game_text
, avec un fichier Makefile
qui compile le tout.
Consignes :
Du respect de ces consignes dépend le bon fonctionnement des scripts d'évaluation dans VPL !
- Avec VS Code, créez les nouveaux fichiers demandés (Ctrl+N) et sauvegardez-les (Ctrl+S). Attention, tous les fichiers doivent se trouver à plat dans le même répertoire.
- Dans
game_text.c
, ajoutez la fonctionint main(void) { /* ...*/ }
minimale, qui renvoieEXIT_SUCCESS
(défini dans<stdlib.h>
). - Puis, ajoutez le fichier
Makefile
qui va compiler tout ça, et plus précisément va générer l'exécutablegame_text
à partir du fichiergame_text.o
(compilé à partir degame_text.c
) et de la bibliothèque game (fichierlibgame.a
). Ne pas sauter l'étape qui consiste à générer le fichier intermédiairegame_text.o
. - Votre programme
game_text
doit être compilé avec la variableCFLAGS=-std=c99 -Wall
sans générer d'erreurs ou de warnings. - Votre fichier
Makefile
doit également disposer d'une cibleclean
(qui ne devra pas supprimer la bibliothèque). - En vous aidant de la
documentation,
complétez votre programme pour qu'il instancie le jeu par défaut
(
game_default()
) dans une variablegame g
, et joue la couleurWHITE
dans la case(0,0)
, puis affiche le jeu dans le terminal, avant de terminer en supprimant le jeu instancié. - Déposez les 2 fichiers produits dans l'activité Rendu Initial de Moodle. Attention, il s'agit d'un rendu individuel et tout plagiat sera sanctionné !
Exercice 2 : implémentation de game_text
En repartant du code précédent, il s'agit maintenant d'implémenter le fichier
game_text.c
, en vous basant sur les fonctions de game.h
et game_aux.h
(fournies dans la bibliothèque). Consultez la documentation en
ligne pour bien
comprendre le fonctionnement des fonctions de la bibliothèque game. Votre
programme game_text
devra permettre à un utilisateur de jouer au jeu par
défaut conformément à l'algorithme suivant :
Tant que la partie n'est pas gagnée :
Afficher la grille
Afficher la liste des erreurs
Lire un caractère <c> sur l'entrée standard (au format " %c")
Si <c> == 'h' alors
Afficher l'aide
Sinon Si <c> == 'r' alors
Reinitialiser la grille (restart)
Sinon Si <c> =='q' alors
Quitter
Sinon Si <c> == 'w' ou 'b' ou 'e' alors :
Lire deux entiers <i> <j> sur l'entrée standard (au format "%d %d")
Si le coup est légal alors :
Si <c> == 'w', jouer la case (<i>,<j>) en blanc ()
Sinon Si <c> == 'b', jouer la case (<i>,<j>) en noir
Sinon Si <c> == 'e', vider la case (<i>,<j>) (empty)
Fin Si
Fin Si
Fin si
Fin tant que
Afficher la grille
Consignes :
Du respect de ces consignes dépend le bon fonctionnement des scripts d'évaluation dans VPL !
- Il faut respecter strictement le nom des fichiers que votre
Makefile
doit produire, et en particuliergame_text
. - Il ne faut en aucun cas modifier les fichiers fournis comme
game.h
ougame_aux.h
. - Le programme devra obligatoirement afficher le mot congratulation ou shame
à la fin de son exécution, selon que le jeu est gagné ou perdu (le joueur
abandonne en tapant 'q'). Notez que dans ces deux cas, le programme
game_text
doit se terminer en renvoyantEXIT_SUCCESS
. (Faireecho $?
pour afficher le code de retour d'un programme que l'on vient d'exécuter dans un terminal bash.) - Pour réaliser un tel programme, il vous faut lire des caractères saisis au
clavier sur l'entrée standard du terminal. Dans ce cas précis, il est demandé
d'utiliser la fonction
scanf()
, afin de ne pas être sensible aux multiples espaces ou au retour à la ligne (cf. Annexes). - Par ailleurs, votre programme doit fonctionner avec la commande en ligne
suivante :
echo "w 0 0 q" | ./game_text
. Cette commande permet de rediriger la saisiew 0 0 q
sur l'entrée standard du programmegame_text
, ce qui simule un utilisateur qui taperait au clavier ces caractères. - Dans le même esprit, vous pouvez jouer tous les coups gagnants du jeu par
défaut avec la commande en ligne suivante :
cat moves.txt | ./game_text
. - Déposez les 2 fichiers produits dans l'activité Rendu Final sur Moodle. Attention, il s'agit d'un rendu individuel et tout plagiat sera sanctionné !