运用Python编写程序,猜数游戏(界面版)

时间:2025-03-10 11:24:26
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()