如何重启我的脚本?
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()
大家好,我有一个学校的作业要交,内容是制作一个带图形界面的猜单词游戏(Hangman)。
现在一切都进行得很顺利,但我不太明白,当玩家在“你赢了”的窗口里点击“是”时,怎么让程序重新开始呢?
1 个回答
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()
至于在函数之间传递变量,如果时间不多的话,你可以使用全局变量,但最好还是把所有的函数放到一个类里,并使用实例变量。