Première - TP - Jeu du pendu

Pré-requis

Objectifs

Le but de ce TP est de créer un jeu du Pendu en console Python, sans interface graphique.

Rappelons rapidement le principe de base du Pendu : le but est de découvrir un mot dont on connaît le nombre de lettres, ces dernières étant masquées au début du jeu. On dispose d’un nombre maximum d’essais.

À chaque tour, le joueur propose une lettre. Si cette lettre est dans le mot, elle est découverte, autant de fois qu'elle apparaît dans le mot. Si la lettre n’apparaît pas dans le mot cherché ou qu’elle est déjà découverte, on diminue le nombre d’essais restants

Exemple

#### Jeu du Pendu ####

Mot : ************
Proposez une lettre (5 essais) : A
Le mot contient la lettre A.

Mot : ******A*****
Proposez une lettre (5 essais) : I
Le mot contient 2 lettres I.

Mot : I*****A*I***
Proposez une lettre (5 essais) : D
Le mot ne contient pas la lettre D.
Il vous reste 4 essais.

Mot : I*****A*I***
Proposez une lettre (4 essais) : E
Le mot contient la lettre E.

Mot : I*****A*I**E
Proposez une lettre (4 essais) : I
Vous avez déjà proposé la lettre I...
Il vous reste 3 essais.

Mot : I*****A*I**E
Proposez une lettre (3 essais) :
............

Le jeu se termine de deux manières :

# Victoire du joueur

Mot : INFORMATIQ*E
Proposez une lettre (3 essais) : Q
Le mot contient la lettre Q
Le mot est INFORMATIQUE
BRAVO
# Défaite du joueur

Mot : I*F***A*I**E
Proposez une lettre (1 essai) : Z
Le mot ne contient pas la lettre Z
Le mot cherché est INFORMATIQUE
PERDU

Structure du programme

Pour ne pas rajouter de difficultés supplémentaires, ce jeu se jouera dans la console Python. Libre à vous de développer une interface graphique (avec un module comme pygame) mais ce n’est pas le but premier de ce TP.

Pour que notre programme soit clair, nous allons le séparer en deux fichiers :

Contenu de pendu.py

Avant de coder la boucle de jeu principale, on se propose de coder toutes les fonctions auxillaires dont nous aurons besoin dans notre programme.

Choix d'un mot au hasard

Écrire une fonction choisirMot(liste) qui renvoie un mot sélectionné aléatoirement dans liste. Le mot retourné doit être en majuscules. On s’aidera du module random pour coder cette fonction.

>>> listeMots = ["BANANE", "pomme", "Poire", "Fraise", "ABRICOT", "peche"]
>>> choisirMot(listeMots)
’POMME’
>>> choisirMot(listeMots)
’ABRICOT’
Masquer les lettres d'un mot

Écrire une fonction masquer(mot) qui renvoie une chaîne de caractères composée d’autant d’étoiles * qu’il y a de lettres dans mot.

>>> masquer("BANANE")
’******’
>>> masquer("PECHE")
’*****’
Indices d'une lettre

Écrire une fonction indicesLettre(lettre, mot) qui retourne la liste des indices de lettre dans mot.

>>> indicesLettre("A", "BANANE")
[1,3]
>>> indicesLettre("E", "FRAISE")
[5]
>>> indicesLettre("I", "PECHE")
[]
Découverte de lettres

Écrire une fonction decouvrir(lettre, motMasque, mot) qui découvre les * de motMasque correspondantes à lettre dans mot, et renvoie motMasque ainsi modifié.

>>> decouvrir("A", "******", "BANANE")
’*A*A**’
>>> decouvrir("E", "P**R*", "POIRE")
’P**RE’
>>> decouvrir("C", "PO***", "POMME")
’PO***’
On ne manquera pas d’utiliser la fonction indicesLettre définie précédemment.

Contenu de main.py

Voici un code de base à compléter pour créer votre jeu.

from pendu import *

listeMots = ["ORDINATEUR", "INFORMATIQUE", "TELEPHONE", "BANANIER", "CITRONNIER", "PANGOLIN"]
nombreEssaisRetants = 5
continuer = True

mot = choisirMot(listeMot)
motMasque = masquer(mot)

while continuer:
    # Instructions de jeu

    print(f"Mot : {motMasque}")
    lettre = input("Proposez une lettre : ")

    if lettre in mot:
        print(f"La lettre {lettre} est dans le mot !")

    # Mise à jour du booléen continuer
    continuer = True
À vous de jouer !

Coder le jeu du pendu. Proposez des améliorations et mettez-les en place dans votre programme.