jeu du pendu

Le problème exposé dans ce sujet a été résolu.

Bonjour, je n'arrive pas à repérer un problème ou détecter un bug, si quelqu'un pourrait m'indiquer comment m'en sortir svp. Chaque fois que le joueur devine une lettre, nombre_essai doit s'incrémenter de 1 dans la fonction deviner() Mais ça ne change pas. Aussi, le jeu n'est pas terminé, je n'ai pas implanté les essai_raté qui permettent d'afficher le tableau du pendu suivant à chaque fois que l'on se trompe, mais j'imagine que j'aurais le même problème.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# -*- coding:Utf-8 -*-
#jeu du pendu

import random, sys

TABLEAU = [
'  +---+   \n  |   |   \n      |   \n      |   \n      |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n      |   \n      |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n  |   |   \n      |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n /|   |   \n      |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n /|\\  |   \n      |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n /|\\  |   \n /    |   \n      |   \n========= \n',
'  +---+   \n  |   |   \n  0   |   \n /|\\  |   \n / \\  |   \n      |   \n========= \n'
]

BANQUE = ['voiture', 'deux', 'coucou', 'cheval', 'banane', 'pompier']

def choix_mot():
    x = random.randint(0, len(BANQUE)-1)
    mot = BANQUE[x]
    return mot

def cacher_mot(mot_choisi):
    mot_caché = " _" * len(mot_choisi)
    return mot_caché

def dessiner_tableau(essai): #vérifie le nombre d'essais et dessine le tableau en fonction
    print(TABLEAU[essai])

def afficher_mot(mot_cherché, mot_caché, lettres_trouvé):
    mot_caché = ""
    for i in mot_cherché:
        if i in lettres_trouvé:
            mot_caché += i
        else:
            mot_caché += ' _'
    return print(mot_caché)

def deviner(nombre_essai, nombre_essai_max, mot_cherché, mot_caché, lettres_trouvé):
    essai = input("Essayez de deviner le mot secret, ou une lettre:\n>>>").lower()
    for i in mot_cherché:
        if essai == ":q" or essai == ":quit":
            sys.exit()
        elif len(essai) == 1 and essai == i:
            print("la lettre", essai, "est correcte !")
            print("elle se trouve en position :")
            lettres_trouvé.append(essai)
            nombre_essai += 1
            break
        elif len(essai) == 1 and essai != i:
            print("la lettre", essai, "n'est pas dans le mot secret!")
            nombre_essai += 1
            break
        elif len(essai) > 1 and essai == mot_cherché:
            print("ok")
            vérif_victoire(nombre_essai, nombre_essai_max, mot_cherché, mot_caché)
            break
        elif len(essai) > 1 and essai != mot_cherché:
            print("Ce n'est pas le bon mot!")
            nombre_essai += 1
            break

def vérif_victoire(nombre_essai, nombre_essai_max, mot_cherché, mot_caché):
    if nombre_essai <= nombre_essai_max and mot_cherché == mot_caché:
        print("BRAVO !")
        sys.exit()
    elif nombre_essai == nombre_essai_max and mot_cherché != mot_caché:
        print("PERDU !")
        sys.exit()

def jeu():
    nombre_essai_max = 6
    nombre_essai = 0
    essai_raté = 0
    lettres_trouvé = []

    mot_cherché = choix_mot()
    mot_caché = cacher_mot(mot_cherché)
    #print("mot cherché", mot_cherché, "mot_caché", mot_caché) vérification debug

    while nombre_essai <= nombre_essai_max:
        print("essai n°", nombre_essai)
        dessiner_tableau(essai_raté)
        afficher_mot(mot_cherché, mot_caché, lettres_trouvé)
        deviner(nombre_essai, nombre_essai_max, mot_cherché, mot_caché, lettres_trouvé) #joueur propose une lettre ou un mot
        vérif_victoire(nombre_essai, nombre_essai_max, mot_cherché, mot_caché) #vérifie si le jouer à trouver juste avant la fin des essais

def menu():
    print("Jeu du pendu")
    print("Deviner un mot avant que le nombre d'essais soit passé")
    réponse = input("Commencer une partie ?\n>>>").lower()

    if réponse == "oui" or réponse == "o":
        jeu()
    #else:
        #print("Ajouter un mot dans la banque ?")

menu()

dans ta fonction deviner nb_essai est une variable locale. de ce fait, elle étiquette une valeur qui est totalement différente de la valeur étiquetée dans la fonction jeu()

ce que je te propose de faire, c'est de faire un return nb_essai + 1 à la place du break.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte