IN3R11-2: Sujet du TP2-C
ESIEE-PARIS, Denis BUREAU et Emilie CHARRIER, nov 2008.

1 - Les objectifs

Gestion des constantes, pré-processeur, création de nouveaux types (énumérations, structures, et tableaux) pour commencer le "projet" Sokoban.

2  "Projet" Sokoban

Les objectifs de ce mini-projet sont de mettre en oeuvre les notions vues en cours. Plutôt que des exercices de TP indépendants, il s'agira de réaliser un programme permettant de jouer à Sokoban. Vous pouvez tester le jeu en récupérant l'exécutable sokoban1.x. Après avoir récupéré le fichier, placez vous dans le répertoire du fichier téléchargé, tapez la commande linux chmod 764 sokoban1.x (pour garantir que vous avez les droits d'exécution sur le fichier) puis exécutez le avec la commande ./sokoban1.x.
Dans ce jeu, vous êtes un manutentionnaire dans un entrepôt qui doit ranger des caisses à leur place; le problème est que les caisses sont tellement lourdes que vous ne pouvez que les poussez, et une seule à la fois.
Les directives des sections suivantes ne vous amènent pas forcément aux meilleures solutions possibles, mais à des solutions raisonnables permettant d'utiliser les différentes notions vues en cours.
Veuillez lire tout le sujet avant de relire chaque partie pour la réaliser, et n'hésitez pas à demander à un intervenant si vous n'êtes pas sûr de ce qui est demandé. Pendant ce TP (et les suivants) vous devrez respecter l'ordre d'écriture des programmes vu en cours.
Tout ne sera pas terminé aujourd'hui; ce projet continuera donc lors des prochains TP, mais des notions nouvelles vues en cours devront alors être incorporées.
Il est fortement conseillé d'essayer de terminer chaque TP en travail personnel avant le TP suivant.

3  Description du programme souhaité

3.1  Plan de jeu / affichage

Grille initiale = {
 "########################",    ########################    ########################
 "#.........#......#.....#",    #.........#......#.....#    #.........#......#.....#
 "##.....O###............#",    ##......###............#    ##.....O###............#
 "###.............O#.....#",    ###..............#.....#    ###.............O#.....#
 "####.............#O....#",    ####.............#.....#    ####.............#O....#
 "##################.....#",    ##################.....#    ##################.....#
 "####.............#.....#",    ####.............#.....#    ####.............#.....#
 "###...............O..###",    ###..................###    ###...............O..###
 "##...........#########o#",    ##...........#########o#    ##...........#########o#
 "#....................oo#",    #....................oo#    #....................oo#
 "#S....................o#",    #.....................o#    #S....................o#
 "########################"     ########################    ########################
};
    1) Declaration en C        2) Grille initiale cachee    3) Grille de jeu (à afficher)
  
Remarques :

3.2  Commandes à traiter

4  Réalisation du programme en C

4.1  Constantes

Déclarez 3 constantes : LARGEUR (24 dans notre exemple) et HAUTEUR (12 dans notre exemple) destinées à servir de taille de tableau  et MAXCH (40 dans notre exemple) représentant la longueur maximale des commandes.

4.2  Nouveaux types

  1. boolean : pour pouvoir manipuler aisément des valeurs booléennes ; à définir par énumération en essayant de mimer le type primitif java du même nom.
  2. Symbole : pour pouvoir désigner les différents caractères qui peuvent apparaître sur la grille : MUR, CAISSE, CIBLE, SOKOBAN, VIDE (le typage faible du C permet de mélanger ainsi des caractères - ou plutôt leur code ascii - avec des entiers - d'une énumération -).
  3. Commande : pour pouvoir désigner les différents caractères qui serviront de commande pour jouer HAUT, BAS, GAUCHE, DROITE, AIDE, QUITTER (toujours le typage faible du C ... )
  4. Ligne : pour pouvoir stocker tous les caractères d'une ligne de la grille et pouvoir considérer cette ligne comme une chaîne de caractères.
  5. Grille : pour pouvoir stocker toutes les lignes de la grille.
  6. Position : pour pouvoir stocker la ligne et la colonne où se trouve le personnage Sokoban.
Faites vérifier par un intervenant vos définitions de type.

4.3  Première itération

4.4  Deuxième itération

4.5  Troisième itération

4.6  Quatrième itération

4.7  Cinquième itération

4.8  Sixième itération

4.9  Septième itération

4.10  Huitième itération

Les TP suivants sont faisables sans avoir développé cette dernière itération. Cependant, il est conseillé de faire ce dernier exercice.