5.23总结
import os
import tkinter as tk
import random
import time
class MemoryGame:
def init(self, master):
self.master = master
self.master.title("记忆测试系统")
# 初始化游戏设置
self.level = tk.StringVar()
self.level.set("初级")
self.grid_size = 4
self.icons_per_row = 2
self.icons = ["A", "B", "C", "D", "E", "F", "G", "H"]
self.icons_shown = []
self.icons_clicked = []
self.time_start = None
self.time_end = None
self.score_board = []
# 创建界面元素
self.create_widgets()
# 创建 score_board.txt 文件
if not os.path.exists("score_board.txt"):
with open("score_board.txt", "w") as f:
pass
def create_widgets(self):
# 创建级别选择框
level_frame = tk.Frame(self.master)
level_frame.pack(pady=10)
level_label = tk.Label(level_frame, text="请选择级别:")
level_label.pack(side=tk.LEFT, padx=5)
level_option = tk.OptionMenu(level_frame, self.level, "初级", "中级", "高级", command=self.set_level)
level_option.pack(side=tk.LEFT)
# 创建测试区域
self.grid_frame = tk.Frame(self.master)
self.grid_frame.pack(pady=10)
# 创建记分板
score_frame = tk.Frame(self.master)
score_frame.pack(pady=10)
score_label = tk.Label(score_frame, text="成绩排行榜:")
score_label.pack(side=tk.LEFT, padx=5)
score_button = tk.Button(score_frame, text="查看成绩", command=self.show_score_board)
score_button.pack(side=tk.LEFT)
def set_level(self, level):
# 根据级别设置游戏参数
if level == "初级":
self.grid_size = 4
self.icons_per_row = 2
elif level == "中级":
self.grid_size = 12
self.icons_per_row = 4
elif level == "高级":
self.grid_size = 24
self.icons_per_row = 6
# 生成测试区域
self.generate_grid()
def generate_grid(self):
# 随机生成一组图标
self.icons_shown = []
for i in range(self.grid_size // 2):
icon = random.choice(self.icons)
self.icons_shown.append(icon)
self.icons_shown.append(icon)
random.shuffle(self.icons_shown)
# 创建测试区域
for widget in self.grid_frame.winfo_children():
widget.destroy()
for i in range(self.grid_size):
button = tk.Button(self.grid_frame, text="", width=5, height=2, command=lambda i=i: self.click_icon(i))
button.grid(row=i // self.icons_per_row, column=i % self.icons_per_row)
# 重置游戏状态
self.icons_clicked = []
self.time_start = None
self.time_end = None
def click_icon(self, index):
# 记录点击时间
if not self.time_start:
self.time_start = time.time()
# 显示图标
icon = self.icons_shown[index]
self.icons_clicked.append(icon)
button = self.grid_frame.winfo_children()[index]
button.configure(text=icon)
# 判断是否连续单击出 n 个图标相同的方块
n = 6 if self.level.get() == "初级" else 8 if self.level.get() == "中级" else 12
if len(self.icons_clicked) >= n:
if all(icon == self.icons_clicked[-1] for icon in self.icons_clicked[-n:]):
self.show_dialog()
elif len(self.icons_clicked) > 1 and icon != self.icons_clicked[-2]:
for i in range(-1, -len(self.icons_clicked)-1, -1):
if self.icons_clicked[i] != icon:
button = self.grid_frame.winfo_children()[self.icons_shown.index(self.icons_clicked[i])]
button.configure(text="")
self.icons_clicked.pop(i)
else:
break
def show_dialog(self):
# 停止计时
self.time_end = time.time()
# 显示成绩对话框
dialog = tk.Toplevel(self.master)
dialog.title("保存成绩")
dialog.geometry("200x150")
time_label = tk.Label(dialog, text="用时:%.2f秒" % (self.time_end - self.time_start))
time_label.pack(pady=10)
save_button = tk.Button(dialog, text="保存成绩", command=lambda: self.save_score(dialog))
save_button.pack(pady=10)
def save_score(self, dialog):
# 保存成绩
score = {"level": self.level.get(), "time": self.time_end - self.time_start}
self.score_board.append(score)
self.score_board.sort(key=lambda x: x["time"])
if len(self.score_board) > 10:
self.score_board = self.score_board[:10]
with open("score_board.txt", "w") as f:
for score in self.score_board:
f.write("%s %.2f\n" % (score["level"], score["time"]))
self.show_score_board()
dialog.destroy()
def show_score_board(self):
# 显示成绩排行榜
dialog = tk.Toplevel(self.master)
dialog.title("成绩排行榜")
dialog.geometry("200x200")
with open("score_board.txt", "r") as f:
scores = f.readlines()
for i, score in enumerate(scores):
score_label = tk.Label(dialog, text="%d. %s" % (i+1, score))
score_label.pack()
if name == "main":
root = tk.Tk()
app = MemoryGame(root)
root.mainloop()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏