当前位置: 首页 > news >正文

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

以下是一个 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 = Trueend_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 = 1self.start_time = Noneself.game_over = Falseself.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 入门练手项目,核心用到了随机数生成、界面布局、事件绑定等基础知识点~

http://www.jsqmd.com/news/41294/

相关文章:

  • C语言新手怎么快速掌握
  • RSS and Atom
  • Wi-Fi FTM(Fine Timing Measurement)简介
  • 通用会话控制方案
  • LISTAGG 用于将多行数据聚合为单行字符串(拼接),而与其功能相反的需求是 将单行字符串按指定分隔符拆分为多行数据
  • ESP32 I2S音频总线学习笔记(八):添加按键控制功能 - 详解
  • 2025年8款AI论文写作神器推荐:轻松搞定毕业论文查重
  • 基于python的酒店管理系统_36rhk752(Pycharm Flask Django成品源码LW) - 详解
  • pythontip 从字典中删除一组键
  • Softmax 函数全面而详细的解读,原理、图像、应用 - 详解
  • 中级前端工程师详细技能清单
  • Atcoder FPS 24 记录
  • 扩展单调栈扫描线维护历史信息
  • 酵母单杂交 (Y1H):蛋白质 - DNA 互作研究的 基因解码器
  • ORACLE行记录转字符串用分隔符连接的两个函数:WM_CONCAT、LISTAGG
  • MySQL 8+ 日志管理与数据备份恢复实战指南 - 指南
  • 航运、应急、工业适用,AORO P1100三防平板引领行业数字化变革 - 详解
  • 20232419 2025-2026-1 《网络与系统攻防技术》实验五实验报告
  • 为什么高手写 CSS 都偏爱 rem?这三大优势无法拒绝
  • 完整教程:FPGA 49 ,Xilinx Vivado 软件术语解析(Vivado 界面常用英文字段详解,以及实际应用场景和注意事项 )
  • 前端css中rem的作用
  • 第三十天
  • WinDbg 随笔 001 —— HelloWorld + WinDbg
  • 数据结构2:单链表 - 教程
  • 20251115 - Hash 总结
  • BZOJ2372 music
  • P11664 [JOI 2025 Final] 缆车 / Mi Telefrico
  • WPF中RelayCommand的完成与使用详解
  • C++篇(14)二叉树进阶算法题 - 详解
  • Python 潮流周刊#127:Python 3.16 JIT 性能提升计划