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)
char mot_a_trouver[] = "ENCORE";
char mot_decouvert[] = "******";
Lorsque votre code marchera avec ce mot, vous pourrez mettre n'importe quel mot en faisant cela :
char mot_a_trouver[100];
char mot_decouvert [100];
// ...
strcpy(mot_a_trouver, "ESSAYER");
La taille maximale des tableaux doit être fixée à la compilation.
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.
printf("%s\n", cartoon[0]);
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)); // 0, c'est-a-dire faux
c ='a';
printf("%d", isalpha(c)); // pas 0
c ='Z';
printf("%d", isalpha(c)); // pas 0
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
- Faire une fonction qui permet de choisir un mot au hasard dans un dictionnaire/fichier (voir le TP suivant)
- 1
- 2
- 3
- 4
- 5