简单做一个舒尔特方格小游戏

以下是一个 Python 简易舒尔特方格小游戏,基于 tkinter 实现(无需额外安装第三方库),支持自定义方格大小、计时计分、自动生成随机数字,新手可直接复制运行:

舒尔特方格小游戏(Python 代码)
`import tkinter as tk
from tkinter import messagebox
import random
import time

class SchulteGrid:
def init(self, root):
self.root = root
self.root.title("舒尔特方格小游戏")
self.root.geometry("500x600") # 窗口大小

    # 游戏配置
    self.grid_size = 3  # 默认3x3方格(可修改为4/5/6)
    self.total_num = self.grid_size * self.grid_size  # 总数字数
    self.correct_num = 1  # 当前需要点击的正确数字
    self.start_time = None  # 开始时间
    self.game_over = False  # 游戏结束标记

    # 界面组件
    self.create_ui()

def create_ui(self):
    # 标题
    self.title_label = tk.Label(
        self.root, text=f"舒尔特方格 ({self.grid_size}x{self.grid_size})",
        font=("Arial", 20, "bold")
    )
    self.title_label.pack(pady=20)

    # 计时标签
    self.time_label = tk.Label(self.root, text="时间:0.00s", font=("Arial", 14))
    self.time_label.pack(pady=10)

    # 方格容器(居中显示)
    self.grid_frame = tk.Frame(self.root)
    self.grid_frame.pack(pady=20)

    # 生成随机数字列表(1~n²不重复)
    self.numbers = random.sample(range(1, self.total_num + 1), self.total_num)

    # 创建方格按钮
    self.buttons = []
    for i in range(self.grid_size):
        row_buttons = []
        for j in range(self.grid_size):
            num = self.numbers[i * self.grid_size + j]
            btn = tk.Button(
                self.grid_frame, text=str(num),
                font=("Arial", 16, "bold"),
                width=6, height=3,
                command=lambda n=num: self.click_number(n)
            )
            btn.grid(row=i, column=j, padx=5, pady=5)
            row_buttons.append(btn)
        self.buttons.append(row_buttons)

    # 重置按钮
    self.reset_btn = tk.Button(
        self.root, text="重新开始", font=("Arial", 14),
        command=self.reset_game
    )
    self.reset_btn.pack(pady=10)

def click_number(self, num):
    # 游戏未开始时,记录开始时间
    if self.start_time is None:
        self.start_time = time.time()

    # 点击正确数字
    if num == self.correct_num and not self.game_over:
        # 标记已点击(灰色不可点击)
        for i in range(self.grid_size):
            for j in range(self.grid_size):
                if self.buttons[i][j]["text"] == str(num):
                    self.buttons[i][j]["bg"] = "#cccccc"
                    self.buttons[i][j]["state"] = tk.DISABLED

        # 下一个目标数字
        self.correct_num += 1

        # 游戏结束(所有数字按顺序点击完成)
        if self.correct_num > self.total_num:
            self.game_over = True
            end_time = time.time()
            total_time = round(end_time - self.start_time, 2)
            messagebox.showinfo("恭喜!", f"游戏结束!\n总用时:{total_time}s")

    # 实时更新计时
    if self.start_time and not self.game_over:
        current_time = round(time.time() - self.start_time, 2)
        self.time_label["text"] = f"时间:{current_time}s"

def reset_game(self):
    # 重置游戏状态
    self.correct_num = 1
    self.start_time = None
    self.game_over = False
    self.time_label["text"] = "时间:0.00s"

    # 重新生成随机数字
    self.numbers = random.sample(range(1, self.total_num + 1), self.total_num)

    # 重置按钮状态
    for i in range(self.grid_size):
        for j in range(self.grid_size):
            num = self.numbers[i * self.grid_size + j]
            self.buttons[i][j]["text"] = str(num)
            self.buttons[i][j]["bg"] = self.root["bg"]
            self.buttons[i][j]["state"] = tk.NORMAL

if name == "main":
root = tk.Tk()
game = SchulteGrid(root)
root.mainloop()`

游戏玩法说明
规则:按「1→2→3→…→n²」的顺序点击方格,全部点击完成后统计用时,用时越短注意力越集中。
操作:
运行代码后,自动生成 3x3 随机方格(默认)。
点击「重新开始」可刷新新的随机方格。
完成所有数字点击后,弹出提示框显示总用时。
自定义修改(新手友好)
调整方格大小:将代码中 self.grid_size = 3 改为 4/5/6,即可生成 4x4、5x5、6x6 方格(数字范围自动对应 116、125、1~36)。
修改窗口大小:调整 self.root.geometry("500x600") 中的数值(如 600x700 适配更大方格)。
更改字体 / 颜色:修改 font=("Arial", 16, "bold") 中的字体、大小,或 bg="#cccccc" 中的颜色代码(如红色 #ff0000)。
运行方式
复制上述代码到 Python 编辑器(如 IDLE、PyCharm、VS Code)。
直接运行代码(Python 3.x 版本均可),即可弹出游戏窗口。
无需安装额外库,tkinter 是 Python 内置模块,默认自带。
适合用来训练注意力、反应速度,也可作为 Python 入门练手项目,核心用到了随机数生成、界面布局、事件绑定等基础知识点~

posted @ 2025-11-15 20:50  福寿螺888  阅读(20)  评论(0)    收藏  举报