猜字游戏(配肉桂卷)[tkinter]

0 投票
1 回答
1040 浏览
提问于 2025-04-21 10:16

这个猜单词游戏是我做的第一个游戏之一,最近我又回去看看我以前写的程序,想给它们加点新花样。在这个游戏里,我加了一个肉桂卷 :D。不过,当代码运行时,它在最后会稍微延迟一下,然后就退出了,根本没有肉桂卷。我试着在网上搜索我的问题和我想做的事情,但我身边没有人熟悉tkinter。问题出现在代码的底部。以下是代码:

import random
import time
from tkinter import *
tk = Tk()
tk.title("Hangman!")
canvas = Canvas(tk, width=700, height=700)
canvas.pack()
cinnamonroll = PhotoImage(file='C:\\Python34\\cinnamonroll.gif')
hangmanpic0 = PhotoImage(file='C:\\Python34\\hangmanpic0.gif')
hangmanpic1 = PhotoImage(file='C:\\Python34\\hangmanpic1.gif')
hangmanpic2 = PhotoImage(file='C:\\Python34\\hangmanpic2.gif')
hangmanpic3 = PhotoImage(file='C:\\Python34\\hangmanpic3.gif')
hangmanpic4 = PhotoImage(file='C:\\Python34\\hangmanpic4.gif')
hangmanpic5 = PhotoImage(file='C:\\Python34\\hangmanpic5.gif')
hangmanpic6 = PhotoImage(file='C:\\Python34\\hangmanpic6.gif')
hangmanpics = (hangmanpic0, hangmanpic1, hangmanpic2, hangmanpic3, \
    hangmanpic4, hangmanpic5, hangmanpic6)
words = ("taffy", "guitar", "talking", "retire", "fanning", "news", \
    "moon", "sunny", "driving", "prevent", "stick", "images", \
    "trees", "reading", "books", "character", "doctor", "telephone", \
    "license", "braces", "giraffe", "spotted", "exiting", \
    "animation", "flower", "assassination", "mother", "tomato", \
    "fruity", "school")
word = random.choice(words)
progress = "-" * len(word)
wrong = 0
lettersguessed = []
print("Are you ready to play hangman!?")
time.sleep(1)
while wrong < 6 and progress != word:
    canvas.create_image(0, 0, anchor=NW, image=hangmanpics[wrong])
    print("You have used %s out of 6 guesses" %  wrong)
    print("You have guessed these letters: %s" % lettersguessed)
    print(progress)
    guess = input("Guess a letter. ")
    guess = guess.lower()
    while guess in lettersguessed:
        guess = input("You already guessed %s. Guess another letter!" % guess)
        guess = guess.lower()
    lettersguessed.append(guess)
    if guess in word:
        print("Correct, good job!")
        new = ""
        for i in range(0, len(word)):
            if guess == word[i]:
                new += guess
            else:
                new += progress[i]
                progress = new
            else:
                print("NOPE! Sad face.")
                wrong += 1
if wrong == 6:
    print(hangmanpics[wrong])
    print("You got hanged!!! *triple snap*")
else:
    print("You win!")
    canvas.create_image(0, 0, anchor=NW, image=cinnamonroll)
    time.sleep(2)
print("The word was %s! Thanks for playing!" % word)

1 个回答

0

你在用tkinter的时候有点奇怪(没有使用Application或mainloop)。这导致tkinter的事件没有正常触发,更新也没有及时发生。结果是,你的游戏其实只是碰巧能运行。每次你调用input()的时候,tkinter才会启动它的处理循环,这样东西才能显示出来。我也不知道这是什么原理,但比如说,你原来的图片只有在调用input()之后才会显示(你可以在前面加个睡眠时间来自己验证一下)。要让你的最终显示正常工作,你可以加上

...
canvas.create_image(0, 0, anchor=NW, image=cinnamonroll)
tk.update_idletasks() 
time.sleep(2)

在你所有的tk更新之后也做同样的事情,并且睡眠时间要稍微超过2秒——它并没有那么快!

撰写回答