猜数游戏

在游戏中,程序随机生成1024以内的数字,再让玩家去猜,如果猜的数字过大过小都会进行提示,程序还会统计玩家猜的次数。

这个程序使用了图形化界面,主要是对图形化编程进行学习,使用的模块是Tkinter。

python猜牌游戏 python猜数游戏程序_python

界面UI的设计

信息提示在图形框的最上方(即top),默认各组件是在中间部署的(即center),输入框按钮从左到右依次排列。

root = tk.Tk(className="猜数游戏") # 创建Tk对象
root.geometry("400x90+200+200") # 设置图形框大小

各标签组件的创建

label_val_q = tk.Label(root,width="80") # 创建提示标签
label_val_q.pack(side="top") # 放置于最顶端
entry_a = tk.Entry(root,width="40") # 单行输入文本框
entry_a.pack(side="left") # 靠左方
entry_a.bind('<Return>',eBtnGuess) # 绑定事件,将输入框的回车与猜按钮事件绑定
btnGuess = tk.Button(root,text="猜") # 创建猜按钮
btnGuess.pack(side="left") # 靠左放置
btnGuess.bind('<Button-1>',eBtnGuess) # 绑定猜事件
btnClose = tk.Button(root,text="关闭") # 创建关闭按钮
btnClose.pack(side="left") # 靠左放置
btnClose.bind('<Button-1>',eBtnClose) # 绑定关闭事件

进入主循环,打开图形框

labelqval("请输入0~1024的任意整数:") # 打印提示信息
entry_a.focus_set() # 将光标聚焦到文本框里
root.mainloop() # 进入图形循环,类似于进入主函数

信息提示函数实现

使用了提示标签的config()函数进行提示文本的更改。

def labelqval(vText):
    label_val_q.config(label_val_q, text=vText) # 修改提示标签文字

显示次数函数实现

def numGuess():
    if num == 1:
        labelqval("厉害!一次答对!")
    elif num < 10:
        labelqval("=_= 十次内就答对了,很棒...尝试次数:"+str(num))
    else:
        labelqval("你就是个菜鸡,尝试次数超过十次了...尝试次数:"+str(num))

猜数事件函数实现

这是整个猜数的核心代码,所有的判断在这里进行。

def eBtnGuess(event):
    # 调用全局变量
    global nmax
    global nmin
    global num
    global running
    if running:
        val_a = int(entry_a.get()) # 获取猜的数字并转换成数字
        if val_a == number:
            labelqval("恭喜答对了!")
            num += 1
            running = False
            numGuess() # 显示猜的次数
        elif val_a < number: # 猜小了
            if val_a > nmin: # 大于最小数时
                nmin = val_a # 修改提示猜测范围的最小数
                num += 1
                labelqval("小了,请输入"+str(nmin)+"到"+str(nmax)+"之间的任意整数:")
        else:
            if val_a < nmax:
                nmax = val_a # 修改提示猜测范围的最大数
                num += 1
                labelqval("大了,请输入"+str(nmin)+"到"+str(nmax)+"之间的任意整数:")
    else:
        labelqval("你已经答对啦......")

关闭事件函数实现

def eBtnClose(event):
    root.destroy() # 将对象进行销毁

完整代码

import tkinter as tk
import random

number = random.randint(0,1024) # 玩家要猜的数字
running = True
num = 0 # 猜的次数
nmax = 1024 # 猜测范围的最大数
nmin = 0 # 猜测范围的最小数

def eBtnGuess(event):
    global nmax
    global nmin
    global num
    global running
    if running:
        val_a = int(entry_a.get())
        if val_a == number:
            labelqval("恭喜答对了!")
            num += 1
            running = False
            numGuess()
        elif val_a < number:
            if val_a > nmin:
                nmin = val_a
                num += 1
                labelqval("小了,请输入"+str(nmin)+"到"+str(nmax)+"之间的任意整数:")
        else:
            if val_a < nmax:
                nmax = val_a
                num += 1
                labelqval("大了,请输入"+str(nmin)+"到"+str(nmax)+"之间的任意整数:")
    else:
        labelqval("你已经答对啦......")
                
def numGuess():
    if num == 1:
        labelqval("厉害!一次答对!")
    elif num < 10:
        labelqval("=_= 十次内就答对了,很棒...尝试次数:"+str(num))
    else:
        labelqval("你好菜呀,尝试次数超过十次...尝试次数:"+str(num))
        
def labelqval(vText):
    label_val_q.config(label_val_q, text=vText)

def eBtnClose(event):
    root.destroy()

root = tk.Tk(className="猜数游戏")
root.geometry("400x90+200+200")
label_val_q = tk.Label(root,width="80")
label_val_q.pack(side="top")
entry_a = tk.Entry(root,width="40")
entry_a.pack(side="left")
entry_a.bind('<Return>',eBtnGuess)
btnGuess = tk.Button(root,text="猜")
btnGuess.pack(side="left")
btnGuess.bind('<Button-1>',eBtnGuess)
btnClose = tk.Button(root,text="关闭")
btnClose.pack(side="left")
btnClose.bind('<Button-1>',eBtnClose)
labelqval("请输入0~1024的任意整数:")
entry_a.focus_set()
print(number)
root.mainloop()