Explication d'un jeu de pendu

Nous avons réalisé un pendu que nous allons vous expliquer partie par partie.

  La première boucle sert à proposer au joueur de rejouer comme dans l’exercice vu précédemment. Ensuite nous initialisons toutes les variables pour que quand l’utilisateur rejoue tout soit remis à l’état initial (nombre de vies etc..).

Voici les variables utilisées :

 

- NB : nombre de mots qu’il y a dans le tableau (taille du tableau).

- dico : tableau de taille NB qui contient les mots entrés en valeurs. Pour déclarer un tableau il suffit de dire “est un tableau de [1..taille] de chaînes”.

- mot : le mot pris aléatoirement sera stocké ici.

- lettresT : c’est ce qui est affiché à l’écran au fur et à mesure que les lettres sont trouvées.(au départ, ce sera des tirets, puis ceux-ci seront remplacés par les lettres trouvées.).

- nbAleat : c’est un nombre aléatoire compris entre 1 et NB.

- lettre : c’est la lettre saisie par l’utilisateur.

- vies : le nombre de vies restantes.

- i et j : il s’agit de compteurs utilisés pour les boucles.

- gagner : c’est une valeur booléenne (soit vraie soit fausse), qui permet de savoir si la partie est gagnée ou non.

- run : c’est la variable de la boucle principale. Quand elle est fausse, le jeu s’arrête et on propose au joueur de rejouer.

- nbTrouver : Il s’agit du nombre de lettres trouvées.

- nbTrouverB : Il s’agit du nombre de lettres trouvées au tour précédant pour tester si le joueur a trouvé une lettre, et lui enlever une vie sinon.

- saisie : ce tableau regroupe les mauvaises lettres déjà saisies.

- rejouer : cette variable enregistre la réponse de l’utilisateur pour savoir s’il veut jouer ou non.

Grâce à la fonction Aléatoire, nous prenons un mot dans le tableau “dico” et le plaçons dans la variable “mot”. Ensuite, nous le mettons dans “lettresT” et remplaçons chaque lettre par un tiret.

Nous affichons le mot à trouver avant de débuter la partie ( sous forme de tirets) et débutons la boucle principale. Au début on demande à l’utilisateur de saisir une lettre. S’il en saisit plusieurs, on les conserve toutes (car la variable est de type “chaîne” et non “caractère”) mais on verra par la suite comment ne prendre en compte que la première.

On crée une boucle (sans oublier d’initialiser le i à 0) qui se répète autant de fois qu’il y a de lettres dans le mot. On obtient la taille du mot grâce à la fonction longueur(mot). Comme vous pouvez le voir, si la lettre est dans le mot, on vérifie qu’elle n’a pas déjà été trouvée en regardant s’il y a toujours un tiret à la place de cette lettre. Pour accéder à la i-ème lettre, il faut faire lettresT[i]. C’est pour cela que pour avoir uniquement la première lettre saisie, nous utilisons lettre[0] (les lettres ne sont pas numérotées à partir de 1, mais de 0).

Si une bonne lettre est trouvée (et qu’elle n’a pas encore été trouvée), on remplace le tiret en place par cette même lettre dans la variable lettresT et on ajoute 1 au nombre de lettres trouvées (nbTrouver).

Il ne faut pas oublier d’incrémenter (+1) le compteur i.

On teste si le nombre de lettres est le même qu’au tour précédant. Si c’est le cas, cela signifie qu’aucune lettre n’a été trouvée et donc on enlève une vie. Il ne faut pas oublier d’ajouter la lettre saisie aux erreurs (répertoriées dans le tableau saisie). On incrémente le compteur j pour avancer d’une case dans le tableau d’erreurs (pour que la prochaine erreur soit mise une case plus loin).

Cette phase concerne l’affichage des informations. Il faut d’abord afficher les lettres trouvées et celles restantes (sous forme de tiret) et le nombre de vies. On teste si une erreur a déjà été faite, auquel cas on les affiche en faisant dérouler le tableau à l’aide du compteur i.

 

 

On teste si le nombre de lettres trouvées est égal à la longueur du mot. Si c’est le cas, cela veut dire que le joueur a gagné, auquel cas on affiche “BRAVO” et on met la valeur Vraie dans “gagner” et Faux dans “run” pour que la boucle principale prenne fin (la partie s’arrête). Sinon, on teste si le nombre de vie est inférieur ou égal à 0, auquel cas on affiche “PERDU” et la solution (on procède aussi au changement de “run” pour que la partie s’arrête aussi). Peu importe le nombre de vie, si le joueur n’a pas gagné, la valeur Faux est mise dans “gagner”. On met la valeur ”nbTrouver” dans “nbTrouverB” pour le tour suivant.

 

Enfin, on propose au joueur de rejouer. Il répond soit oui, soit non. Mais nous ne prenons en compte que la première lettre ! La boucle rejouer continue seulement si la première lettre est “o” ; c’est-à-dire que si l’utilisateur rentre n’importe quel autre caractère, le jeu s’arrête définitivement.

La boucle qui suit sert à faire une série de retours à la ligne grâce à la commande Afficher( CRLF). Au lieu de mettre 20 fois cette commande dans 20 symboles différents (long et fastidieux), il n’y en a que 4. Cette boucle peut être ensuite réutilisée, il suffira seulement de changer le nombre 20.