Python 实现古诗词猜词游戏
1. 项目需求
2. 技术查询表
2.1 编程语言 & 库
序号 | 名称 | 功能 |
---|---|---|
01 | Python | 项目所使用的编程语言 |
02 | tkinter | Python 小型实现 GUI 的库(官方自带的 Python 库)|GUI:你现在看见的应用程序界面,这些都是 GUI |
03 | random | Python 中实现随机数的库 |
04 | time | Python 自带的时间库 |
2.2 语法知识
- 面向对象编程
- 函数
- 列表
2.3 单词
序号 | 单词 | 中文 | 序号 | 单词 | 中文 | 序号 | 单词 | 中文 |
---|---|---|---|---|---|---|---|---|
01 | self | 自己、自身 | 02 | text | 文本 | 03 | time | 时间 |
04 | shuffled | 洗牌、打乱 | 05 | random | 随机 | 06 | start | 开始、启动 |
07 | Label | 标签 | 08 | font | 文字、字体 | 09 | count | 数量 |
10 | None | 没有 | 11 | custom | 自定义 | 12 | correct | 正确 |
3. 游戏设计原则
下面是这个游戏的设计思路概述:
3.1 游戏目标:
玩家的目标是将乱序的字符按照原始古诗的顺序点击,从而恢复古诗的原文。
3.2 初始化与数据准备:
古诗文本处理:首先,我们将古诗的每个字单独分割出来,使其成为一个字符列表。这使得我们可以对其进行随机乱序,并在稍后为每个字符创建按钮。
随机乱序:我们复制了原始字符列表,并使用
random.shuffle
函数对其进行随机乱序。这将为玩家提供一个挑战,让他们按照原始顺序恢复古诗。跟踪与状态:为了跟踪玩家的进度和时间,我们设置了几个变量:
correct_count
跟踪已经正确点击的字符数量,start_time
跟踪游戏开始的时间。
3.3 用户界面构建:
显示原始古诗:我们在窗口的顶部使用标签显示原始古诗,这样玩家可以参考。
创建按钮:对于乱序列表中的每个字符,我们都创建了一个按钮。每个按钮都有一个点击事件,当被点击时,会调用
check_word
函数来判断是否按照正确的顺序点击。
3.4 游戏逻辑:
开始计时:当玩家点击第一个按钮时,游戏开始计时。
字符校验:每当玩家点击一个按钮时,
check_word
函数都会被调用。它首先检查点击的字符是否与原始文本中当前位置的字符匹配。进度跟踪:如果字符匹配,我们更新
correct_count
变量并禁用已点击的按钮。如果玩家点击了所有的按钮并且都是正确的顺序,那么游戏结束。错误处理:如果玩家点击的字符与期望的字符不匹配,将会显示一个错误消息框。
3.5 结束与反馈:
计时器更新:在游戏进行中,窗口的标题会显示已经过去的时间。
结束反馈:当玩家成功点击所有的字符并按照正确的顺序恢复了古诗,一个消息框会显示,告诉玩家他们完成了游戏,并告诉他们总共用了多少时间。
这就是这款古诗恢复游戏的设计思路。它是一个简单但有趣的方式,可以让玩家练习和认识古诗。
4. Code
import tkinter as tk
from tkinter import messagebox
import random
import time
class Game(tk.Tk):
def __init__(self, text):
super().__init__()
# 将输入的文本转换为单个字符的列表
self.text = list(text)
# 创建一个乱序的字符列表
self.shuffled = self.text.copy()
random.shuffle(self.shuffled)
# 用来跟踪已经匹配正确的字符数
self.correct_count = 0
# 跟踪游戏开始的时间
self.start_time = None
# 在窗口顶部显示原始文本
tk.Label(self, text="原文:").pack()
tk.Label(self, text=text, wraplength=400).pack(pady=10)
# 在原文下方显示乱序的字符,用户需要按照原文的顺序点击它们
tk.Label(self, text="点击以下文字,按照正确顺序恢复文本:").pack(pady=20)
# 为乱序列表中的每个字符创建一个按钮
# 当按钮被点击时,会调用 self.check_word 函数
self.buttons = [tk.Button(self, text=char, command=lambda c=char: self.check_word(c)) for char in self.shuffled]
for button in self.buttons:
button.pack(side=tk.LEFT, padx=2, pady=10)
def check_word(self, char):
# 当第一个按钮被点击时,记录开始时间,并开始更新计时器
if self.start_time is None:
self.start_time = time.time()
self.update_timer()
# 检查点击的字符是否与原文中的当前位置的字符匹配
if char == self.text[self.correct_count]:
# 如果匹配,增加正确计数
self.correct_count += 1
# 如果所有字符都匹配成功,结束游戏
if self.correct_count == len(self.text):
self.end_game()
# 禁用已经点击的按钮
for button in self.buttons:
if button['text'] == char:
button.config(state=tk.DISABLED)
break
else:
# 如果字符不匹配,显示错误消息
messagebox.showerror("错误", "字符选择不正确!")
def update_timer(self):
# 更新窗口标题,显示已经过去的时间
if self.start_time:
elapsed_time = int(time.time() - self.start_time)
self.title(f"已经过去 {elapsed_time} 秒")
self.after(1000, self.update_timer) # 每秒更新一次
def end_game(self):
# 当游戏结束时,计算总时间并显示完成消息
elapsed_time = int(time.time() - self.start_time)
messagebox.showinfo("完成", f"恭喜你完成了游戏! 耗时 {elapsed_time} 秒")
if __name__ == "__main__":
sample_text = "但愿人长久,千里共婵娟"
# 创建游戏窗口并启动游戏
app = Game(sample_text)
app.title("古诗恢复游戏")
app.mainloop()
import tkinter as tk
from tkinter import messagebox
import random
import time
class Game(tk.Tk):
def __init__(self, text):
super().__init__()
self.text = list(text) # 把文本转为单字列表
self.shuffled = self.text.copy()
random.shuffle(self.shuffled)
self.correct_count = 0
self.start_time = None
# 显示原始文本
tk.Label(self, text="原文:").pack()
tk.Label(self, text=text, wraplength=400).pack(pady=10)
# 显示乱序的单词,供玩家点击
tk.Label(self, text="点击以下文字,按照正确顺序恢复文本:").pack(pady=20)
self.buttons = [tk.Button(self, text=char, command=lambda c=char: self.check_word(c)) for char in self.shuffled]
for button in self.buttons:
button.pack(side=tk.LEFT, padx=2, pady=10)
def check_word(self, char):
if self.start_time is None:
self.start_time = time.time()
self.update_timer()
if char == self.text[self.correct_count]:
self.correct_count += 1
if self.correct_count == len(self.text):
self.end_game()
for button in self.buttons:
if button['text'] == char:
button.config(state=tk.DISABLED)
break
else:
messagebox.showerror("错误", "字符选择不正确!")
def update_timer(self):
if self.start_time:
elapsed_time = int(time.time() - self.start_time)
self.title(f"已经过去 {elapsed_time} 秒")
self.after(1000, self.update_timer)
def end_game(self):
elapsed_time = int(time.time() - self.start_time)
messagebox.showinfo("完成", f"恭喜你完成了游戏! 耗时 {elapsed_time} 秒")
if __name__ == "__main__":
sample_text = "但愿人长久,千里共婵娟"
app = Game(sample_text)
app.title("古诗恢复游戏")
app.mainloop()
公众号:AI悦创【二维码】

AI悦创·编程一对一
AI悦创·推出辅导班啦,包括「Python 语言辅导班、C++ 辅导班、java 辅导班、算法/数据结构辅导班、少儿编程、pygame 游戏开发、Web、Linux」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践等。当然,还有线下线上摄影课程、Photoshop、Premiere 一对一教学、QQ、微信在线,随时响应!微信:Jiabcdefh
C++ 信息奥赛题解,长期更新!长期招收一对一中小学信息奥赛集训,莆田、厦门地区有机会线下上门,其他地区线上。微信:Jiabcdefh
方法一:QQ
方法二:微信:Jiabcdefh

- 0
- 0
- 0
- 0
- 0