# life-simulator **Repository Path**: saul999/life-simulator ## Basic Information - **Project Name**: life-simulator - **Description**: 纯前端文字人生模拟游戏:752 个事件、9 条人生路线,React + TypeScript + PWA,可离线游玩 - **Primary Language**: TypeScript - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-10 - **Last Updated**: 2026-11-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 人生模拟器 Life Simulator 纯前端文字人生模拟游戏:从 0 岁到晚年,在 **752 个事件**中做出选择,走完属于你的一生。技术栈:React 18 + TypeScript + Vite + Tailwind CSS,可选接入昵称排行榜(Cloudflare Workers + KV),默认仍可离线游玩,PWA 可安装离线游玩。隐私说明见 [PRIVACY.md](PRIVACY.md)。 ## 🎮 立即游玩 - **🌐 在线玩**:(GitHub Pages,手机/电脑浏览器直接打开) - **📲 安装为 App**:Chrome/Edge 打开后点「📲 添加到主屏幕」,安装后可**离线游玩** - **开发者模式**:需要 Node.js 20+ ```bash npm install # 安装依赖 npm run dev # 启动开发服务器(端口 5173) ``` > 注意:`dist/` 构建产物须经 HTTP 访问(`npm run preview` 或部署上线)。直接双击打开 `index.html`(file:// 协议)会被浏览器禁止读取数据文件,无法游玩。 ## ✨ 为什么好玩 - **9 条人生路线,开局就能选**:医生 / 黑道 / 越狱 / 创业 / 艺术 / 运动员 / 军人……每条都有专属剧情与结局,自由人生则随机展开 - **每个选择都在塑造你**:8 大属性 + 3 维 6 端性格画像 + 命运 flag,多年后开出回响;结算页「因果链」串起关键选择到结局的走向 - **把「这一生」发给好友**:一键分享 + 种子深链 + 好友对决 + 人生档案互导,纯前端好友比分 - **一局到老,也一局到爽**:30 秒快速模拟 / 约 15 分钟精简档 / 一键快进到关键年龄(18/30/60) - **🌱 童年快进**:0-12 岁全自动播放,几秒读完童年,13 岁交还控制——成年人的第一站从少年开始 - **越玩越深的局外成长**:42 成就、16 结局图鉴、多周目、家族族谱、天赋传承 - **昵称排行榜**:每日 / 每周 / 种子挑战全球同榜,比一比这一生的评分与排名 - **离线可玩**:PWA 安装到桌面,断网也能玩 ## 玩法介绍 ### 开局 - 输入名字(可留空)、选择性别,点「开始人生」——**叙述中的「你」会替换成你的名字**,代入感拉满 - **🎴 开局构筑**:天赋抽卡(10 选 3,黑/蓝/紫/橙四级稀有度,部分互斥)+ 12 点初始属性分配——先天与出身塑造你的起点;可「跳过构筑」直接开始;每局可在结算页把某个天赋设为**🧬 传承**,下一世抽卡置顶出现 - **🎭 人生路线**:开局选择「这一生想体验什么」——白衣天使 / 黑道风云 / 江湖末路 / 铁窗人生 / 亡命天涯 / 创业弄潮儿 / 艺术人生 / 赛场传奇 / 铁血人生,每条都有专属剧情(自由人生则随机展开) - **节奏档位**:沉浸人生(全部 752 个事件,一局 1.5-3 小时)/ 精简人生(每岁精选 1-2 个,约 30 分钟) - **打字速度**:慢/中/快,游戏内随时切换;点击对话框直接显示全文 - **⚡ 快速模拟**:自动随机选择,30 秒看完一生 - **📅 每日挑战**:同一天所有人面对同一局(日期种子),比一比今天的评分 - **🗓️ 每周挑战**:同一周同一局 + 一个每周目标(活到 80 岁/财富自由/学有所成…),通关即记录 - **🔑 种子挑战**:输入好友分享的种子码,玩同一个事件序列——同样的牌,看谁打出更好的一生 - **🎨 主题切换**:深空蓝 / 墨黑两种全局背景 - **🕓 更新日志**:桌面右侧边栏常驻最新更新,移动端点「🕓 v0.24.0」查看全部——每次更新了什么一目了然 - 有存档时标题页 3 张卡片**点击继续**接着玩 ### 人生事件 每个事件是一段人生叙事(如「第一次语文考试」),下方给出 2-4 个选项: - 选项改变 **8 大属性**(💪健康 🧠智力 💰财富 😊幸福 👥社交 🎨魅力 🍀运气 ⚖️道德),并可能埋下 flag——**多年后开出回响事件** - **凭直觉选择**:选项不显示数值(防按数值挑),选完后的反馈页才展示这次选择的属性变化(含接近上限的收益衰减提示);数值栏按年龄上限填充,**变金 = 已达上限** - **🧭 性格画像**:选项带性格徽章(🧠理性 😊感性 ⚡冒险 🏠安稳 💰利己 🤝利他)——每个选择都在塑造「你是谁」;选完即时显示性格变化,结算页三维画像 + 一句话人生概括 + 结局注脚,传记与分享卡片同步个性化;**某些人生际遇只属于性格鲜明的人**(冒险者的说走就走、利他者的被需要时刻……) - 有些选择带代价(压力/焦虑/金钱),得失交织——高收益选项往往有刺 - **↩️ 后悔**:局内随时可回退(回退上一步或回到某岁,最多 5 步)——选错了就重来 - **📌 关键抉择**:本局的重要路口(升学/结婚/事业等)随时可回看 - **⏭ 快进**:手动局右上角可一键快进到关键年龄(18/30/60),跳过冗长等待直达转折点 - 纯叙事事件点击「▼ 点击继续」推进 ### 人生走向 - **学业分水岭**:初中/高中/高考决定学历路线(重点大学/普通大学/复读/职校),影响后续职业 - **16 条结局路线**:创业者/行者/学霸/医者/铁血/赛场传奇/艺术/技术精英/匠心/安稳/铁窗/亡命天涯/黑道风云……结局由一生选择决定(越狱成功是第 15 条「亡命天涯」,黑帮上位是第 16 条「黑道风云」) - **婚后生活**:结婚后每 4 岁有一次伴侣互动(散步/纪念日/冷战/生日……),相处方式影响一生轨迹 - **退休年龄**:女性 55 岁、男性 60 岁(到达年龄即退休,状态栏显示「已退休」) - **65 岁起健康衰减**,健康归零或超过最大寿命即去世;91-103 岁是均衡发展的高玩可达段 - 命运无常:车祸/急病/裁员/家变随时可能发生 ### 结算与重玩 - **结算页**:享年、死因与临终叙事、综合评分、成长曲线、人生大事记、**「🧭 下一站」**(提示下一条未收集的结局路线) - **这一生的剖面**:职业(从业年限与等级)、高考结果回顾、资产组合(投资/实业/存款)、**「🤝 与身边人」**(家人/伴侣/朋友的关系值,由一生在家庭/爱情/友谊事件中的取舍推导) - **📖 人生年鉴**:一页纸的终局报告(评分 + 成长曲线 + 职业资产 + 家人 + 大事记速览),可导出 markdown 年鉴 - **16 条路线图鉴**:标题页「📖 图鉴 X/16」实时收集进度——把 16 种人生全部走过 - **42 个成就**:铜/银/金三档,含 6 个**隐藏成就**(性格鲜明/冒险家/六边形战士/温暖的人等,解锁前只露问号);每解锁 10 个成就,下一世开局全属性 +2 - **多周目解锁**(每完成一局解锁更多): - 第 2 周目:⚔️ 挑战开局(属性 -10)/ 🎭 真实模式(选项只显示倾向箭头) - 第 3 周目:⚡ 命运事件(效果 ×1.5) - 第 4 周目:🧬 传承加成(上一世终局属性部分继承) - 第 5 周目:双命运事件 - **第 6 周目:🔄 人生重开**(携半身属性重新投胎) - **家族族谱**:每一生都入谱,下一代继承上一代的际遇(职业/学历线影响童年事件) - **🔗 分享与对决**:一键系统分享人生总结卡(深链直达同一局);好友点开就是「挑战 TA 的人生」,结算页直接告诉你赢了还是输了;还能导出/导入好友人生档案 - **🏅 人生称号 + 死法冷笑话**:结算页按结局/财富/性格生成一句 meme 化称号(白衣天使 / 亡命之徒 / 人生赢家…),五种死法各配一句幽默注脚——让人想截图转发 ## 常用命令 | 命令 | 作用 | |---|---| | `npm run dev` | 启动开发服务器(Vite,热更新) | | `npm run build` | 生产构建:单文件 `dist/index.html` + 独立 `dist/events.json` + PWA Service Worker(离线可用) | | `npm run preview` | 预览生产构建产物 | | `npm run build:events` | 从 `script/chiled.json` 重新生成 `public/events.json` | | `npm test` | 数据工具 + 引擎测试(221 个用例) | | `npm run test:ui` | UI 组件测试(vitest,119 个用例) | | `node script/stats.mjs` | 事件数据看板(密度/分类/flag 配对/空缺报告) | | `node --experimental-strip-types script/sim-balance.ts 500` | 500 局平衡审计(属性归零率/享年/结局分布) | ## 游戏数据 事件数据源在 `script/chiled.json`(752 个事件,含 6 个性格专属事件 pers_0001-0006、10 个牢狱事件 prison_0034-0045、3 个彩蛋事件 egg_0001-0003、24 个事件带 persona 人物标注,snake_case 原始格式;2026-08 实测反馈后儿童期减量——3-12 岁每岁从 11-13 降到 5-9 个,love 事件称谓统一中性 TA;2026-08-07 起 0-12 岁选项文案分批重写为第一人称行动并标注性格 `personality` 字段),修改后运行 `npm run build:events` 生成引擎使用的 `public/events.json`(**请勿手改生成文件**)。 - 事件 id 规则:2 位数字后缀为原始主线事件(一字不改),4 位数字后缀为模拟事件(可新增/精选删除/效果钳位) - effects 属性键需在 `script/convert-events.mjs` 的 ATTR_MAP 内(未映射键会转换报错) - 事件触发条件(conditions)不满足时整事件跳过;同一岁多个事件按种子洗牌后的顺序连续触发 - 新增事件片段放 `script/fragments/`,运行 `node script/merge-fragments.mjs` 合并(幂等,含三重校验:转换 fail-fast + 每岁密度 + flag 配对) ## 项目结构 ``` src/ engine/ # 状态逻辑纯函数(属性/寿命/结局判定/成就/事件洗牌/族谱) components/ # 界面(标题/对局/结算/图鉴/族谱/成就/分享卡片/数据面板等 20+ 组件) hooks/ # useGame:游戏循环(线性播放 + 存档 v2 + 节奏档位 + 埋点) utils/ # 音效 BGM(Web Audio 合成)/ 埋点 / 传记导出 types/ # 类型定义 script/ # 数据工具(转换/精选/合并/钳位/抉择质量改造/统计/平衡审计)与 fragments 片段 ``` 更多开发细节见 `CLAUDE.md`。 ## 发布 推送 `master` 分支即自动构建并部署到 GitHub Pages(`.github/workflows/deploy.yml`,含测试防线)。发版时更新本 README(玩法/事件数/测试数)并打 tag: ```bash git tag v0.24.0 # 版本号递增 git push origin v0.24.0 # 推送 tag 生成 GitHub Release ```