:: Enseignements :: ESIPE :: E3INFO :: 2008-2009 :: Programmation C ::
[LOGO]

Jeu


L'objectif de ce TD est la réalisation d'un jeu simple, sur le principe du jeu du morpion.

Règles du jeu

Le jeu se joue à deux joueurs sur une grille de 8x8 cases, vide en début de partie. Tour à tour, chaque joueur place un pion sur une case vide du plateau. Le premier joueur à aligner 4 pions de sa couleur (verticalement, horizontalement ou en diagonal) a gagné. Si la grille est pleine avant qu'aucun joueur n'ait gagné, la partie est déclarée nulle.

Exercice 1 - Fichier plateau.h

Dans un fichier plateau.h, on définira les structures de données et les prototypes des fonctions nécessaires au jeu. Les points suivants devront être respectés :
  • Le type Grille contient un tableau de cases à deux dimensions alloué dynamiquement, ainsi que des informations sur les dimensions de la grille et le nombre de cases vide ;
  • les fonctions suivantes seront déclarées :
    • Grille * initGrille(int x, int y) : alloue une grille vide de taille x*y, renvoie NULL en cas d'échec ;
    • void libererGrille(Grille * G) : libère l'espace mémoire occupé par G et les données associées ;
    • int placerPion(Grille * G, int J, int x, int y) : essaye de placer un pion du joueur numero J sur la case (x,y) de la grille G, qui doit être vide. La fonction renvoie 1 si tout s'est bien passé, 0 si la case est occupée ou n'existe pas.
    • int estPleineGrille(Grille * G) : renvoie 1 si la grille G n'a plus de cases libres, 0 sinon.
    • int alignePion(Grille * G, int x, int y, int n) : renvoie 1 si un alignement de n pions d'un même joueur existe comprenant le pion situé sur la case (x,y) de G ; renvoie 0 sinon.
    • void afficherGrille(Grille * G) : affiche la grille G à l'écran.

Exercice 2 - Fichiers plateau.c et test_plateau.c

Ecrire, dans un fichier plateau.c, l'implémentation des fonctions déclarées dans le fichier plateau.h. Avant de passer à la suite, écrire un jeu de tests dans un programme afin de tester la correction des fonctions implémentées. Utiliser la macro assert pour arrêter l'exécution du programme lorsqu'un test a échoué.

Exercice 3 - Fichier jeu.c

Ecrire le programme principal du jeu dans le fichier jeu.c. Il conviendra de définir au moins les deux fonctions suivantes :
  • int recupererOrdre(int * x, int *y) : recupère les coordonnées x et y de la prochaîne case à jouer du joueur courant. Le prototype indiqué est minimal et peut éventuellement être modifié.
  • int main() : fonction principale, contient l'initialisation des données et la boucle principale du jeu.

Exercice 4 - Makefile

Ecrire un makefile pour le programme. Ajouter une cible clean pour nettoyer le répertoire en supprimant les différents fichiers binaires créés lors de la compilation et une cible test qui lance le programme de test de l'exercice 2 après l'avoir compilé si nécéssaire.