From 7144087596b558f391e8c7db97cecab58e16e5d7 Mon Sep 17 00:00:00 2001 From: DROUP123 <10160685062@qq.com> Date: Wed, 7 Jan 2026 17:08:47 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0HTML=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=B5=B7=E9=BE=9F=E6=B1=A4=E6=B8=B8=E6=88=8F=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96Python=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor: 重构Python版本代码,增加API错误处理和默认题目功能 docs: 更新README文档,添加开发心得和运行指南 chore: 添加项目依赖到requirements.txt --- README.md | 15 +- requirements.txt | 2 + structual.py | 182 +++++---- turtle_soup_html.html | 634 ----------------------------- turtle_soup_html_v2.html | 860 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 985 insertions(+), 708 deletions(-) create mode 100644 requirements.txt delete mode 100644 turtle_soup_html.html create mode 100644 turtle_soup_html_v2.html diff --git a/README.md b/README.md index 3e0a05f..b92f320 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,19 @@ | 姓名 | 学号 | 主要贡献 (具体分工) | | ---- | ---- | ------------------ | -| 张三 | 2023xxxx | (组长) 核心逻辑开发、Prompt 编写 | -| 李四 | 2023xxxx | 前端界面设计、HTML版本开发 | -| 王五 | 2023xxxx | 文档撰写、测试与Bug修复 | +| 徐艺桐 | 2412131221 | (组长) 核心逻辑开发、代码编写、创意提供与整合| +| 陈晓璐 | 2410511126 | 前端界面设计、HTML版本开发、撰写心得| +| 尚小雅 | 2410511127 | 前期工作台配置、后期测试与Bug修复| ## 项目简介 & 运行指南 ### 简介 -这是一个海龟汤游戏项目,提供了一个交互式平台,用户可以通过提问来猜测海龟汤题目的答案。项目包含HTML版本和Python版本,支持15个精心设计的海龟汤题目,包括代孕等主题,具有完善的关键词匹配系统和现代化的用户界面。 +这是一个海龟汤游戏项目,提供了一个交互式平台,用户可以通过提问来猜测海龟汤题目的答案。项目包含HTML版本海龟汤和python版本(需配置)也可以直接运行structaul.py游玩文字版,可AI编写也可以自定义海龟汤题目,包括许多主题,具有完善的关键词匹配系统和现代化的用户界面。 + +### 开发心得 +开发海龟汤推理游戏,解决传统游戏中主持人负担重、体验不均和故事有限等痛点。通过AI担任主持人,玩家可随时游戏,推理爱好者能获得无限新故事。 +首次用AI编码时颇为震撼,它快速生成出清晰的状态管理代码,但随后发现其缺乏业务理解,需不断调校提示词。最惊喜的是,在描述“提问匹配逻辑”后,AI不仅实现关键词匹配,还建议加入语义相似度计算。而最挫败的是实现进度保存时,AI反复给出简单方案,忽略隔离、兼容等系统设计问题,甚至有时无法理解我的要求,最终仍需自主重构。它无法前瞻性地考虑未来故事数据结构变更带来的“兼容性”挑战。它给出的往往是教科书式的、孤立的代码块,而非一个考虑了数据流、错误边界和长期演进的稳健系统设计。 +这段经历让我反思:AI时代,程序员的核心竞争力正转向问题定义、系统架构与调试能力。AI擅长执行明确指令,但无法替代人类对复杂系统的理解、对用户体验的洞察以及伦理责任的把握。我们不再是单纯的代码实现者,更是人机协作的架构师——善于拆解问题、设计稳健架构,并以创造力和判断力确保最终质量。技术工具会进化,但人类的深度思考与综合判断,始终无可替代。AI不会让程序员失业,但它会重新定义什么才是“优秀”的程序员。那些只会写基础代码的程序员可能会被替代。 ### 如何运行 @@ -51,7 +56,7 @@ - 使用"查看答案"按钮直接查看完整答案 2. **题目特点**: - - 包含15个多样化的海龟汤题目 + - 包含多个多样化的海龟汤题目 - 涵盖代孕、犯罪、情感等多种主题 - 每个题目都有详细的关键词匹配系统 diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..f42172a --- /dev/null +++ b/requirements.txt @@ -0,0 +1,2 @@ +openai>=2.14.0 +python-dotenv>=1.2.1 \ No newline at end of file diff --git a/structual.py b/structual.py index 2ca27b7..18a34f9 100644 --- a/structual.py +++ b/structual.py @@ -10,16 +10,32 @@ import traceback load_dotenv() # 初始化OpenAI客户端 +client = None try: - client = OpenAI( - api_key=os.getenv("DEEPSEEK_API_KEY"), - base_url="https://api.deepseek.com" - ) - print(f"API客户端初始化成功,使用的API Key: {os.getenv('DEEPSEEK_API_KEY')[:10]}...") + api_key = os.getenv("DEEPSEEK_API_KEY") + if not api_key or api_key.strip() == "your_api_key_here" or api_key.strip() == "*****": + print("API密钥未配置,请在.env文件中设置DEEPSEEK_API_KEY") + user_input = input("是否继续使用默认题目?(y/n): ") + if user_input.lower() != "y": + print("程序已退出。") + exit(1) + else: + print("将使用默认题目继续游戏。") + else: + client = OpenAI( + api_key=api_key, + base_url="https://api.deepseek.com" + ) + print(f"API客户端初始化成功,使用的API Key: {api_key[:10]}...") except Exception as e: print(f"API客户端初始化失败: {e}") traceback.print_exc() - exit(1) + user_input = input("是否使用默认题目继续游戏?(y/n): ") + if user_input.lower() != "y": + print("程序已退出。") + exit(1) + else: + print("将使用默认题目继续游戏。") # 游戏数据存储文件 GAME_DATA_FILE = "turtle_soup_data.json" @@ -65,84 +81,112 @@ class TurtleSoupGame: "result": "未完成" } - def generate_story(self, story_type="随机"): + def generate_story(self, theme=None, difficulty=None): """生成海龟汤题目""" print("正在生成海龟汤题目...") - try: - response = client.chat.completions.create( - model="deepseek-chat", - messages=[ - { - "role": "system", - "content": "你是一个海龟汤游戏的出题者。请生成一个有趣且有挑战性的海龟汤题目,包含两个部分:1) 简短的奇怪情境描述(2-3句话);2) 完整的故事解释(包含事件的前因后果)。请确保情境足够引人入胜,让玩家有探索的欲望。" - }, - { - "role": "user", - "content": "生成一个海龟汤题目,用中文回答。格式要求:\n情境:[情境描述]\n答案:[完整解释]" - } - ], - temperature=1.3, - timeout=30 # 添加30秒超时设置 - ) - - print("API调用成功,正在解析结果...") - result = response.choices[0].message.content.strip() - print(f"\nAPI返回的原始内容: {result[:100]}...\n") - - # 解析生成的内容 - if "情境:" in result and "答案:" in result: - scenario_part = result.split("情境:")[1].split("答案:")[0].strip() - solution_part = result.split("答案:")[1].strip() - - self.story = scenario_part - self.solution = solution_part - - # 更新会话数据 - self.session_data["story"] = self.story - self.session_data["solution"] = self.solution - self.session_data["game_type"] = story_type - self.session_data["is_custom"] = False - - print("✅ 海龟汤题目生成成功 ✅") - print(f"\n🥣 汤面:{self.story}\n") - print("🔍 你可以通过提问来猜测故事的真相,游戏中我只会回答'是'、'否'或'无关'。") - print("📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'结束'退出游戏。\n") - else: - print("⚠️ 生成的内容格式不符合要求,使用默认题目...") - # 使用默认题目 - self.story = "一个男人走进一家餐厅,点了一份海龟汤。喝了一口后,他放下汤匙,默默地付了钱离开了餐厅。" - self.solution = "这个男人曾经遭遇海难,和同伴被困在荒岛上。为了生存,同伴们煮了海龟汤给他喝,并告诉他这是他妻子的肉。获救后,他在餐厅喝到真正的海龟汤,才知道自己被骗了,同伴们牺牲了自己来救他。" - - # 更新会话数据 - self.session_data["story"] = self.story - self.session_data["solution"] = self.solution - self.session_data["game_type"] = story_type - self.session_data["is_custom"] = False - - print("✅ 海龟汤题目生成成功 ✅") - print(f"\n🥣 汤面:{self.story}\n") - print("🔍 你可以通过提问来猜测故事的真相,游戏中我只会回答'是'、'否'或'无关'。") - print("📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'结束'退出游戏。\n") - except Exception as e: - print(f"❌ 生成题目时出错: {e}") - print("❌ 详细错误信息:") - traceback.print_exc() - # 使用默认题目作为备选 - print("\n⚠️ 使用默认题目...") + # 检查API客户端是否可用 + if client is None: + print("⚠️ API客户端未初始化,将使用默认题目...") + # 使用默认题目 self.story = "一个男人走进一家餐厅,点了一份海龟汤。喝了一口后,他放下汤匙,默默地付了钱离开了餐厅。" self.solution = "这个男人曾经遭遇海难,和同伴被困在荒岛上。为了生存,同伴们煮了海龟汤给他喝,并告诉他这是他妻子的肉。获救后,他在餐厅喝到真正的海龟汤,才知道自己被骗了,同伴们牺牲了自己来救他。" # 更新会话数据 self.session_data["story"] = self.story self.session_data["solution"] = self.solution - self.session_data["game_type"] = story_type + self.session_data["game_type"] = "默认" self.session_data["is_custom"] = False print("✅ 海龟汤题目生成成功 ✅") print(f"\n🥣 汤面:{self.story}\n") print("🔍 你可以通过提问来猜测故事的真相,游戏中我只会回答'是'、'否'或'无关'。") print("📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'结束'退出游戏。\n") + return + + retry_count = 0 + max_retries = 3 + + while retry_count < max_retries: + try: + # 构建系统提示词 + system_prompt = "你是一个海龟汤游戏的出题者。请生成一个有趣且有挑战性的海龟汤题目,包含两个部分:1) 简短的奇怪情境描述(2-3句话);2) 完整的故事解释(包含事件的前因后果)。请确保情境足够引人入胜,让玩家有探索的欲望。" + + # 添加主题和难度设置 + if theme: + system_prompt += f"\n\n主题要求:{theme}" + if difficulty: + system_prompt += f"\n\n难度要求:{difficulty}" + + response = client.chat.completions.create( + model="deepseek-chat", + messages=[ + { + "role": "system", + "content": system_prompt + }, + { + "role": "user", + "content": "生成一个海龟汤题目,用中文回答。格式要求:\n情境:[情境描述]\n答案:[完整解释]" + } + ], + temperature=1.3, + timeout=30 # 添加30秒超时设置 + ) + + print("API调用成功,正在解析结果...") + result = response.choices[0].message.content.strip() + + # 解析生成的内容 + if "情境:" in result and "答案:" in result: + scenario_part = result.split("情境:")[1].split("答案:")[0].strip() + solution_part = result.split("答案:")[1].strip() + + # 质量验证 + if len(scenario_part) < 10 or len(solution_part) < 50: + print("⚠️ 生成的内容质量不足,重试中...") + retry_count += 1 + time.sleep(1) + continue + + self.story = scenario_part + self.solution = solution_part + + # 更新会话数据 + self.session_data["story"] = self.story + self.session_data["solution"] = self.solution + self.session_data["game_type"] = f"{theme if theme else '随机'}-{difficulty if difficulty else '随机'}" + self.session_data["is_custom"] = False + + print("✅ 海龟汤题目生成成功 ✅") + print(f"\n🥣 汤面:{self.story}\n") + print("🔍 你可以通过提问来猜测故事的真相,游戏中我只会回答'是'、'否'或'无关'。") + print("📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'结束'退出游戏。\n") + return + else: + print("⚠️ 生成的内容格式不符合要求,重试中...") + retry_count += 1 + time.sleep(1) + except Exception as e: + print(f"❌ 生成题目时出错 (尝试 {retry_count+1}/{max_retries}): {e}") + retry_count += 1 + time.sleep(1) + + # 所有重试都失败,使用默认题目 + print("⚠️ 所有重试都失败,使用默认题目...") + self.story = "一个男人走进一家餐厅,点了一份海龟汤。喝了一口后,他放下汤匙,默默地付了钱离开了餐厅。" + self.solution = "这个男人曾经遭遇海难,和同伴被困在荒岛上。为了生存,同伴们煮了海龟汤给他喝,并告诉他这是他妻子的肉。获救后,他在餐厅喝到真正的海龟汤,才知道自己被骗了,同伴们牺牲了自己来救他。" + + # 更新会话数据 + self.session_data["story"] = self.story + self.session_data["solution"] = self.solution + self.session_data["game_type"] = "默认" + self.session_data["is_custom"] = False + + print("✅ 海龟汤题目生成成功 ✅") + print(f"\n🥣 汤面:{self.story}\n") + print("🔍 你可以通过提问来猜测故事的真相,游戏中我只会回答'是'、'否'或'无关'。") + print("📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'结束'退出游戏。\n") def guess_solution(self, guess): """处理玩家的答案猜测""" diff --git a/turtle_soup_html.html b/turtle_soup_html.html deleted file mode 100644 index 0c865c2..0000000 --- a/turtle_soup_html.html +++ /dev/null @@ -1,634 +0,0 @@ - - - - - - 🐢 海龟汤游戏 - - - -
-
-

🐢 海龟汤游戏

-

通过提问来猜测故事的真相,我只会回答「是」、「否」或「无关」

-
- -
-
-

🥣 汤面

-
点击「新游戏」开始游戏
-
- -
-

💬 对话

-
-
欢迎来到海龟汤游戏!点击「新游戏」开始,或者查看规则。
-
- -
- - -
- -
- - - - -
-
-
- - -
- - - - \ No newline at end of file diff --git a/turtle_soup_html_v2.html b/turtle_soup_html_v2.html new file mode 100644 index 0000000..c2c7a4a --- /dev/null +++ b/turtle_soup_html_v2.html @@ -0,0 +1,860 @@ + + + + + + 海龟汤游戏 + + + +
+

🐢 海龟汤游戏 🐢

+ +
+

🔍 海龟汤是一种情境猜谜游戏,我会给出一个奇怪的情境,你可以通过提问来猜测故事的真相。

+

💬 我只会回答'是'、'否'或'无关'。

+

📋 输入'答案'查看完整故事,输入'新题'生成新的题目,输入'自定义'创建自己的题目,

+

📋 输入'提示'获取线索,输入'猜测 内容'尝试猜测答案,输入'结束'退出游戏。

+
+ +
+
+
+ +
+
🥣 汤面
+
请选择游戏模式开始游戏
+
+ + + +
+ + + + + + +
+ +
+
+
+ + +
+
+ + + +
+ + + + \ No newline at end of file