如何重启我的脚本?

0 投票
1 回答
691 浏览
提问于 2025-04-16 14:29
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()

至于在函数之间传递变量,如果时间不多的话,你可以使用全局变量,但最好还是把所有的函数放到一个类里,并使用实例变量。

撰写回答