基于 LLM 的交互式职业生涯模拟游戏。从 2010 年起步,扮演一名平面设计师,通过回合制选择书写没有终点的职业生涯。
# 1. 安装依赖
python -m venv venv && source venv/bin/activate
pip install flask requests
# 2. 配置 API
# 编辑 config.json,填入 DeepSeek API Key:
# { "api_base": "https://api.deepseek.com", "api_key": "sk-xxx", "model": "deepseek-v4-flash" }
# 3. 启动
./start.sh浏览器访问 http://localhost:8765,手机和电脑自动适配不同页面。
| 层面 | 技术 |
|---|---|
| 后端 | Python Flask,threaded 多线程 |
| 前端 | 原生 HTML/CSS/JS — 桌面端三栏编辑器 + 移动端杂志卡片式 |
| AI 引擎 | OpenAI 兼容 API(DeepSeek V4 Flash) |
| 属性系统 | XP 累积制,Lv = ⌊√(XP/20)⌋,上限 20 级,前端级内进度条 |
| 存档 | 多玩家 Session 隔离,JSON 文件持久化,per-player 线程锁 |
designer-game/
├── server.py # Flask 后端 — 游戏引擎 / LLM 调用 / 所有游戏系统
├── start.sh # 一键启动脚本(自动杀旧进程)
├── static/
│ ├── shared.js # 前后端共享 API 层 + 工具函数
│ ├── desktop.html # 桌面端 — 三栏编辑器布局
│ ├── mobile.html # 移动端 — 杂志卡片式 + 底部 Tab
│ └── index.html # 原始版本(保留)
├── players/ # 多玩家存档(按 session ID 隔离)
│ └── state_*.json # 每个玩家的游戏状态
├── config.json # API 配置(不入 git)
├── player_feedback.jsonl # 玩家反馈收集(每行一条 JSON)
└── API_PROTOCOL.md # 前后端通信协议文档
阅读剧情 → 从 2-3 个选项中选择(effect 预览属性变化)→ LLM 生成下回合叙事
1 回合 ≈ 1 周,48 回合 ≈ 1 年。从 2010 年 1 月开始,四季轮换触发不同行业事件。
| 属性 | 升级来源 |
|---|---|
| 🎨 审美判断力 | LLM 趋势 + 选择效果 + 培训 |
| 🔧 执行能力 | LLM 趋势 + 选择效果 |
| 💼 商业思维 | LLM 趋势 + 选择效果 + 项目完成 |
| 🗣 表达能力 | LLM 趋势 + 选择效果 + NPC 互动 |
| 💡 创意深度 | LLM 趋势 + 选择效果 |
| 📦 作品集厚度 | 项目完成 + 整理作品集主动行动 |
每个 options effect ±1 = 固定 50 XP,前端属性条同步显示级内进度条。
| 出身 | 特质 | 机制 |
|---|---|---|
| 应届生 | 学院派底子 | 培训效果 +20%,初始创意+2 |
| 乙方执行 | 执行力基因 | 行动精力消耗 -2,初始执行+2 |
| 甲方品牌 | 商业嗅觉 | 薪资 +25%,初始商业+2 |
| 媒体编辑 | 信息敏感 | NPC 事件触发概率翻倍,初始表达+3 |
| 自由职业 | 独狼基因 | 无固定薪资但开销 -40%,精力 -3/回合 |
| 印刷厂 | 工艺基因 | 作品集积累 +50%,初始作品集+2 |
| 自定义 | 无标签 | 无任何修饰 |
创建角色时选择:🏷 品牌设计 / 📱 UI/UX / 🖌 商业插画 / 🎬 动态设计 / 📄 印刷物料。选后 +2 对应属性,60% 概率接到该方向项目。
每 48 回合行业风向轮换。匹配趋势属性高则项目预算 +20%,被克制属性低则 -25%。
每回合检测 4 种结局:🌟 巅峰设计师 / 🔄 华丽转身 / 💸 黯然离场 / 🏡 平稳着陆。触发时弹出结局卡片。
- 6 种角色类型,每回合可能发来消息(📨 通知 + 人脉页标记)
- 互动后进入 4 回合注目期,下几回合 LLM 叙事中可能自然出现
- 有主动事件时人脉页显示 📨 标记,点击打开互动面板自动出现「回应」选项
- 精力 / 储蓄 — 每回合消耗,≤0 强制休息,储蓄为负触发危机
- 8 级头衔晋升 — 全属性达标自动升,月薪随头衔增长
- 12 枚成就 — 属性/精力/回合/NPC 多维度解锁
- 项目系统 — 竞标→执行→改稿→交付,完成自动入作品集
- 里程碑 — 动态生成(晋升/财务/学习/社交/项目),带进度追踪
- 属性检定 — D10 骰子检,结果融入 LLM 叙事
- 行业动态 — 每 12 回合 LLM 生成 2-3 条行业新闻
| 端点 | 方法 | 说明 |
|---|---|---|
/api/new_game |
POST | 创建新游戏(含出身、资源、目标、专精) |
/api/action |
POST | 执行选择,LLM 生成下回合叙事 |
/api/active_action |
POST | 主动行动(休息/学习/求职/社交) |
/api/state |
GET | 获取当前存档 |
/api/npc/interact |
POST | NPC 互动 |
/api/npc/options |
POST | 获取 NPC 互动选项(含回应事件) |
/api/project |
GET | 获取/自动生成当前项目 |
/api/portfolio/generate |
POST | 获取作品集(项目完成自动记录) |
/api/achievements |
GET | 获取成就列表 |
/api/industry_news |
GET | 获取行业新闻 |
/api/feedback |
POST | 提交玩家反馈 |
/api/ending/resolve |
POST | 确认结局 |
/api/saves |
GET | 列出 5 个存档槽位 |
/api/saves/save |
POST | 手动存档 |
/api/saves/load |
POST | 读取存档 |
/api/saves/delete |
POST | 删除存档 |
/api/export |
GET | 导出存档文件 |
/api/import |
POST | 导入存档 |
/api/reset |
POST | 删除当前存档 |
| 决策 | 原因 |
|---|---|
| XP 累积 + 开根号 | LLM 不擅长精确数值,趋势 + 公式更稳定 |
| effect 结构化数组 | 避免字符串解析,统一 [{attr, delta, text}] |
| 取消前端 API 配置入口 | 密钥安全,仅存 config.json |
| 多玩家 Session 隔离 + 线程锁 | 防并发写冲突 |
| 作品集项目完成自动记录 | 不额外调用 LLM,零成本落盘 |
| 2010 年起始 | 给故事明确的历史锚点 |
| response_format + 回退 | 优先约束 LLM JSON,失败自动重试 |
| D10 属性检定 | 属性和掷骰共同决定成败 |