Cyril Rabat


TP n°2 : les fichiers bas-niveau

 Télécharger en PDF

   Le but de ce premier TP sur les fichiers est de manipuler les fonctions bas-niveau associées aux fichiers. Il permet de prendre en main les différentes fonctions vues en cours et il est essentiel de répondre à toutes les questions avant de commencer le mini-projet, correspondant à l'exercice 2.

 

L'exercice 2 correspond au premier mini-projet à rendre.

Un peu d'entraînement

   Pour l'ensemble des questions suivantes, vous devez impérativement utiliser les fonctions C bas-niveau. À noter que la gestion d'erreurs doit être correctement mise en place pour tous les appels systèmes.

 

Pour visualiser le contenu d'un fichier binaire, vous pouvez utiliser la commande od -t x1 fichier.bin.

Questions

  1. Écrivez un programme permettant de tester l'existence d'un fichier dont le nom est passé en argument, en utilisant uniquement l'appel système open.
  2. Modifiez votre programme pour qu'il affiche la taille du fichier, sans utiliser les fonctions de la série stat.
  3. Écrivez un programme qui permet d'afficher les valeurs des octets d'une portion d'un fichier. Le nom du fichier est passé en paramètre, ainsi que la position de départ et de fin de la portion à afficher. Les valeurs seront affichées sous la forme d'une valeur (0 à 255) et d'un caractère (si possible). Vous devrez vérifier que les positions de départ et de fin sont correctes.
  4. Écrivez un programme qui prend en argument le nom d'un fichier. S'il n'existe pas, un fichier vide est créé. Le programme demande ensuite à l'utilisateur de saisir une chaîne de caractères qui est ajoutée à la fin du fichier. Ensuite, toutes les chaînes de caractères du fichier sont affichées, une par ligne.
  5. Écrivez un programme qui permet de réaliser une copie d'un fichier dans un autre fichier. Indication : la copie doit être réalisée bloc par bloc. Si le fichier de destination existe déjà, une erreur doit être affichée.

Jeu du démineur

   Le but du projet est de réaliser un jeu de démineur "amélioré" où le joueur doit découvrir toutes les cases qui ne contiennent pas de bombe; cela lui rapporte 1 point à chaque fois. Certaines cases peuvent contenir des trésors lui rapportant des points supplémentaires. Un éditeur permet de créer une carte (de tailles variables) où le concepteur place les bombes et les trésors. Une application de jeu permet ensuite à un utilisateur de jouer sur cette carte.

   L'éditeur prend en arguments la largeur et la hauteur de la carte, ainsi que le nom du fichier contenant la carte. Si un seul argument est spécifié, il s'agit d'une carte existante que l'on souhaite modifier (ouverture). Le concepteur clique simplement sur une case pour ajouter soit une bombe, soit un trésor.

   Le fichier d'une carte contient :

  • largeur (unsigned char) et hauteur (unsigned char) de la carte
  • nombre de bombes (unsigned char) puis positions des bombes (2 unsigned char par bombe)
  • nombre de trésors (unsigned char) puis positions des trésors (2 unsigned char par bombe)

   L'application de jeu prend en arguments le mode (nouvelle partie ou continuer une partie) et un fichier de partie. Si c'est une nouvelle partie, le fichier est créé. Sinon, le fichier est simplement ouvert. L'utilisateur peut ensuite cliquer à l'endroit où il le souhaite. Il peut arrêter et relancer l'application quand il le souhaite, la progression étant conservée dans le fichier de partie. Lorsque l'utilisateur clique sur une case, le fichier est modifié immédiatement (et uniquement les données nécessaires). Le fichier ne doit jamais être chargé intégralement : les données sont lues au fur-et-à-mesure dans le fichier.

   Le fichier de partie contient :

  • largeur (unsigned char) et hauteur (unsigned char) de la grille
  • cases (ligne par ligne, un unsigned char par case) dont les valeurs sont :
    • 0 à 9 si découvert (ce qui est égal au nombre de bombes autour)
    • 10 si c'est une case vide non découverte
    • 11 pour une mine (non découverte !)
    • 12 pour un trésor non découvert
  • nom du fichier contenant la carte (unsigned char pour la taille et un char par caractère)
  • score (unsigned int)
  • nombre de coups joués (unsigned int) et liste des coups joués (deux unsigned char par coup)
 

Cette application sera complétée et terminée lors du prochain TP. Il s'agit du premier mini-projet.

Outils


Version de cette page Vendredi 26 Janvier 2018

© Cyril Rabat 2016

Connexion

Mot de passe perdu

Dernières nouvelles

Aucune pour le moment

Contact

Courriel :
cyril.rabat [at] univ-reims.fr

Téléphone :
+33-326-91-33-81

Fax :
+33-326-91-33-97

Facebook :
lien Facebook direct