from tkinter import *

class JogoDaForca:
    def __init__(self, master):
        self.master = master
        master.title("Jogo da Forca")
        master.geometry("300x300")

        # palavra secreta
        self.palavra_secreta = "banana"

        # letras adivinhadas
        self.letras_adivinhadas = []

        # número de tentativas
        self.tentativas_restantes = 6

        # widgets
        self.lbl_palavra = Label(master, text=self.esconder_palavra())
        self.lbl_palavra.pack()

        self.lbl_letras_adivinhadas = Label(master, text=self.formatar_letras_adivinhadas())
        self.lbl_letras_adivinhadas.pack()

        self.lbl_tentativas = Label(master, text="Tentativas restantes: {}".format(self.tentativas_restantes))
        self.lbl_tentativas.pack()

        self.lbl_mensagem = Label(master, text="")
        self.lbl_mensagem.pack()

        self.ent_palpite = Entry(master)
        self.ent_palpite.pack()

        self.btn_adivinhar = Button(master, text="Adivinhar", command=self.adivinhar_letra)
        self.btn_adivinhar.pack()

    def esconder_palavra(self):
        palavra_escondida = ""

        for letra in self.palavra_secreta:
            if letra in self.letras_adivinhadas:
                palavra_escondida += letra
            else:
                palavra_escondida += "_"

        return palavra_escondida

    def formatar_letras_adivinhadas(self):
        return "Letras adivinhadas: {}".format(", ".join(self.letras_adivinhadas))

    def adivinhar_letra(self):
        palpite = self.ent_palpite.get()

        if len(palpite) != 1:
            self.lbl_mensagem.configure(text="Por favor, digite uma letra de cada vez.")
            return

        if palpite in self.letras_adivinhadas:
            self.lbl_mensagem.configure(text="Você já adivinhou essa letra.")
            return

        self.letras_adivinhadas.append(palpite)

        if palpite not in self.palavra_secreta:
            self.tentativas_restantes -= 1
            self.lbl_tentativas.configure(text="Tentativas restantes: {}".format(self.tentativas_restantes))

            if self.tentativas_restantes == 0:
                self.lbl_mensagem.configure(text="Você perdeu!")
                self.btn_adivinhar.configure(state=DISABLED)
                return

        if self.esconder_palavra() == self.palavra_secreta:
            self.lbl_mensagem.configure(text="Você ganhou!")
            self.btn_adivinhar.configure(state=DISABLED)
            return

        self.lbl_palavra.configure(text=self.esconder_palavra())
        self.lbl_letras_adivinhadas.configure(text=self.formatar_letras_adivinhadas())
        self.ent_palpite.delete(0, END)

    def iniciar_jogo(self):
        self.master.mainloop()

root = Tk()
jogo_da_forca = JogoDaForca(root)
jogo_da_forca.iniciar_jogo()

