极妙幻境 · 造物笔记
🌟 极妙幻境 · 造物笔记
一个Java后端的两周AI游戏开发之旅
当修仙幻境遇上大语言模型,当道德选择碰撞卡牌对战——
我用两周时间,从零到一完成了一款AI原生的文字游戏。
这不仅是代码的堆砌,更是一场关于“设计”与“驾驭AI”的实验。
🧠 项目简介 | What is 极妙幻境?
极妙幻境 是一款基于 LLM 动态叙事 的文字冒险游戏。
玩家扮演散修 李飞宇,误入上古修士留下的试炼幻境。
在 10层幻境、200轮选择 中,每一次决定都将影响 善/中立/恶 三值道心,累积卡牌,最终挑战个性化心魔,触发 7种不同结局。
核心创新:
- 🎭 道德三值 + 比例斩杀:任一倾向超过90%即触发极端结局(圣母必死/恶人自收/一事无成)
- 🔥 迫选测验机制:连续选择同一选项权重递增,防无脑连点
- 🃏 唬牌BOSS战:心理博弈 + 万能牌干扰,规则AI + LLM预生成台词
- 👻 境灵设定:同伴即心魔,全程陪伴与反转
🗓️ 两周开发时间线 | Timeline
timeline
title 极妙幻境 · 两周开发冲刺
Week1-1 : 核心算法设计(道德三值 / 牌数控制)
: BOSS战规则推演
Week1-2 : 编写提示词模板(场景 / 层间事件 / 心魔台词)
: 配置管理模块
Week2-1 : LLM队友提示 / 卡牌命名生成
: BOSS战主逻辑实现
Week2-2 : 层间事件 / 选项后续生成
: 系统指令 + 主循环整合
: 测试与文档撰写
(注:如果博客不支持mermaid,可替换为文本列表)
⚙️ 核心技术栈 | Tech Stack
| 领域 | 工具/技术 | 用途 |
|---|---|---|
| 后端语言 | Python 3.12 | 主逻辑实现 |
| AI框架 | LangChain | 提示词模板、LLM调用 |
| 大模型 | Deepseek API | 场景生成、台词生成、卡牌命名 |
| 辅助开发 | CodeBuddy | 根据提示语生成代码 |
| 代码审查 | DeepSeek Chat | 审查CodeBuddy代码 |
| 配置管理 | python-dotenv | API密钥管理 |
| 测试框架 | unittest | 单元测试 |
🧩 模块化架构 | Modular Design
src/game_logic/
├── config.py # 200+可调参数(层数/轮数/阈值/连选加成...)
├── morality.py # 道德算法(三值比例/连续权重/结局检查)
├── card_acquisition.py # 牌数控制(纯函数概率算法)
├── boss_ai.py # 规则AI(BOSS出牌策略)
├── boss_dialogues.py # 台词预生成(4种倾向 × 5类台词)
├── boss_fight.py # BOSS战状态机(质疑/跟牌/不跟)
├── boss_fight_loop.py # 人机交互循环(含中英文命令解析)
├── scene_generator.py # 整层场景生成(LLM驱动)
├── layer_event_generator.py # 层间事件生成(含陷阱选项)
├── option_outcome_generator.py # 选项后续 + 卡牌命名
├── commands.py # 系统指令(HELP/PACK/STATUS/HINT/QUIT)
└── llm_hint.py # AI队友提示(BOSS战中限次调用)
🎨 设计亮点 | Highlights
🧪 1. 道德算法:迫选测验 + 比例斩杀
def update_morality(current_round, last_choice, current_choice, good, neutral, evil, consecutive):
# 基础加分 + 连续权重([0,3,5,7,8])
if current_choice == 'A': good += 10 + bonus
elif current_choice == 'B':
neutral += 8 + bonus
random.choice([good, evil]) += 4 # 随机偏移
elif current_choice == 'C': evil += 10 + bonus
else: # D
target = random.choice(['good','evil'])
target += 8 + bonus
# 连续计数更新
new_consecutive = consecutive+1 if current_choice==last_choice else 0
# 极端结局检查
if current_round>=10 and total>=80 and any(ratio>=0.9):
return (..., ending=dominant)
设计意图:
- 三值比例代替二元善恶,更符合修仙“道心”复杂性
- B选项的随机偏移模拟“谨慎中立也会偶然行善作恶”
- 连续选择权重让“道心坚定”加速,但超过阈值则堕入极端
👹 2. 心魔个性化:你的道心,我的镜像
BOSS战开始前,根据玩家道德比例动态生成心魔形态:
| 道德倾向 | 心魔形态 | 入场台词示例 |
|---|---|---|
| 善≥50% | 被牺牲者的怨念 | “你救了张三,可曾记得李四?” |
| 恶≥50% | 被背叛者的复仇 | “你杀的人,来找你了。” |
| 中立≥50% | 错过的可能性 | “你什么都没选,所以什么都错过了。” |
| 均衡 | 自己的镜像 | “你究竟是谁?” |
技术实现:
- 预生成5类台词(入场/优势嘲讽/劣势思考/胜利/失败)各10条,存入
dialogues字典 - 战斗中根据局势随机触发,30%概率激活
🃏 3. BOSS战:唬牌变种 + 万能牌心理博弈
# 玩家输入解析(支持中英文三格式)
指令示例:
- 跟牌 2 善 | follow 2 good | 跟 3 中立
- 质疑 | challenge | 疑
- 不跟 | fold | 弃
规则设计:
- 出牌方扣着出1-3张牌,宣称类型(可用万能牌冒充)
- 回应方可选择 质疑/跟牌/不跟
- 质疑成功则对方收回牌堆+额外弃牌,质疑失败则自己收回牌堆+额外弃牌
- 先出完手牌者胜
万能牌作用:
- 可充当任何普通牌,扰乱对方推理
- 数量有限(每层至多1张),玩家需在关键时刻使用
📜 4. 层间事件:陷阱选项设计
每层结束后(非BOSS层)触发一次特殊事件,四个选项中只有一个陷阱(选陷阱不得万能牌)。
{
"description": "幻境深处传来悠扬的笛声...",
"options": {
"A": { "text": "寻声而去", "is_trap": false, "card_name": "笛声牌" },
"B": { "text": "静心聆听", "is_trap": false, "card_name": "听音牌" },
"C": { "text": "大声呼喊", "is_trap": true, "card_name": null },
"D": { "text": "转身离开", "is_trap": false, "card_name": "追笛牌" }
}
}
设计意图:
- 强化幻境的不可预测性
- 让玩家在看似无差的选项中寻找“机缘”
🤖 AI辅助开发模式 | My AI-First Workflow
作为一个Java后端,我的Python语法全靠“现学现卖”,但这并不妨碍我完成项目。我的秘密武器是:
- 系统设计:先用中文写下每个模块的功能、接口、数据流
- 提示语编写:将设计转化为清晰的“任务提示语”(就像给实习生的需求文档)
- CodeBuddy生成代码:利用AI编程助手根据提示语生成初始代码
- DeepSeek审查:将生成的代码交给DeepSeek审查,指出逻辑漏洞、边界条件
- 手动整合调试:修复AI遗漏的问题,将所有模块组装成完整游戏
这个模式让我实现了:
- 2-3倍效率提升:原本手写需要2天的模块,半天就能完成初版
- 质量双重保障:AI生成 + AI审查,大大减少低级bug
- 跨界学习:通过审查AI代码,反向学习Python最佳实践
📊 项目数据一览 | Metrics
| 维度 | 数据 |
|---|---|
| 总代码行数 | ~3000行(不含测试) |
| 模块数量 | 12个核心模块 + 7个静态文本文件 |
| 可调参数 | 37项配置(层数/轮数/阈值/连选加成/概率分布...) |
| 结局数量 | 7种(极端3+普通3+特殊1) |
| LLM调用次数 | 每层1次(场景生成)+ 每场BOSS战预生成1次(台词)+ 限次HINT |
| API成本估算 | 完成一次游戏约 $0.5-$1.0(取决于模型) |
🌈 花里胡哨的 ASCII 艺术 | Just for Fun
██████╗ ██╗ ██╗ ███╗ ██╗ ███████╗
██╔══██╗ ██║ ██║ ████╗ ██║ ██╔════╝
██████╔╝ ██║ ██║ ██╔██╗ ██║ █████╗
██╔══██╗ ██║ ██║ ██║╚██╗██║ ██╔══╝
██████╔╝ ╚██████╔╝ ██║ ╚████║ ███████╗
╚═════╝ ╚═════╝ ╚═╝ ╚═══╝ ╚══════╝
🌀 幻境入口 | 道心试炼 | 心魔现身 🌀
🧠 核心算法伪代码(纯展示)
道德更新函数
def update_morality(round, last, cur, g, n, e, consec):
bonus = [0,3,5,7,8][min(consec,4)]
if cur == 'A': g += 10 + bonus
elif cur == 'B':
n += 8 + bonus
(g if random<0.5 else e) += 4
elif cur == 'C': e += 10 + bonus
else: # D
(g if random<0.5 else e) += 8 + bonus
new_consec = consec+1 if cur==last else 0
# 结局检查
if round>=10 and (g+n+e)>=80:
if max(g,n,e)/(g+n+e) >= 0.9:
return (..., ending=dominant)
return (g,n,e,new_consec,None)
BOSS战质疑判定核心
def _apply_challenge(self, challenger):
# 验证桌面每张牌
for entry in self.table_pile:
actual = entry['card']['type']
claimed = entry['claimed']
if actual != CardType.WILD and actual != claimed:
# 发现虚假
# 被质疑方收回牌堆 + 额外弃牌
# 下一轮由被质疑方先出
return (..., new_turn=claimer)
# 全部属实
# 质疑方收回牌堆 + 额外弃牌
# 下一轮由质疑方先出
return (..., new_turn=challenger)
📚 静态文本结构 | Separate Content from Code
texts/
├── welcome.txt # 游戏开场白
├── rules.txt # 详细规则
└── endings/ # 7种结局文案
├── ending_extreme_good.txt
├── ending_extreme_evil.txt
├── ending_extreme_neutral.txt
├── ending_trick.txt
├── ending_good.txt
├── ending_evil.txt
└── ending_neutral.txt
设计意图:
- 非技术人员(甚至自己)可随时修改文案,无需改代码
- 支持后续添加更多结局变体
🚀 如何运行?| How to Run
- 克隆仓库(如有)
- 创建
.env文件,填入DEEPSEEK_API_KEY - 安装依赖:
pip install -r requirements.txt - 运行:
python src/main.py
💡 写在最后 | Reflection
这两周我最大的收获不是代码本身,而是一种新的开发范式:
- 设计 > 编码:把精力放在系统拆解和逻辑设计上,AI负责执行
- 审查 > 编写:通过AI代码审查反向学习,快速弥补语言短板
- 提示词 = 新编程语言:写提示语就像写需求文档,但更精确、更结构化
如果你也想从后端转型AI Agent,不妨从用AI做一个自己的小项目开始——不用等学完所有语法,直接开干,边做边学。
献给37岁的自己,"纵使蹉跎一生,也要争那一线天机","韩大哥,年龄偏大真的不能成为程序员吗?"
我一遍遍的问,心里一遍遍的回答,不是的!
AI时代来临,完全可以做到一人之军,我即是所有,下一章节我们来玩opencode直接做管理来走通一个开发流程
🔗 链接
- Gitee仓库:https://gitee.com/hanght/illusory-api-demo.git
- 设计文档:https://www.cnblogs.com/hanght/articles/19736167
- 部分提示语示例:https://www.cnblogs.com/hanght/category/2497552.html
感谢阅读,欢迎交流~
——一个仍在修仙路上的Java后端

浙公网安备 33010602011771号