Python小程序 GUI猜数字大小

这段代码是一个简单的猜数字游戏的实现。它使用了Python的Tkinter库来创建一个图形用户界面(GUI)窗口。玩家需要在输入框中猜一个1到100之间的整数,然后点击确定按钮进行猜测。程序会根据玩家的猜测给出相应的提示,直到玩家猜对或者猜测次数达到5次为止。游戏界面包括标题标签、时间标签、游戏次数标签、说明标签、输入框、确定按钮、底部提示标签以及重新开始和查看答案按钮。其中,时间标签会实时更新当前时间,游戏次数标签会显示玩家已经猜测的次数。玩家可以通过重新开始按钮重新开始游戏,通过查看答案按钮查看正确答案。整个游戏界面的布局和交互逻辑都由Tkinter库提供的功能来实现。

import tkinter as tk  # 导入 tkinter 模块并将其别名为 'tk'
from tkinter import messagebox  # 从 tkinter 导入 'messagebox' 模块
import random  # 导入 'random' 模块
import time  # 导入 'time' 模块

# 生成随机数
def generate_random_number():
    return random.randint(1, 100)

number = generate_random_number()  # 生成一个随机数并赋值给 'number' 变量
guess_count = 0  # 将 'guess_count' 变量初始化为 0

def check_guess():  # 定义一个函数用于检查用户的猜测
    global guess_count  # 访问全局变量 'guess_count'
    guess = int(entry.get())  # 从输入框中获取用户的猜测并将其转换为整数
    guess_count += 1  # 将 'guess_count' 变量加 1
    update_guess_count()  # 调用函数更新猜测次数的标签
    if guess == number:  # 如果猜测正确
        messagebox.showinfo("猜数字", f"恭喜你,猜对了!答案是 {number}")  # 显示一个带有正确答案的消息框
        restart_game()  # 调用函数重新开始游戏
    elif guess_count == 5:  # 如果猜测次数达到 5 次且没有猜对
        messagebox.showinfo("猜数字", f"很遗憾,你没有猜对。答案是 {number}")  # 显示一个带有正确答案的消息框
        restart_game()  # 调用函数重新开始游戏
        window.destroy()  # 销毁 tkinter 窗口
    elif guess < number:  # 如果猜测小于随机数
        messagebox.showinfo("猜数字", "猜小了,请再试一次。")  # 显示一个提示信息框,提示猜测更大的数字
    else:  # 如果猜测大于随机数
        messagebox.showinfo("猜数字", "猜大了,请再试一次。")  # 显示一个提示信息框,提示猜测更小的数字

def restart_game():  # 定义一个函数重新开始游戏
    global number, guess_count  # 访问全局变量 'number' 和 'guess_count'
    number = generate_random_number()  # 生成一个新的随机数
    guess_count = 0  # 将猜测次数重置为 0
    entry.delete(0, tk.END)  # 清空输入框
    update_guess_count()  # 调用函数更新猜测次数的标签

def show_answer():  # 定义一个函数显示正确答案
    messagebox.showinfo("猜数字", f"正确答案是 {number}")  # 显示一个带有正确答案的消息框

window = tk.Tk()  # 创建一个 tkinter 窗口
window.title("猜数字")  # 设置窗口的标题
window.geometry("480x347+700+250")  # 设置窗口的大小和位置
window.configure(bg="#F0F0F0")  # 设置窗口的背景颜色

# 创建标题标签
title_label = tk.Label(window, text="猜数字游戏", font=("Arial", 16, "bold"), bg="#F0F0F0", fg="#333333")
title_label.pack(pady=10)

# 创建时间标签
time_label = tk.Label(window, text="", font=("Arial", 12), bg="#F0F0F0")
time_label.pack()

# 创建游戏次数标签
count_label = tk.Label(window, text="游戏次数:0", font=("Arial", 12), bg="#F0F0F0")
count_label.pack(pady=5)

# 创建说明标签
instruction_label = tk.Label(window, text="请输入一个1到100之间的整数:", font=("Arial", 12), bg="#F0F0F0")
instruction_label.pack(pady=5)

# 创建输入框
entry = tk.Entry(window, font=("Arial", 12))
entry.pack(pady=5)
entry.focus()  # 设置焦点在输入框上,方便用户直接输入

# 创建按钮
button = tk.Button(window, text="确定", font=("Arial", 12), command=check_guess, bg="#4CAF50", fg="white",
                   activebackground="#45A049", activeforeground="white", relief=tk.RAISED)
button.pack(pady=10, ipadx=10, ipady=3)

# 创建底部提示标签
footer_label = tk.Label(window, text="最多猜5次", font=("Arial", 10), bg="#F0F0F0", fg="#808080")
footer_label.pack(pady=5)

# 创建重新开始按钮
restart_button = tk.Button(window, text="重新开始", font=("Arial", 12), command=restart_game, bg="#f44336", fg="white",
                           activebackground="#d32f2f", activeforeground="white", relief=tk.RAISED)
restart_button.pack(side=tk.LEFT, ipadx=10, ipady=3)

# 创建查看答案按钮
answer_button = tk.Button(window, text="查看答案", font=("Arial", 12), command=show_answer, bg="#2196F3", fg="white",
                          activebackground="#1976D2", activeforeground="white", relief=tk.RAISED)
answer_button.pack(side=tk.RIGHT, ipadx=10, ipady=3)

def update_time():  # 定义一个函数更新时间
    current_time = time.strftime("%Y年%m月%d日 %H:%M:%S")  # 获取当前时间
    time_label.config(text=f"当前时间:{current_time}")  # 更新时间标签的文本
    window.after(1000, update_time)  # 每隔一秒调用自身函数更新时间

def update_guess_count():  # 定义一个函数更新猜测次数
    count_label.config(text=f"游戏次数:{guess_count}")  # 更新游戏次数标签的文本

update_time()  # 调用函数开始更新时间

window.mainloop()  # 进入 tkinter 的主事件循环,显示窗口

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

@pon

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

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

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

打赏作者

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

抵扣说明:

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

余额充值