2011-03-27 185 views
0
from Tkinter import * 
import Tkinter as tk 
import tkMessageBox 
import time 
import re 
import string 
from random import randint 
print "Hangman v1.7 - by Josh & Paul" 
bsrly2 = False 
bsrly = False 
notlie = True 
turns = 8 
rec = '' 
exp = '^[a-z]+$' 
textfile = open('dictionary.txt', 'r') 
words = textfile.read().split() 
n = randint(0, len(words)-1) 
word = words[n] 
x = 0 
w = list(word) 
guess = '' 
bs = '' 
for letter in word: 
    if letter in guess: 
     bs += letter + ' ' 
    else: 
     bs += '_ ' 

bs = bs.upper() 


def MainProgram(): 
    global ui 
    global guess 
    global turns 
    global rec 
    global bs 
    global bsrly 
    global bsrly2 
    bs = '' 
    inp = ui.get().strip() 
    inp = inp.lower() 
    ui.delete(0, END) 
    if bsrly2 == True: 
     root.quit() 

    if inp == "": 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter") 

    elif len(inp) > 1: 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter one letter") 

    elif inp in guess: 
     tkMessageBox.showerror("Incorrect Entry", "Error: You have already tried that letter") 

    elif not re.match(exp, inp): 
     tkMessageBox.showerror("Incorrect Entry", "Error: Please enter a letter") 

    else: 
     if inp not in word: 
      turns -= 1 

     if turns == 7: 
      img.configure(image=image0) 
     if turns == 6: 
      img.configure(image=image1) 
     if turns == 5: 
      img.configure(image=image2) 
     if turns == 4: 
      img.configure(image=image3) 
     if turns == 3: 
      img.configure(image=image4) 
     if turns == 2: 
      img.configure(image=image5) 
     if turns == 1: 
      img.configure(image=image6) 

     guess += ' ' + inp 
     if turns == 0: 
      img.configure(image=image7) 
      bsrly2 = True 

     if inp not in word: 
      upd.configure(text= "Wrong, try again") 
      rec += ' ' + inp 
     if inp in word: 
      upd.configure(text= "Thats correct!") 

     guess2 = rec.upper() 
     fb2.configure(text = "Wrong letters:" + guess2) 

     wait = 0 
     left = 0 
     for letter in word: 
      if letter in guess: 
       bs += letter + " " 
      else: 
       bs += '_ ' 
       left += 1 

     bs = bs.upper() 
     if left == 0: 
      bsrly = True 
     feedback.configure(text=bs) 
     bs = '' 
     if bsrly2 == True: 
      root 
      upd.configure(text="You lose, the word was " + word) 

     check() 
def check(): 
    if bsrly == True: 
     root.destroy() 
     root2 = Tk() 
     root2.wm_iconbitmap('hmn.ico') 
     root2.title("You Win!") 
     youwin = tk.PhotoImage(master=root2, file="YouWin.gif") 
     winer = Label(master=root2, image=youwin) 
     winer.image = youwin 
     winer.grid(row=0, rowspan=20) 
     wanaquit = Label(master=root2, text="Play Again?") 
     wanaquit.grid(row=21) 
     pbuton = Button(master=root2, text="Yes", command=root2.destroy) 
     pbuton.grid(row=22) 
     root2.mainloop() 

root = Tk() 
root.wm_iconbitmap('hmn.ico') 
root.title("Hangman v1.7") 
image = tk.PhotoImage(file="image.gif") 
image0 = tk.PhotoImage(file="image0.gif") 
image1 = tk.PhotoImage(file="image1.gif") 
image2 = tk.PhotoImage(file="image2.gif") 
image3 = tk.PhotoImage(file="image3.gif") 
image4 = tk.PhotoImage(file="image4.gif") 
image5 = tk.PhotoImage(file="image5.gif") 
image6 = tk.PhotoImage(file="image6.gif") 
image7 = tk.PhotoImage(file="image7.gif") 
content = tk.Frame(root, bg='black') 
namelbl = tk.Label(content, text="Enter a letter:", bg="black", fg="green") 
feedback = tk.Label(content, text=bs, bg="black", fg="green") 
rb = tk.Checkbutton(content, text="Music", bg="black", fg="green") 
slave = tk.Label(content, text="", bg="black", fg="green") 
slave2 = tk.Label(content, text="", bg="black", fg="green") 
upd = tk.Label(content, text="", bg="black", fg="green") 
fb2 = tk.Label(content, text="Used letters:", bg="black", fg="green") 
ui = tk.Entry(content) 
ui["width"] = 2 
img = tk.Label(master=content, image=image, bg="black") 
ok = tk.Button(content, text="Okay", bg="black", fg="green", command=MainProgram) 
ui.focus() 
ui.bind('<Return>', (lambda e: MainProgram())) 
content.grid(column=0, row=0) 
img.grid(column=0, row=0, columnspan=4) 
feedback.grid(column=0, row=1) 
fb2.grid(column=0, row=2) 
slave.grid(row=3) 
slave2.grid(row=5) 
upd.grid(row=4, columnspan=4) 
namelbl.grid(column=0, row=6) 
ui.grid(column=1, row=6, sticky=W) 
ok.grid(column=1, row=6) 
rb.grid(row=7) 
root.mainloop() 

嘿大家,我有一個學校任務即將到期,那就是用GUI來製作一個Hangman程序。如何重新啓動腳本?

一切都運行平穩,除非我不明白我怎麼能使腳本重新啓動,當他們在您贏得窗口中單擊是的?

+0

小心地在網上發佈你的作業。它創造了一個同學可能會看到並使用它的最微小的機會。不太可能,但仍然有可能。你也應該更好地給你的變量命名。乍一看,我應該知道什麼rec,n,x,w和bs。我不應該閱讀代碼來弄清楚。 :) – 2011-03-27 00:58:18

回答

0

將程序邏輯放入模塊頂層將它放入函數中感受不到。一旦你完成了,你只需再次調用你的函數。使用現在的代碼結構是不可能重新啓動你的程序的(至少在不寫入另一個程序的情況下)。

編輯:

實施例。在函數封裝這個代碼:以上

print "Hangman v1.7 - by Josh & Paul" 
bsrly2 = False 
bsrly = False 
notlie = True 
turns = 8 
rec = '' 
exp = '^[a-z]+$' 
textfile = open('dictionary.txt', 'r') 
words = textfile.read().split() 
n = randint(0, len(words)-1) 
word = words[n] 
x = 0 
w = list(word) 
guess = '' 
bs = '' 
for letter in word: 
    if letter in guess: 
     bs += letter + ' ' 
    else: 
     bs += '_ ' 

bs = bs.upper() 

代碼會導致功能:

def start(): 
    print "Hangman v1.7 - by Josh & Paul" 
    bsrly2 = False 
    bsrly = False 
    notlie = True 
    turns = 8 
    rec = '' 
    exp = '^[a-z]+$' 
    textfile = open('dictionary.txt', 'r') 
    words = textfile.read().split() 
    n = randint(0, len(words)-1) 
    word = words[n] 
    x = 0 
    w = list(word) 
    guess = '' 
    bs = '' 
    for letter in word: 
     if letter in guess: 
      bs += letter + ' ' 
     else: 
      bs += '_ ' 

    bs = bs.upper() 

至於通過你的函數之間的變量可以用全局變量堅持,如果你沒有多少時間了,但最好將所有結果函數放入類中並使用實例變量。

+0

你能舉個例子嗎?對不起,我很可能是這個網站上最大的noob – ThatAussieScripter 2011-03-27 00:50:43

+0

非常感謝你 – ThatAussieScripter 2011-03-27 00:58:31