Le jeu du pendu en Python
Par
, en novembre 2019Ce 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
- print("Bienvenue dans le jeu du Pendu")
- play=int(input("Tape 1 si tu veux jouer ! \n "))
- if play == 1 :
- prénom=input("Quel est ton nom ?")
- print("\n")
- print("Salut", prénom)
- import random
- liste_mots=["laitue", "hareng", "jambon", "pharynx", "phoque", "langue",
- "stylo","agent","fromage","whisky","billet","boyaux",
- "laser","joystick","crane","joyeux","cahier","camping","argent",
- "rivage","physique",]
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 :
- score = 0
- print("Tu as 6 vies")
- print("\n")
- vie = 6
La non plus, c’est pas super intéressant....
On définit juste les variables des vies et du score
- while play == 1 :
- vie = 6
- mot=(liste_mots[random.randint(0,21)])
- longueur=len(mot)
- barre=["_ "]
- barre=barre*longueur
- grandeur=longueur
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
- while vie!=0 and grandeur!=0 :
- lettre_choisi = input("Choisi une lettre ")
- print("\n")
- if lettre_choisi in mot :
- print("Bravo!")
- if lettre_choisi in barre:
- print ("Tu l'as déja dit !")
- resultat = ' '.join(barre)
- print(resultat)
- else:
- position=int(mot.index(lettre_choisi))
- barre.pop(position)
- barre.insert(position,lettre_choisi)
- resultat = ' '.join(barre)
- print(resultat)
- grandeur=grandeur-1
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 :
- else:
- print("Raté")
- if grandeur==longueur :
- print(longueur*"_ ")
- else:
- print (resultat)
- vie=vie-1
- print("Il te reste",vie,"vies")
- print("\n")
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
- if vie==0 :
- print("Tu as perdu")
- elif grandeur==0 :
- print("Bravo ! Tu as trouvé le mot !")
- score=score+5
- print("Tu a gagné 5 points !")
- replay=int(input("Tape 1 pour rejouer, et sur 2 si tu veux quitter le jeu "))
- if replay != 1 :
- break
- print(prénom,"vous avez un score de ",score)
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 !