Le jeu du pendu en Python


Accueil > Projets > Le jeu du pendu en Python

Par Cartoux A., Metais R. en novembre 2019

Ce projet a été réalisé par des élèves en spécialité NSI du Lycée Louis Pasteur. Ils sont également les auteurs de ce compte rendu. Pour en savoir plus : Les projets en spécialité NSI

Introduction

Dans cet article, nous allons analyser ensemble un jeu du Pendu, fait en Python. Contrairement aux apparences, ce programme peut être très dur a réaliser, surtout pour les non-initiés.

Mais heureusement, les maîtres de Python Robin et Axel sont la pour vous éclairer ;-)

Tout d’abord, qu’est ce qu’on attend d’un jeu du Pendu, en Python :
- L’ordinateur choisit un mot au hasard dans une liste, un mot de huit lettres maximum. - Le joueur tente de trouver les lettres composant le mot.
- À chaque coup, il saisit une lettre.
- Si la lettre figure dans le mot, l’ordinateur affiche le mot avec les lettres déjà trouvées. -Celles qui ne le sont pas encore sont remplacées par des barres (_).
- Le joueur a 6 chances. Au delà, il a perdu.

Commençons a éplucher ce code :

Le début du code

  1.  print("Bienvenue dans le jeu du Pendu")
  2. play=int(input("Tape 1 si tu veux jouer ! \n "))
  3. if play == 1 :  
  4.     prénom=input("Quel est ton nom ?")
  5.     print("\n")
  6.     print("Salut", prénom)
  7.     import random
  8.     liste_mots=["laitue", "hareng", "jambon", "pharynx", "phoque", "langue",
  9.                 "stylo","agent","fromage","whisky","billet","boyaux",
  10.                 "laser","joystick","crane","joyeux","cahier","camping","argent",
  11.                 "rivage","physique",]

Télécharger

Dans cette première partie de code, il ne faut SURTOUT pas oublier le "import random", car on utilise beaucoup d’aléatoire dans ce petit jeu.
Sinon, par grand chose d’important a relever, a part la liste de mot que le jeu va utiliser pour le jeu.
Passons a la prochaine portion :

- 

  1.  score = 0
  2.     print("Tu as 6 vies")
  3.     print("\n")
  4.     vie = 6

Télécharger

La non plus, c’est pas super intéressant....
On définit juste les variables des vies et du score

  1.  while play == 1 :
  2.         vie = 6
  3.         mot=(liste_mots[random.randint(0,21)])
  4.         longueur=len(mot)
  5.         barre=["_ "]
  6.         barre=barre*longueur
  7.         grandeur=longueur

Télécharger

Attention : Ça se corse...
Avec la ligne "mot=(liste_mots[random.randint(0,21)])", le programme choisi un mot au hasard dans la liste de mots du début.

Dans le jeu du Pendu, les lettres qui n’ont pas été trouvés sont remplacées par des barres (_), et c’est ce qu’on règle cette portion :
"longueur=len(mot)" calcule le nombre de lettres du mot choisi, puis "barre=barre*longueur" affiche le nombre de "_" en fonction du nombre de lettres.
On l’affiche sous forme de liste, car ce sera beaucoup plus facile pour la suite du programme.
La variable "grandeur" est la même que "longueur", sauf que "grandeur" va (aussi) servir pour la suite du programme

La suite :

Le jeu

  1.   while vie!=0 and grandeur!=0 :
  2.             lettre_choisi = input("Choisi une lettre  ")
  3.             print("\n")
  4.             if lettre_choisi in mot :
  5.                 print("Bravo!")
  6.                 if lettre_choisi in barre:
  7.                     print ("Tu l'as déja dit !")
  8.                     resultat = ' '.join(barre)
  9.                     print(resultat)
  10.                 else:
  11.                     position=int(mot.index(lettre_choisi))
  12.                     barre.pop(position)
  13.                     barre.insert(position,lettre_choisi)
  14.                     resultat = ' '.join(barre)
  15.                     print(resultat)
  16.                     grandeur=grandeur-1

Télécharger

Tiens tiens, on retrouve "grandeur" !
En fait, grandeur sert a dire au programme quand le joueur a trouvé toute les lettres, car si le mot fait par exemple 7 lettres, on pourra logiquement trouver la bonne lettre 7 fois.
Ensuite, le programme nous demande de choisir une lettre (désolé pour la faute d’orthographe "lettre_choisi" ), et si la lettre est dans le mot,alors le programme continue.

Voila la principale difficulté du programme :L’affichage du mot
En effet, il faut afficher le mot avec toutes les lettres qu’on a trouvées.
Tout d’abord, on repére la position de la lettre trouvée avec "position=int(mot.index(lettre_choisi))", puis on insère la lettre choisie dans la liste "barre" (_ _ _ _ _ _ _) a la bonne position. On supprime aussi une (_) pour que le mot reste a la bonne longueur avec "barre.pop(position)".
Enfin, on transforme la liste en chaîne de caractère pour que l’affichage soit plus clair, pour finir dans la variable "résultat"

Avant de continuer, je voudrai vous montrer ce qui se passe si on met une lettre qu’on a déjà mise :
C’est exactement comme auparavant, sauf que grandeur ne diminue pas, et qu’il n’y a pas besoin d’afficher une lettre de plus, car elle a déjà été affichée

Trouver toutes ces formules m’ont causé BEAUCOUP de problèmes, donc j’espère que ce sera clair pour vous.

Sinon, si la lettre choisie n’est pas dans le mot, alors :

  1.  
  2.             else:
  3.                 print("Raté")
  4.                 if grandeur==longueur :
  5.                     print(longueur*"_ ")
  6.                 else:
  7.                     print (resultat)
  8.                 vie=vie-1
  9.                 print("Il te reste",vie,"vies")
  10.                 print("\n")

Télécharger

Sur cette partie, si le joueur se trompe des la première lettre, le programme ne peut pas afficher la variable "résultat", car elle n’existe pas encore. Le programme affiche donc seulement le mot sous forme de barre (_). Dans tout les cas, une vie est retirée.

La fin du jeu

  1.    if vie==0 :
  2.             print("Tu as perdu")
  3.         elif grandeur==0 :
  4.             print("Bravo ! Tu as trouvé le mot !")
  5.             score=score+5
  6.             print("Tu a gagné 5 points !")
  7.         replay=int(input("Tape 1 pour rejouer, et sur 2 si tu veux quitter le jeu   "))
  8.         if replay != 1 :
  9.             break
  10.     print(prénom,"vous avez un score de ",score)

Télécharger

Evidemment, si vos vies tombent à 0, vous perdez.
Si vous gagnez, vous gagnez 5 points. A 50 points vous avez une surprise....
Vous pouvez rejouer en tapant 1, et vous quittez le programme en tapant 2

Voila, j’espère vous avoir aidés a comprendre ce petit programme !
N’hésitez pas a le personnaliser, avec vos propres fonctions, ou avec quelques easters eggs sympathiques !

Le code entier est téléchargeable en bas de la page !

pendu_test.py.zip (ZIP - 1.1 ko)
pendu_test.py.zip

Mots-clés