~ / teaching / Python / tps / 2-hangman /

TP2 - Le pendu

© 2010—2012 - Renaud Blanch

Le but de ce TP est de vous familiariser avec les entrés/sorties et avec quelques modules de base de la bibliothèque standard de Python.

Vous allez réaliser un jeu de pendu. Le programme choisira un mot au hasard dans une liste. Il demandera au joueur d'entrer une lettre jusqu'à ce que le mot soit deviné (victoire), ou bien qu'il ait épuisé son crédit d'erreurs (i.e., que le pendu soit dessiné complètement).

Entrées

Réalisez une fonction read_words qui charge un fichier texte dans lequel il y a un mot par ligne et retourne une liste de ces mots. Faites en sorte que par défaut cette fonction utilise le vocabulaire contenu dans le fichier animals.txt.

Réalisez une fonction get_letter qui demande à l'utilisateur d'entrer un caractère en vérifiant : (1) qu'il s'agit bien d'une lettre (ASCII minuscule pour simplifier) ; et (2) qu'elle n'a pas déjà été entrée.

Pour savoir si la lettre a déjà été entrée, get_letter prend en argument la liste des lettres déjà choisies.

>>> get_letter(["a", "b"])
letter? a
letter? î
letter? c
'c'

Affichage

Réalisez une fonction draw_hangman qui, suivant le nombre d'erreurs passé en paramètre retourne le pendu correspondant en ASCII art, par exemple comme illustré ci-dessous.

>>> print(draw_hangman(6))
______
|/  | 
|   O 
|  /M\
|   W 
|  / \
|     

Réalisez une fonction hidde_letters qui prend en paramètres un mot et une liste de lettres déjà choisie par le joueur et qui retourne le mot avec les lettres encore non choisies remplacées par un tiret "-".

>>> print(*hidde_letters("titi", ["i", "o"]))
- i - i

Boucle de jeu

Assemblez les fonctions créées ci-dessous pour permettre de jouer au pendu. Faites en sorte qu'à la fin d'une partie le joueur puisse choisir de rejouer ou de quitter le jeu.

% python3 hangman.py
______
|/  | 
|
|
|
|
|       ---- ()

letter? e

______
|/  | 
|   O
|
|
|
|       ---- (e)

letter? a

______
|/  | 
|   O
|
|
|
|       --a- (ea)

letter? t

______
|/  | 
|   O
|
|
|
|       --at (eat)

letter? c 

______
|/  | 
|   O
|
|
|
|       c-at (eatc)

letter? h

______
|/  | 
|   O
|
|
|
|       chat (eatch)

YOU WIN!
play again [Y/n]? n
bye!

Faites en sorte que votre programme puisse prendre en paramètre sur la ligne de commande le nom du fichier servant de lexique au jeu. Si ce paramètre n'est pas donné, utilisez animals.txt comme valeur par défaut.

mise à jour : 7 septembre 2017