使用tkinter实现猜数字游戏

本文介绍了一个使用Python的Tkinter库开发的猜数字游戏。玩家可以在自定义的数字范围内尝试猜测随机数,游戏允许用户设定最多猜测次数。程序包括图形界面、错误处理和战绩展示。背景图和部分代码灵感来源于其他博主的文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于这篇文章所用到的tkinter组件知识和程序,以及该程序的背景图来源,我已经在文章末尾声明来源。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

import random
import tkinter
import tkinter.messagebox
import tkinter.simpledialog
import numpy as np

class Guess_Game(object):
    def __init__(self):
        #初始化主窗口
        self.root=tkinter.Tk()
        #设置窗口标题
        self.root.title('猜数字游戏——Keep_Trying_Go')
        #设置窗口大小
        self.root.geometry('480x180+400+300')
        #设置窗口为不允许改变大小
        self.root.resizable(False,False)

        try:
            #创建画布
            self.canvas=tkinter.Canvas(self.root,height=400,width=700,borderwidth=2)
            #加载图片文件
            self.image_file=tkinter.PhotoImage(file='Background.gif')
            #将图像放置在画布上
            self.image=self.canvas.create_image(0,0,anchor='nw',image=self.image_file)
            #放置在画布上端,也就是主窗口的“前方”
            self.canvas.pack(side='top')
        except:
            print('加载不出图片')
        #用户猜的次数
        self.varNumber=tkinter.StringVar(self.root,value='0')
        #允许用户猜的次数
        self.totalTimes=tkinter.IntVar(self.root,value=0)

        #用户已经猜的次数
        self.already=tkinter.IntVar(self.root,value=0)
        #记录当前生成的随机数
        self.currentNumber=tkinter.IntVar(self.root,value=0)
        #记录玩家玩游戏的总次数
        self.times=tkinter.IntVar(self.root,value=0)
        #记录玩家猜对的总次数
        self.right=tkinter.IntVar(self.root,value=0)

        self.lb=tkinter.Label(self.root,text='请输入一个整数: ')
        self.lb.place(x=70,y=50,width=100,height=30)

        #用户猜的次数并输入文本框
        self.entryNumber=tkinter.Entry(self.root,textvariable=self.varNumber)
        self.entryNumber.place(x=170,y=50,width=150,height=30)

        #游戏开始之后才允许输入数字
        self.entryNumber['state']='disabled'
        self.button=tkinter.Button(self.root,text='Start Game',command=self.buttonClick)
        self.button.place(x=150,y=100,width=80,height=30)

    #按钮单击事件处理函数
    def closeWindows(self):
        self.message='共玩游戏 {0}次,猜对 {1}次!\n欢迎下次再玩!'
        self.message=self.message.format(self.times.get(),self.right.get())
        tkinter.messagebox.showinfo('战绩',self.message)

    def buttonClick(self):
        if self.button['text']=='Start Game':
            #每次游戏时允许用户自定义数值的范围
            #玩家必须输入正确的数字
            while True:
                try:
                    #simpledialog模块参数:title指定对话框的标题;prompt 显示的文字;initialvalue 指定输入框的初始值;
                    self.start=tkinter.simpledialog.askinteger('允许的最小整数','最小数',initialvalue=1)
                    break
                except:
                    pass
            while True:
                try:
                    self.end=tkinter.simpledialog.askinteger('允许的最大整数','最大数',initialvalue=10)
                    break
                except:
                    pass
            #在用户自定义的数值范围内生成随机数
            self.currentNumber.set(random.randint(self.start,self.end))

            #用户自定义一共允许猜的次数
            #玩家必须输入正确的数字
            while True:
                try:
                    self.t=tkinter.simpledialog.askinteger('最多允许猜几次?','总次数',initialvalue=3)
                    self.totalTimes.set(self.t)
                    break
                except:
                    pass

            #已猜的次数初始化为0
            self.already.set(0)
            self.button['text']='剩余次数: '+str(self.t)

            #将文本框初始化为0
            self.varNumber.set('0')
            #允许用户开始输入数字
            self.entryNumber['state']='normal'
            #玩游戏的次数加一
            self.times.set(self.times.get()+1)
        else:
            #一共允许用户猜的次数
            self.total=self.totalTimes.get()
            #本次游戏的正确答案
            self.current=self.currentNumber.get()

            try:
                self.x=int(self.varNumber.get())
            except:
                tkinter.messagebox.showerror('抱歉','必须输入整数')
                return
            if self.x==self.current:
                tkinter.messagebox.showinfo('恭喜','猜对了')
                self.button['text']='Start Game'
                #禁用文本框
                self.entryNumber['state']='disabled'
                self.right.set(self.right.get()+1)
            else:
                #已猜次数加一
                self.already.set(self.already.get()+1)
                if self.x>self.current:
                    tkinter.messagebox.showerror('抱歉','猜的次数太大了')
                else:
                    tkinter.messagebox.showerror('抱歉', '猜的次数太小了')
                #可猜的的次数已经用完
                if self.already.get()==self.total:
                    tkinter.messagebox.showerror('抱歉','游戏结束了,正确的数是: '+str(self.currentNumber.get()))
                    self.button['text']='Start Game'
                    #禁用文本框
                    self.entryNumber['state']='disabled'
                else:
                    self.button['text']='剩余次数: '+str(self.total-self.already.get())



def main():
    g=Guess_Game()
    # g.root.protocol('WM_DELETE_WINDOW', g.closeWindow())
    tkinter.mainloop()
    g.closeWindows()
if __name__ == '__main__':
    main()

关于tkinter的组件学习可以参考这位博主:
https://blog.csdn.net/mingshao104/article/details/79591965
以上程序的背景图来自这位博主:
https://blog.csdn.net/pymonster/article/details/113393829
程序来自《python程序设计基础》

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值