运用Python编写程序,猜数游戏(界面版)
import random
from tkinter import *
from tkinter.messagebox import showerror,showinfo
from tkinter.simpledialog import askinteger
class Application(Frame):
def __init__(self,master=None):
super(Application, self).__init__(master)
self.master = master
self.pack()
self.createWidget()
def createWidget(self):
global varNumber # 定义全局变量
# 用户猜的数
varNumber = StringVar(root)
global totalTimes # 定义全局变量
# 允许猜的总数次
totalTimes = IntVar(root, value='0')
global already
# 已猜次数
already = IntVar(root, value='0')
global currentNumber
# 当前生成的随机数
currentNumber = IntVar(root, value='0')
global times
# 玩家玩游戏的总次数
times = IntVar(root, value='0')
global right
# 玩家猜对的总次数
right = IntVar(root, value='0')
Label(root,text='请输入一个整数:').place(x=10,y=10,width=100,height=20)
# 用户猜数并输入的文本框
global entryNumber
entryNumber = Entry(root,width=140,textvariable=varNumber)
entryNumber.place(x=110,y=10,width=140,height=20)
entryNumber['state'] = 'disable'
global button
# 在窗口上创建按钮,并设置事件处理函数
button = Button(root, text='Start Game', command=self.buttonClick)
button.place(x=10,y=40,width=250,height=20)
def buttonClick(self):
if button['text'] == 'Start Game':
'''
每次游戏是允许用户自定义数值范围
玩家必须输入正确的数
'''
# 最小数值
while True:
try:
start = askinteger('允许的最小整数','最小数(必须大于0))',initialvalue = 1)
if start != None:
assert start > 0
break
except:
pass
# 最大数值
while True:
try:
end = askinteger('允许的最大整数','最大数(必须大于10))',initialvalue = 11)
if end != None:
assert end > 10 and end > start
break
except:
pass
# 在用户自定义的数值范围内生成要猜的随机数
currentNumber.set(random.randint(start,end))
'''
用户自定义一共允许猜几次
玩家必须输入正确的整数
'''
while True:
try:
t = askinteger('最多允许猜几次','总数次(必须大于0)',initialvalue=3)
if t != None:
assert t > 0
totalTimes.set(t)
break
except:
pass
# 已猜次数初始化为0
already.set(0)
button['text'] = '剩余次数:' + str(t)
# 把文本框内容初始化
varNumber.set('0')
# 启用文本框,允许用户输入整数
entryNumber['state'] = 'normal'
# 玩家次数加1
times.set(times.get()+1)
else:
# 一共可以猜几次
total = totalTimes.get()
# 本次游戏的正确答案
current = currentNumber.get()
# 玩家本次猜的数
try:
x = int(varNumber.get())
except:
showerror('抱歉','必须输入整数')
return
# 猜对了
if x == current:
showinfo('恭喜','猜对了')
button['text'] = 'Strat Game'
# 禁用文本框
entryNumber['state'] = 'disable'
# 猜对的次数加1
right.set(right.get()+1)
else:
# 本次游戏已猜次数加1
already.set(already.get()+1)
if x > current:
showerror('抱歉','猜的数太大了')
else:
showerror('抱歉','猜的数太小了')
# 可猜的次数用完了、
if already.get() == total:
showerror('抱歉','游戏结束,正确的数是:'+str(currentNumber.get()))
button['text'] = 'Strat Game'
# 禁用文本框
entryNumber['state'] = 'disable'
else:
button['text'] = '剩余次数:'+str(total-already.get())
if __name__ == '__main__':
root = Tk()
root.title('猜数游戏')
root.geometry('280x80+400+300')
root.resizable(False,False)
app = Application(master=root)
root.mainloop()