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

Jeu - 2


L'objectif de ce TD est de continuer le morpion en y rajoutant des options et une stratégie de jeu contre l'ordinateur. On abordera la notion de fonctions à nombre variable d'arguments, l'utilisation de getopt pour analyser les arguments de la ligne de commande, et les pointeurs sur fonction.

Exercice 1 - Fonction à nombre variable d'arguments

Exercice 2 - getopt_long

On va rajouter des options au programme du morpion que l'on gèrera à l'aide de la fonction getopt_long. Une liste non exhaustive des options que l'on souhaite pouvoir utiliser est :
  • -y n (ou --hauteur): fixe la hauteur du plateau à n cases ;
  • -x n (ou --largeur): fixe la largeur du plateau à n cases ;
  • -a n (ou --alignement): fixe à n le nombre de pions à aligner pour gagner ;
  • -h (ou --help) : affiche une aide et quitte le programme.
On gardera par défaut les valeurs de 8x8 pour les dimensions du plateau et de 4 pour le nombre de pions à aligner.

Exercice 3 - Joueur et stratégies

Le but de cet exercice est de donner la possibilité de jouer contre l'ordinateur. Pour cela, on définit un type Joueur qui correspondra à un joueur, humain ou ordinateur. Cette structure comprendra un entier identifiant le joueur et un pointeur vers une fonction du type :
				void placePion(Joueur * J, Grille * G, int * x, int * y);
			
qui étant donnés un joueur J et une grille G retourne les coordonnées x et y du prochain pion à placer. Dans le cas d'un joueur humain, la fonction pointée se chargera de récupérer les coordonnées saisies au clavier par l'utilisateur. Dans le cas d'un joueur ordinateur, la fonction correspondra à une stratégie. Les stratégies suivantes devront être implémentées en premier lieu :
  • random : statégie inexistante, le joueur pose son pion sur une case libre au hasard ;
  • defense : stratégie défensive, le joueur pose son pion de façon à gêner au mieux le plus grand alignement de pions adverses ;
  • attack : stratégie offensive, le joueur pose son pion de façon à obtenir le plus grand alignement possible.
Pour chaque type de joueur, on écrira une fonction qui crée et initialise correctement une nouvelle structure Joueur. Par exemple :
				Joueur * creerJoueurHumain(int id);
				Joueur * creerJoueurRandom(int id);
				etc.
			
On ajoutera les options -1 (resp. -2) pour permettre de fixer une stratégie pour le joueur 1 (resp. 2). Vous réflechirez ensuite à l'écriture de stratégies plus efficaces.