Guess Game Python Tkinter

Asked

Viewed 262 times

1

I created a code in Python to present a puzzle game of numbers between 1 and 100. I wanted to implement this game in a graphical interface, using the Tkinter module. I had an idea, I created a code using Tkinter, but after that I stopped. My question is, how to "unite" the two codes that were created in one, to create this graphical interface.

That part is that I used to create the box with the presentation of the game and the button to run using Tkinter.

from tkinter import *
import random

i = Tk()

i.title('Guess Game')
i.geometry("400x200")

texto = Label(i, text = "Bem-vindo ao Guess Game")
texto.pack()

texto = Label(i, text = "Você tem 10 chances de acertar o número que eu estou pensando.")
texto.pack()
texto = Label(i, text = "Trata-se de um valor entre 1 e 100. Então, vamos lá!")
texto.pack()

form = Entry(i, width=3)
form.pack()

b = Button(i, text ="Executar", fg= "green")
b.pack()

i.mainloop()

That part is the code of the Game itself, previously created.

import random

n = random.randrange(1, 101)
nrepete = []
estado1 = 7  # início
estado2 = 7


def Submeter(tentativa):

    global estado2

    if abs(n - palpite) == 1:
        estado2 = 6  # fervendo
    if abs(n - palpite) == 2 or abs(n - palpite) == 3:
        estado2 = 5  # muito quente
    if abs(n - palpite) >= 4 and abs(n - palpite) <= 6:
        estado2 = 4  # quente
    if abs(n - palpite) >= 7 and abs(n - palpite) <= 9:
        estado2 = 3  # morno
    if abs(n - palpite) >= 10 and abs(n - palpite) <= 15:
        estado2 = 2  # frio
    if abs(n - palpite) >= 16 and abs(n - palpite) <= 25:
        estado2 = 1  # muito frio
    if abs(n - palpite) >= 26:
        estado2 = 0  # congelando


def FornecerPista():
    if estado1 == 7:
        if estado2 == 0:
            print('Está congelando!')
        if estado2 == 1:
            print('Está muito frio!')
        if estado2 == 2:
            print('Está frio!')
        if estado2 == 3:
            print('Está morno!')
        if estado2 == 4:
            print('Está quente!')
        if estado2 == 5:
            print('Está muito quente!')
        if estado2 == 6:
            print('Está fervendo!')
    if estado1 - estado2 == 0:
        if estado2 == 0:
            print('Seu palpite continua congelando!')
        if estado2 == 1:
            print('Seu palpite continua muito frio!')
        if estado2 == 2:
            print('Seu palpite continua frio!')
        if estado2 == 3:
            print('Seu palpite continua morno!')
        if estado2 == 4:
            print('Seu palpite continua quente!')
        if estado2 == 5:
            print('Seu palpite continua muito quente!')
        if estado2 == 6:
            print('Seu palpite continua fervendo!')
    if estado1 - estado2 > 0:
        if estado2 == 0:
            print('Ops, seu palpite deu uma esfriada e agora está congelando!')
        if estado2 == 1:
            print('Ops, seu palpite deu uma esfriada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esfriada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esfriada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esfriada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esfriada e agora está muito quente!')
    if estado1 - estado2 < 0:
        if estado2 == 1:
            print('Ops, seu palpite deu uma esquentada e agora está muito frio!')
        if estado2 == 2:
            print('Ops, seu palpite deu uma esquentada e agora está frio!')
        if estado2 == 3:
            print('Ops, seu palpite deu uma esquentada e agora está morno!')
        if estado2 == 4:
            print('Ops, seu palpite deu uma esquentada e agora está quente!')
        if estado2 == 5:
            print('Ops, seu palpite deu uma esquentada e agora está muito quente!')
        if estado2 == 6:
            print('Ops, seu palpite deu uma esquentada e agora está fervendo!')


for tentativa in range(1, 11):
    while True:
        try:
            palpite = input('Tentativa' + str(tentativa) + ':')
            palpite = int(palpite)
            nrepete.append(palpite)
            if (palpite < 1) or (palpite > 100):
                raise ValueError
            if nrepete.count(palpite) >= 2:
                raise NameError
            else:
                break
        except NameError:
            print('Esse valor já foi testado! Tente de novo.')
        except ValueError:
            print('Valor inválido! Tente de novo.')

    if palpite == n:
        print('\nParabéns !')
        print('\nVocê acertou o número', n, 'após', tentativa, 'tentativa(s)!')
        break
    if tentativa == 1:
        SetStatus(tentativa)
    if tentativa > 1:
        estado1 = estado2
        SetStatus(tentativa)
    FornecerPista()

    if tentativa == 10 and palpite != n:
        print('\nLamento, mas após', tentativa, 'tentativas')
        print('Você não conseguiu acertar o número', n, 'que eu estava pensando!')
  • How would you do that?

  • I did it, however when I put it to run it only runs the second block, nothing from the graphical part.

  • Your logic implemented in creating the Tkinter is good but the same will not do anything because it does not receive any external data.

  • Yeah, that was my question. I managed to create the window, but I couldn’t use the second block in it.

  • In your second file you seem to have made the console script, it is not communicating with the Tkinter. The Tkinter works basically as follows: You set a widget be it a window, button or whatever, and define a command that it will execute if you act interaction with the user an example would be button = tk.Button(text='Clique aqui', command=<função_que_será_executada>). For more information read https://docs.python.org/3/library/tkinter.html

2 answers

1

Hello, you need to make the codes interact. Basically need to put the whole game to roll after pressing the button.

Include that:

def codigo_do_jogo():
    #Aqui você coloca praticamente todo o código do jogo. 

b = Button(i, text ="Executar", command= codigo_do_jogo, fg= "green")#Adiciona o comando no botão.
b.pack()

Another important thing is the input field,

form = Entry(i, width=3)
form.pack()

To get the value the person typed use the method .get():

form.get()

#Por exemplo, se fizer assim será printado o que foi digitado pelo usuário:
print(form.get())

Finally, this way you can return values to the interface, probably there must be more "right" ways to do this:

def surgir_resultado(resultado):
    texto = Label(i, text = resultado)
    texto.pack()

That’s how it’s gonna come out in Dad i your text, when surgir_resultado(resultado) is called. Remembering that it can be called by a button command.

0

Hello! To give a light in this code I can say that it is good to have the two interface and internal program codes made separate. I have been able to see in my studies that the graphical interface and validations must first be created and gradually be added to another part of the program. Everything has to have an order, for example: 1º To come up with a question or algorithm of what is intended to be done. 2º Widgets and layouts already defined and planned. 3rd internal program itself. I made a program based on yours that was a little different. Hard is to follow the same ideas. I also tried to make the most of the exceptions. I created reference that define the temperature they are: Boiling, very hot, hot, warm, cold, very cold and Freezing. The temperature is calculated as follows: (computer**-**guesses = reference). Check the interface run with the data in the console to draw your conclusions.

from tkinter import *

from random import *

from tkinter.messagebox import showinfo  

i = Tk()

i.title('Guess Game')

i.geometry("400x200")

texto3 = Label(i, text = ">>> Último valor digitado -texto3- <<<", relief=RAISED)

texto3.pack()

palpite = Entry(i, width=3)

palpite.focus()

palpite.pack()

computador = randint(1, 100)

print('computador sorteou: ', computador)

don=0

def botao():

    palpites = palpite.get()

    polpa = palpites[:]

    if polpa == '':

        showinfo(title="Mensagem", message="*** Campo vazio ***")

    elif not polpa.isnumeric():

        showinfo(title="Mensagem", message="*** Digite apenas numeros ***")

        palpite.delete(0, 'end')

    elif int(polpa) <= 0 or int(polpa) >= 101:

        showinfo(title="Mensagem", message="*** Digite entre 1 e 100 ***")

        palpite.delete(0, 'end') # limpa a caixa de entrada

    else:

        global computador

        palpites = str(palpite.get())

        print('palpites: ', palpites)

        texto3['text'] = palpites  # último valor digitado

        cont = 0

        while cont <= 10:

            global don

            if int(palpites) == int(computador):

                texto1['text'] = '<Congratulações> você ACERTOU !!!'

                palpite.delete(0, 'end')

                b['state'] = DISABLED

                texto1.configure(bg='green', fg='yellow')

                palpite['state'] = DISABLED

                texto2['text'] = 'fim do jogo'

                break

            elif int(palpites) != int(computador):

                referencia = int(computador) - int(palpites)

                print('=== Valor de referência: ', referencia)

                if (referencia >= 1 and referencia <= 10):

                    texto2['text'] = 'Fervendo => é mais'

                elif (referencia >= -10 and referencia <= -1):

                    texto2['text'] = 'Fervendo => é menos'

                elif (referencia >= 11 and referencia <= 20):

                    texto2['text'] = 'Está muito quente = > é mais'

                elif (referencia >= -20 and referencia <= -11):

                    texto2['text'] = 'Está muito quente => é menos'

                elif (referencia >= 21 and referencia <= 30):

                    texto2['text'] = 'Quente => é mais'

                elif (referencia >= -30 and referencia <= -21):

                    texto2['text'] = 'Quente => é menos'

                elif (referencia >= 31 and referencia <= 40):

                    texto2['text'] = 'Está morno => é mais'

                elif (referencia >= -40 and referencia <= -31):

                    texto2['text'] = 'Está morno => é menos'

                elif (referencia >= 41 and referencia <= 50):

                    texto2['text'] = 'Frio => é mais'

                elif (referencia >= -50 and referencia <= -41):

                    texto2['text'] = 'Frio => é menos'

                elif (referencia >= 51 and referencia <= 60):

                    texto2['text'] = 'Muito frio => é mais'

                elif (referencia >= -60 and referencia <= -51):

                    texto2['text'] = 'Muito frio => é menos'

                elif (referencia >= 61):

                    texto2['text'] = 'Está congelando => é mais'

                elif (referencia <= -61):

                    texto2['text'] = 'Está congelando => é menos'

                else:

                    texto2['text'] = 'algo deu errado'

                texto1['text'] = 'ERROU'

                cont += 1

                don += cont

                print('>> Cont => Número de tentativas: ', don)

                palpite.delete(0, 'end')

                if don == 10:

                    b['state'] = DISABLED

                    palpite['state'] = DISABLED

                    texto1.configure(bg='red', fg='yellow')

                    texto2['text'] = 'fim do jogo'

                    texto1['text'] = 'Que pena! ** ERRASTE ** totas a tentativas'

                break

        print('status: ', texto1['text'])

        print('-----------------------------------')

texto = Label(i, text = "Bem-vindo ao jogo")

texto.pack()

texto = Label(i, text = "Você tem 10 chances de acertar o número que eu estou pensando.")

texto.pack()

texto = Label(i, text = "Trata-se de um valor entre 1 e 100. Então, vamos lá!")

texto.pack()

texto1 = Label(i, text = ">>>  <<<", relief=RAISED)

texto1.pack()

texto2 = Label(i, text = ">>> Temperatura <<<", relief=RAISED)

texto2.pack()


b = Button(i, text ="Executar", fg= "green", command=botao)

b.pack()

i.mainloop()

Browser other questions tagged

You are not signed in. Login or sign up in order to post.