Python Угадайка Ткинтер (Lives System) - PullRequest
0 голосов
/ 11 января 2020

Я новичок в Python программировании. Моя игра на догадки работает, но система жизней не работает. Это не подсчет количества азартных игр. Цель состоит в том, чтобы, когда он достигнет 5 догадок, вы получите сообщение print_text, в котором говорится: «Вы потеряли все свои 5 жизней! Число было (число)».

Вот мой код:

from tkinter import *
import random


class Application(Frame):
    """A GUI application which which generates random number and gets user input"""

    def __init__(self, master): #initialize newly created Application object
        """Initialize the frame"""
        Frame.__init__(self, master) # super(Application, self).__init__(master) in python 3
        self.grid()
        self.create_widgets()
        self.number = random.randint(1, 20)


    def create_widgets(self):
        """Get user inputs"""
        # create instruction label
        Label(self, text = "Gok een getal tussen de 1 en 20").grid(row = 0, column = 0, sticky = W)
        Label(self, text = "Probeer het binnen 5 keer te gokken!").grid(row = 1, column = 0, sticky = W)

        # create guess input prompt label and entry
        self.guess_ent = Entry(self, width=30)
        self.guess_ent.grid(row = 2, column = 0, sticky = W)

        # create start game prompt label and submit button
        Button(self, text = "Gok", command = self.run_game).grid(row = 2, column = 0)
        Button(self, text = "Reset", command = self.reset_game).grid(row = 3, column = 0, sticky=W)


        # create submit button
        #Button(self, text = "Submit", command = )

        # create computer feedback text box
        self.text = Text(self, width=75, height=2, wrap=WORD)
        self.text.grid(row=4, column=0, columnspan=2)

    def run_game(self):
        """Generate number and get user input"""
        numofguesses = 0
        while numofguesses < 5:
            guess = int(self.guess_ent.get())

            numofguesses = numofguesses + 1
            if guess > self.number:
                print_text = "Je gokt {0}.".format(guess)
                print_text += " nummer is te hoog"
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
                print (numofguesses)
                break

            if guess < self.number:
                print_text = "Je gokt {0}.".format(guess)
                print_text += " nummer is te laag"
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
                print (numofguesses)
                break
                numofguesses = numofguesses + 1

            if guess == self.number:

                print_text = "Goed gedaan! Je hebt het nummer gegokt."
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
                break



            if numofguesses == 5:
                self.number = str(number)
                print_text = "Je bent af, alle 5 levens zijn op! Het getal was", number
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
                self.guess_ent.delete(0, END)
                break



    def reset_game(self):          
            print_text = "Game is gereset!"
            self.number = random.randint(1, 20)
            self.text.delete(0.0, END)
            self.text.insert(0.0, print_text)

# main
root = Tk()
root.geometry('350x120')
root.title("Guessing Game")
app = Application(root)
app.configure(bg='lightgrey')
root.mainloop()

Ответы [ 2 ]

0 голосов
/ 11 января 2020

Не следует использовать, пока l oop в run_game(), потому что это не обязательно. Вы должны использовать переменную экземпляра, чтобы отслеживать количество догадок. Ниже приведен измененный run_game():

def __init__(self, master):
    ...
    self.numberofguesses = 0

def run_game(self):
    # user may input something other than a number, so better to capture such error
    try:
        guess = int(self.guess_ent.get())
        self.numofguesses += 1     # use instance variable to hold the number of guesses, of course it should be initialized to 0 in __init__()
        print(self.numofguesses)

        if guess == self.number:
            print_text = "Goed gedaan! Je hebt het nummer gegokt."
            self.text.delete(0.0, END)
            self.text.insert(0.0, print_text)
        else:
            if guess > self.number:
                print_text = "Je gokt {0}.".format(guess)
                print_text += " nummer is te hoog"
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
            else:
                print_text = "Je gokt {0}.".format(guess)
                print_text += " nummer is te laag"
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
            if self.numofguesses == 5:
                print_text = "Je bent af, alle 5 levens zijn op! Het getal was {0}".format(self.number)
                self.text.delete(0.0, END)
                self.text.insert(0.0, print_text)
                self.guess_ent.delete(0, END)
    except:
        print('invalid number')

def reset_game(self):
    ...
    self.numberofguesses = 0

Поскольку ваш код всегда показывает одно сообщение в self.text, лучше использовать Entry или Label вместо Text виджета.

0 голосов
/ 11 января 2020

Увеличение

numofguesses = numofguesses + 1

никогда не происходит, потому что вы нарушаете, прежде чем увеличиваете условие для вашего l oop. Также перерыв неправильный. Там должно быть

continue

, так как перерыв завершает l oop.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...