2015-04-22 2 views
-1

Когда пользователь отправляет свой ответ и ошибочно, def getResult() должен сделать переменную «ошибка» повышающейся на 1, когда пользователь делает свою первую ошибку и ошибку изменяется от 0 до 1. После этого, когда пользователь вводит неправильный ответ, переменная по-прежнему заканчивается как «1». Есть ли способ, чтобы он всегда увеличивался, когда пользователь ошибается?Почему моя переменная не увеличивается за один раз?

from tkinter import * 
import random 
root = Tk() 

root.wm_title("HangMan") 

canvas = Canvas(root, height=400, width=800) 
canvas.pack() 
name = '' 

def titlescreen(): 
    title = canvas.create_text(400, 100, font=("Times New Roman", 50), tags="title") 
    canvas.itemconfig(title, text="HANGMAN: THE GAME") 

    startButton = Button(canvas, text="Start Game", width=10, command=startgame) 
    canvas.create_window(400, 200, window = startButton) 

    creditsButton = Button(canvas, text="Credits", width=10, command=displaycredits) 
    canvas.create_window(400, 250, window = creditsButton) 

def startgame(): 
    def getName(nameEntry): 
     global name 
     name = nameEntry.get() 
     print (name) 
     drawPole() 



    canvas.delete(ALL) 
    welcome = canvas.create_text(400,100,font=("Times New Roman",50),text="WELCOME!") 
    welcome2 = canvas.create_text(400,150,font=("Times New Roman", 30),text="PLEASE ENTER YOUR NAME") 


    nameEntry = Entry(canvas) 
    enterName = Button(canvas, text="Enter", width=10, command=lambda: getName(nameEntry)) 


    canvas.create_window(350, 200, window = nameEntry) 
    canvas.create_window(490, 200, window = enterName) 


    nameEntry.delete(0,END) 
    nameEntry.insert(0, "Enter Player Name") 


def displaycredits(): 
    canvas.delete(ALL) 
    created = canvas.create_text(400,100,font=("Times New Roman",50),text="CREATED BY") 
    credit1 = canvas.create_text(400,150,text="Patrick Tsui & Ricardo Perez") 
    credit2 = canvas.create_text(400,170,text="Montclair State University Students") 
    backButton = Button(canvas,text="Back to Title Screen",width=30,command=backtotitle) 
    canvas.create_window(400, 200, window=backButton) 

def backtotitle(): 
    canvas.delete(ALL) 
    titlescreen() 

def drawPole(): 
    canvas.delete(ALL) 
    a = canvas.create_rectangle(550,50,550,350,fill = "black") 
    b = canvas.create_rectangle(350,50,550,50,fill = "black") 
    c = canvas.create_rectangle(350,50,350,90,fill = "black") 
    gamePlay() 


def gamePlay(): 

    def getAnswer(): 
     global answer 
     answer = answer1.get() 
     print (answer) 

     getResult() 

    def getResult(): 
     global result2 
     global mistake 
     mistake = 0 
     result2 = result 

     if str(result2) == answer: 
      canvas.create_text(300, 375, text="Correct!",fill="green", tags="result") 
     else: 
      canvas.create_text(300, 375, text="Wrong!",fill="red", tags="result") 
      d = canvas.create_oval(325, 90, 375, 140, outline = "black") 
      mistake += 1 

     print (result2) 
     print (mistake) 
     Continue() 

    def Continue(): 
     canvas.delete("confirm")   
     continueButton = Button(canvas,text="Continue",width=10,command=gamePlay) 
     canvas.create_window(450, 350, window = continueButton, tags="continue") 


    canvas.delete("question") 
    canvas.delete("continue") 
    canvas.delete("result") 
    x = random.randint(1,100) 
    y = random.randint(1,100) 
    questions = random.randint(0,3) 

    answer1 = Entry(canvas) 
    confirmButton = Button(canvas,text="Confirm",width=10,command=getAnswer) 

    canvas.create_window(300, 350, window = answer1) 
    canvas.create_window(450, 350, window = confirmButton, tags="confirm") 

    answer1.delete(0,END) 
    answer1.insert(0, "Enter Your Answer") 

    if questions == 0: 
     result = x + y 
     question1= canvas.create_text(350, 300, text=("Add: " + str(x) + " + " + str(y)), tags="question") 


    if questions == 1: 
     result = x - y 
     question1= canvas.create_text(350, 300, text=("Subtract: " + str(x) + " - " + str(y)), tags="question") 


    if questions == 2: 
     result = x * y 
     question1= canvas.create_text(350, 300, text=("Multiply: " + str(x) + " * " + str(y)), tags="question") 


    if questions == 3: 
     result = x // y 
     question1= canvas.create_text(350, 300, text=("Divide: " + str(x) + "/" + str(y)), tags="question") 

titlescreen() 

root.mainloop() 
+0

Я не понимаю; вы сразу же сбросите «ошибку» до 0, прежде чем увеличивать свою функцию «getResult». Как вы ожидаете, что когда-нибудь он станет больше 1? – helmbert

+0

@helmbert, нет переменной 'error', или есть? – ForceBru

+0

@ForceBru, да, в функции 'getResult' есть функция (которая является внутренней функцией' gamePlay'). Hm, номера строк в блоках кода были бы полезны для таких дискуссий ... :) – helmbert

ответ

3

Вы должны сначала объявить переменную право mistake после импорта:

mistake=0 

Если вы не сделаете этого, все mistake переменные в ваши функции будут локальными.

+0

Благодарим за помощь! Я исправил свою ошибку, и теперь она работает. –

+0

@RicardoDesuPerez, всегда приветствуется! – ForceBru

1

Ваша проблема здесь:

def getResult(): 
     global result2 
     global mistake 
     mistake = 0 

Каждый раз, когда вы запрашиваете результат, вы сбросить значение ошибки 0, что означает это только когда-либо получает шанс, чтобы увеличить до 1.

Решение, сохраняя при этом текущий формат приложения, было бы объявить «ошибку» в другом месте. Лично я бы поставил его после gamePlay(), считая, что вы хотите, чтобы пользовательские ошибки сбросили, когда они снова играют. Альтернативой было бы сделать это после импорта, который сохранил бы ценность ошибки, даже когда был отправлен новый запрос gamePlay(). Существует множество способов решить эту проблему, поэтому не стесняйтесь проявлять творческий подход и просить о помощи, если вам нужно.

+0

Спасибо за объяснение :) Я обязательно сделаю ту же ошибку снова , –

Смежные вопросы