M1103 – TP2 – Exercice 2 – PacMan

Gestion de la grille

Le but du projet est de réaliser une version simplifiée du célèbre jeu “voleur / contrebandier” (base du célèbre PacMan). Les règles du jeu sont les suivantes :

  1. Chaque joueur commence à deux coins diamétralement opposés de la grille. Dans notre cas, le Joueur1 débute en haut à droite et le Joueur2 en bas à gauche.
  2. Chaque joueur joue à tour de rôle, et ne peut faire qu’un unique déplacement, et d’une seule case. Les touches valides de déplacement sont ‘A’ (haut gauche), ‘Z’ (haut), ‘E’ (haut droit), ‘Q’, ‘D’, ‘W’, ‘X, et ‘C’ (mais elles peuvent être changées).
  3. Le jeu s’arrête soit :
    • lorsqu’un joueur atteint la même position dans la grille qu’un autre;
    • lorsqu’un nombre pré-déterminé de coups a été joué. Dans ce cas, il y a match nul.

La grille est représentée par une matrice de taille MxN. Dans les paragraphes suivants, nous considérons que la matrice est carrée.
En conséquence, nous pouvons définir les alias suivants :

typedef vector <char> CVLine; // un type représentant une ligne de la grille
typedef vector <CVLine> CMatrix; // un type représentant la grille
typedef pair   <unsigned, unsigned> CPosition; // un type représentant une coordonnée dans la grille

De plus, les constantes globales (i.e. visibles par toutes les fonctions) suivantes sont définies :

const char KTokenPlayer1 = 'X';
const char KTokenPlayer2 = 'O';
const char KEmpty        = ' ';

Par souci d’uniformité, pour ce TP, le caractère :

  1. 'X' symbolise le pion du joueur 1 (la couleur est à votre guise);
  2. '0' désigne le pion du joueur 2 (la couleur est à votre guise);
  3. ' ' matérialise une case vide.

Affichage de la grille

Travail à effectuer : écrivez le corps de la fonction ShowMatrix () de signature :

void  ShowMatrix (const CMatrix & Mat)

Cette fonction doit :

  1. faire appel à la fonction ClearScreen ();
  2. remettre la couleur des caractères à sa valeur par défaut;
  3. afficher case / case le contenu de la case courante. Si la case n’est pas occupé par un joueur, on affiche une case vide, sinon, on affiche la couleur du joueur (définie auparavant) suivie du jeton.