Copy of https://perso.isima.fr/loic/unixc/tpcinit-04.php
tete du loic

 Loïc YON [KIUX]

  • Enseignant-chercheur
  • Référent Formation Continue
  • Responsable des contrats pros ingénieur
  • Référent entrepreneuriat
  • Responsable de la filière F2 ingénieur
  • Secouriste Sauveteur du Travail
mail
loic.yon@isima.fr
phone
(+33 / 0) 4 73 40 50 42
location_on
Institut d'informatique ISIMA
  • twitter
  • linkedin
  • viadeo

[IniC] TP 4 : jeu mystère

 Cette page commence à dater. Son contenu n'est peut-être plus à jour. Contactez-moi si c'est le cas!

Date de première publication : 2017/09/17

Si vous n'avez pas fait les exercices avec Fibonnaci et sur les chaînes de caractères, faites-les.

Ceci est le premier jeu à coder avec des chaînes de caractères. Vous pourrez ensuite faire le MOTUS

Voici le jeu que vous allez coder, il s'agit du ...

/*
       /-----
       |    |
       |    O
       |   /|\
       |   /|
    ___|___
*/

Moteur de jeu

Le principe du jeu est très simple. Il faut deviner un mot lettre par lettre. À chaque fois qu'une proposition de lettre est fausse, un morceau de gibet apparait. Il faut deviner le mot avant l'apparition complète de la potence.

Je vous propose d'utiliser deux variables de type chaine de caractères : une pour stocker le mot à trouver (vous le fixerez à la compilation dans un premier temps), l'autre, de même taille pour mémoriser les lettres déjà découvertes (que des étoiles au départ)

  mot_a_trouver[] = "ENCORE";
  mot_decouvert[] = "******";

Dans un premier temps, vous pouvez initialiser mot_decouvert, mais le mieux est quand même de faire une fonction qui le crée en fonction du mot de départ :

void cacher(char mot_a_trouver[], char mot_avec_etoiles[]);
"ETOILE" --> "******"
"GAGNE"  --> "*****"

Vous pouvez remarquer que le paramètre mot_avec_etoiles est ce que l'on appelle un paramètre d'entrée/ sortie. Tous les tableaux le sont en C.

Voici un tableau de caractères pour les différents états du jeu (10) :

char cartoon [10][70] = {
  "\n\n\n\n\n\n_______\n",
  "\n   |\n   |\n   |\n   |\n   |\n___|___\n",
  "\n   /-----\n   |\n   |\n   |\n   |\n___|___\n",
  "\n   /-----\n   |    |\n   |\n   |\n   |\n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |\n   |\n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |    |\n   |   \n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |   /|\n   |\n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |   /|\\\n   |\n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |   /|\\\n   |   /\n___|___\n",
  "\n   /-----\n   |    |\n   |    O\n   |   /|\\\n   |   /|\n___|___\n"
};

cartoon[0]est le pied de la potence. cartoon[9]est la potence complète, pendu inclus.

Utiliser des fonctions qui existent déjà

La fonction isalpha() permet de savoir si le caractère fourni en paramètre est une lettre.

char c;
c ='1';
printf("%d", isalpha(c));
c ='a';
printf("%d", isalpha(c));
c ='Z';
printf("%d", isalpha(c));

Vous pourrez par exemple arrêter le jeu si l'utilisateur ne saisit pas une lettre.

Pour ne pas avoir une erreur d'utilisation de fonction implicite, il vous faudra trouver l'entête correct pour la fonction isalpha(). Vous pouvez également essayer tous les entêtes que vous connaissez :-), sinon tapez

man 3 isalpha

La fonction toupper() permet de transformer une lettre minuscule en majuscule (cele ne pose pas de problème si la lettre est déjà une majuscule).

printf("%c", toupper('c'));
printf("%c", toupper('A'));
printf("%c", toupper('3'));

Élargir la base de jeu