Python - Ahorcado, variable

 
Vista:
sin imagen de perfil

Ahorcado, variable

Publicado por Rafa (1 intervención) el 02/03/2021 01:16:18
Hola buenas noches, tengo una pequeña duda, estoy creando un ahorcado, con la biblioteca tkinter python3, mi duda es como podría realizar una variable en el Label, de 7 vidas, que cuando falle en un intento, me reste las vidas, y así cuando acierte me de nuevamente el acierto, a ver si pueden ayudarme, muchas gracias

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
from tkinter import *
from random import randint
import random
from tkinter.messagebox import *
 
letrasUsadas=[]
 
vidas= 7
 
 
 
 
 
 
 
def probarLetraFuncion():
    global vidas
    letrasUsadas.append(letraObtenida.get())
    print(letrasUsadas)
    if letraObtenida.get() in palabra:
        if palabra.count(letraObtenida.get())>0:
          #  letrasAcertadas+=palabra.count(letraObtenida.get())  #
            for i in range(len(palabra)):
                if palabra[i]==letraObtenida.get():
                    guiones[i].config(text=""+letraObtenida.get())
            else:
                guiones[palabra.index(letraObtenida.get())].config(text=""+letraObtenida.get())
    else:
        vidas-=1
        if vidas==0:
            showwarning(title="Derrota",message="Se te acabaron las vidas")
 
 
raiz = Tk()
 
archivo = open("palabras.txt","r")
conjuntoPalabras= list(archivo.read().split("\n"))
palabra = conjuntoPalabras[random.randint(0,len(conjuntoPalabras)-1)].lower()
letraObtenida=StringVar()
 
 
raiz.config(width=1000, height = 600, bg="blue",relief = "groove",bd=10)
juegoFrame = Frame(raiz)
juegoFrame.config (width=1000, height = 600,relief = "sunken",bd=15)
juegoFrame.grid_propagate(False)
 
juegoFrame.pack()
 
Label(juegoFrame,text= "Introduce una letra", font=("Verdana", 24), #Cartel en Pantalla.
    ).grid(row=0, column=0,padx=10,pady=10)
letra= Entry(juegoFrame,width=1,font=("Verdana", 24),textvariable=letraObtenida
             ). grid(row=0, column=1,padx=10,pady=10)
probarLetra = Button(juegoFrame,text="Probar",bg="yellow",command=probarLetraFuncion
                     ).grid(row=1,column=0,pady=10)
 
guiones = [Label(juegoFrame,text="_",font=("verdana",30)) for  _ in palabra ]
 
 
 
 
inicialX=200
for i in range(len(palabra)):
    guiones[i].place(x=inicialX,y=400)
    inicialX+=50
 
 
 
 
Label(juegoFrame,text= " 7 vidas.", font=("Verdana", 24), #DUDA ACA
    ).grid(row=0, column=80,padx=10,pady=10)
 
 
 
 
 
raiz.mainloop()
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ahorcado, variable

Publicado por tincopasan (1082 intervenciones) el 02/03/2021 07:03:55
la verdad es que hace años que trabajo con clases y ya olvidé como se hace sin ellas, así que modifiqué un poco tu código:
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
#-*- coding: utf -8 -*-
import tkinter as tk # la otra forma no es recomendada para importar
from tkinter import messagebox
import random
 
 
class ahorcado():
    def __init__(self):
        self.letrasUsadas=[]
        self.raiz = tk.Tk()
        self.raiz.config(width=1000, height = 600, bg="blue",relief = "groove",bd=10)
 
        self.juegoFrame = tk.Frame(self.raiz)
        self.juegoFrame.config (width=1000, height = 600,relief = "sunken",bd=15)
        self.juegoFrame.grid_propagate(False)
        self.juegoFrame.pack()
        self.lbl1 = tk.Label(self.juegoFrame,text= "Introduce una letra", font=("Verdana", 24),).grid(row=0, column=0,padx=10,pady=10)
        self.letraObtenida=tk.StringVar()
        self.letra= tk.Entry(self.juegoFrame,width=1,font=("Verdana", 24),textvariable=self.letraObtenida)
        self.letra. grid(row=0, column=1,padx=10,pady=10)
        self.letraObtenida.trace("w", lambda *args: self.limitador(self.letraObtenida))
 
        self.letra.focus()
        self.probarLetra = tk.Button(self.juegoFrame,text="Probar",bg="yellow",command=self.probarLetraFuncion).grid(row=1,column=0,pady=10)
        self.palabra = self.lee_archivo()
        self.guiones = [tk.Label(self.juegoFrame,text="_",font=("verdana",30)) for  _ in self.palabra ]
        inicialX=200
        for i in range(len(self.palabra)):
            self.guiones[i].place(x=inicialX,y=400)
            inicialX+=50
        self.vidas = 7
        self.lbl2=tk.Label(self.juegoFrame,text= f"{self.vidas} vidas.", font=("Verdana", 24),)
        self.lbl2.grid(row=0, column=80,padx=10,pady=10)
 
 
        self.raiz.mainloop()
 
 
    def lee_archivo(self):
        archivo = open("palabras.txt")
        conjuntoPalabras= list(archivo.read().split("\n"))
        palabra = conjuntoPalabras[random.randint(0,len(conjuntoPalabras)-1)].lower()
        archivo.close()
        return palabra
 
    def probarLetraFuncion(self):
 
        self.letrasUsadas.append(self.letraObtenida.get())
        print(self.letrasUsadas)
        if self.letraObtenida.get() in self.palabra:
            if self.palabra.count(self.letraObtenida.get())>0:
                for i in range(len(self.palabra)):
                    if self.palabra[i]==self.letraObtenida.get():
                        self.guiones[i].config(text=""+self.letraObtenida.get())
                else:
                    self.guiones[self.palabra.index(self.letraObtenida.get())].config(text=""+self.letraObtenida.get())
        else:
            self.vidas-=1
            self.lbl2.configure(text=f"{self.vidas} vidas.")
            if self.vidas==0:
                messagebox.showwarning(title="Derrota",message="Se te acabaron las vidas")
        self.letra.delete(0,1)
 
    def limitador(self,entrada):
        if len(entrada.get()) > 0:
            entrada.set(entrada.get()[:1])
 
juego=ahorcado()

lo que si, le hice unos agregados para que veas como se puede ir mejorando:
entry de letras:
1) tiene el foco
2) admite solo una letra
3) se limpia después de la comprobación

y por supuesto se actualizan las vidas

tiene muchas cosas que faltan pero está funcional en la línea de tu código.

Perdón sino te sirve por usar clases, pero como dije me cuesta hacerlo sin ellas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ahorcado, variable

Publicado por Rafa (1 intervención) el 03/03/2021 03:56:45
Muchas gracias por responder, probé el código y funciona, y no abría una forma de hacerlo mas sencillo al funcionamiento de la actualización de las vidas, mediante una variable, sin modificar mucho mi programa? de verdad muchas gracias por tomarte el tiempo de ayudarme.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 2.808
Oro
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Ahorcado, variable

Publicado por tincopasan (1082 intervenciones) el 04/03/2021 04:19:21
viendo y considerando que no te interesa aprender solo que ese código funcione en algo:
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
#-*- coding: utf -8 -*-
from tkinter import *
import random
from tkinter.messagebox import *
letrasUsadas=[]
vidas= 7
 
def probarLetraFuncion():
    global vidas
    letrasUsadas.append(letraObtenida.get())
    print(letrasUsadas)
    if letraObtenida.get() in palabra:
        if palabra.count(letraObtenida.get())>0:
            for i in range(len(palabra)):
                if palabra[i]==letraObtenida.get():
                    guiones[i].config(text=""+letraObtenida.get())
            else:
                guiones[palabra.index(letraObtenida.get())].config(text=""+letraObtenida.get())
    else:
        vidas-=1
        lbl1.config(text=f"{vidas} vidas.")
        if vidas==0:
            showwarning(title="Derrota",message="Se te acabaron las vidas")
 
raiz = Tk()
 
archivo = open("palabras.txt","r")
conjuntoPalabras= list(archivo.read().split("\n"))
palabra = conjuntoPalabras[random.randint(0,len(conjuntoPalabras)-1)].lower()
letraObtenida=StringVar()
 
raiz.config(width=1000, height = 600, bg="blue",relief = "groove",bd=10)
juegoFrame = Frame(raiz)
juegoFrame.config (width=1000, height = 600,relief = "sunken",bd=15)
juegoFrame.grid_propagate(False)
 
juegoFrame.pack()
 
Label(juegoFrame,text= "Introduce una letra", font=("Verdana", 24), #Cartel en Pantalla.
      ).grid(row=0, column=0,padx=10,pady=10)
letra= Entry(juegoFrame,width=1,font=("Verdana", 24),textvariable=letraObtenida
             ). grid(row=0, column=1,padx=10,pady=10)
probarLetra = Button(juegoFrame,text="Probar",bg="yellow",command=probarLetraFuncion
                     ).grid(row=1,column=0,pady=10)
 
guiones = [Label(juegoFrame,text="_",font=("verdana",30)) for  _ in palabra ]
 
inicialX=200
for i in range(len(palabra)):
    guiones[i].place(x=inicialX,y=400)
    inicialX+=50
 
 
lbl1= Label(juegoFrame,text= f"{vidas} vidas.", font=("Verdana", 24),) #DUDA ACA
lbl1.grid(row=0, column=80,padx=10,pady=10)
 
raiz.mainloop()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-1
Comentar