猜字游戏(配肉桂卷)[tkinter]
这个猜单词游戏是我做的第一个游戏之一,最近我又回去看看我以前写的程序,想给它们加点新花样。在这个游戏里,我加了一个肉桂卷 :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秒——它并没有那么快!