Python实验之Tkinter版猜数小游戏

题目描述
使用 Python 标准库 tkinter 编写 GUI 版本的猜数游戏。 每次猜数之前要启动游戏并设置猜数范围和最大猜测次数等参数, 退出游戏时显示战绩(共玩几次, 猜对几次) 信息

代码实现

import random
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
root = tkinter.Tk()
#窗口标题
root.title('猜数游戏')
canvas=tkinter.Canvas(root,width=400,height=400)#创建一个画布,声明宽和高
canvas.create_text(200,50,text="欢迎来到猜数游戏",fill="blue",font=('boldface', 14))#画布名称,颜色,字体大小
canvas.pack()
#窗口初始大小
root.geometry('400x250')
#不允许改变窗口大小
root.resizable(False, False)
#用户猜的数
varNumber = tkinter.StringVar(root, value='0')
#允许猜的总次数
totalTimes = tkinter.IntVar(root, value=0)
#已经猜的次数
already = tkinter.IntVar(root, value=0)
#当前生成的随机数
currentNumber = tkinter.IntVar(root, value=0)
#玩家玩游戏的总次数
times = tkinter.IntVar(root, value=0)
#玩家猜对的总次数
right = tkinter.IntVar(root, value=0)
lb = tkinter.Label(root, text='请输入一个整数:')
lb.place(x=60, y=120, width=100, height=20)
#用户猜数并输入的文本框
entryNumber = tkinter.Entry(root, width=100, textvariable=varNumber)
entryNumber.place(x=160, y=120, width=100, height=20)
#只有开始游戏以后才允许输入
entryNumber['state'] = 'disabled'
#关闭程序时提示战绩
def closeWindow():
    message = '本次共玩游戏 {0} 次,猜对 {1} 次!\n欢迎下次再玩!'.format(times.get(), right.get())
    tkinter.messagebox.showinfo('战绩', message)
    root.destroy()
root.protocol('WM_DELETE_WINDOW', closeWindow)
#按钮单击事件处理函数
def buttonClick():
    if button['text']=='开始游戏':
        #每次游戏时允许用户自定义数值范围
        #玩家必须输入正确的数
        while True:
            try:
                start = tkinter.simpledialog.askinteger('允许的最小整数', '最小数', initialvalue=1)
                break
            except:
                pass
        while True:
            try:
                end = tkinter.simpledialog.askinteger('允许的最大整数', '最大数', initialvalue=10)
                break
            except:
                pass
        #在用户自定义的数值范围内生成随机数
        currentNumber.set(random.randint(start, end))
         #用户自定义一共允许猜几次
        #玩家必须输入正确的整数
        while True:
            try:
                t = tkinter.simpledialog.askinteger('最多允许猜几次?', '总次数', initialvalue=3)
                totalTimes.set(t)
                break
            except:
                pass
        #已猜次数初始化为0
        already.set(0)
        button['text'] = '剩余次数:' + str(t)
        #把文本框初始化为0
        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:
            tkinter.messagebox.showerror('抱歉', '必须输入整数')
            return
        if x == current:
            tkinter.messagebox.showinfo('恭喜', '猜对啦')
            button['text'] = '开始游戏'
            #禁用文本框
            entryNumber['state'] = 'disabled'
            #已猜次数加1
            right.set(right.get() + 1)
        else:
            already.set(already.get()+1)
            if x > current:
                tkinter.messagebox.showerror('抱歉', '猜的数太大了')
            else:
                tkinter.messagebox.showerror('抱歉', '猜的数太小了')
            #可猜次数用完了
            if already.get()==total:
                tkinter.messagebox.showerror('抱歉', '游戏结束了,正确的数是:'+str(currentNumber.get()))
                button['text'] = '开始游戏'
                #禁用文本框
                entryNumber['state'] = 'disabled'
            else:
                button['text'] = '剩余次数:' + str(total-already.get())
#在窗口上创建按钮,并设置按钮点击事件处理函数
button = tkinter.Button(root, text='开始游戏', command=buttonClick)
button.place(x=140, y=180, width=80, height=20)
#启动消息主循环
root.mainloop()

效果展示:
运行结果:(进入主界面当没有点击开始游戏按钮时 文本框禁止输入)
在这里插入图片描述

点击开始游戏后:(进行猜数范围的设置)
在这里插入图片描述
在这里插入图片描述

范围设置后 进行猜数次数的限制
在这里插入图片描述

然后回到主界面开始猜数:
数猜小了:
在这里插入图片描述

数猜大了:

在这里插入图片描述

数猜对了:
在这里插入图片描述

次数用完了:(显示游戏结束并显示正确结果)
在这里插入图片描述

关闭主窗口后:(显示玩游戏的次数,正确的次数等)
在这里插入图片描述
完结

  • 9
    点赞
  • 74
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
以下是一个简单的猜数游戏的示例代码,使用PythonGUItkinter实现: ```python import random import tkinter as tk class GuessNumberGame: def __init__(self, master): self.master = master master.title("猜数游戏") self.guess_count = 0 self.secret_number = random.randint(1, 100) self.label = tk.Label(master, text="猜数游戏,猜一下我心里想的数是多少(1-100):") self.label.pack() self.guess_entry = tk.Entry(master) self.guess_entry.pack() self.guess_button = tk.Button(master, text="猜一下", command=self.check_guess) self.guess_button.pack() self.result_label = tk.Label(master, text="") self.result_label.pack() def check_guess(self): self.guess_count += 1 guess = int(self.guess_entry.get()) if guess == self.secret_number: self.result_label.config(text=f"恭喜你,猜对了!你猜了{self.guess_count}次。") self.guess_button.config(state=tk.DISABLED) elif guess < self.secret_number: self.result_label.config(text="你猜的数太小了,请再试一次。") else: self.result_label.config(text="你猜的数太大了,请再试一次。") # 创建tkinter应用程序实例 root = tk.Tk() # 创建猜数游戏实例 game = GuessNumberGame(root) # 运行应用程序 root.mainloop() ``` 运行上述代码后,将会弹出一个GUI窗口,用户可以在窗口中输入数字并点击“猜一下”按钮进行猜数。程序会根据用户的猜测,给出相应的提示,直到猜对为止。同时,程序还会记录用户猜测的次数,并在猜对后禁用“猜一下”按钮。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的小汪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值