80亿分之1的人生娱乐游戏
详情介绍
80亿分之1的人生 · 安装与配置说明
插件标识:shiba 版本:1.0.00 作者:kuakeba.cn
前台入口:域名/1in8b 后台入口:/admin/shiba(后台路径前缀随站点「后台入口」配置变化)

一、插件简介
像素风人生模拟互动站。访客打开页面后被随机"投胎"到世界上某个角落,逐年阅读故事、做出选择,直到人生终点,最后可以分享这段人生。
功能一览:
| 模块 | 说明 |
| -- | -- |
| 随机投胎 | 按 115 个国家 / 地区真实出生比例加权抽样(参考联合国《世界人口展望 2024》),分富裕 / 中产 / 贫困三层,影响初始属性与事件池 |
| 人生推进 | 童年 → 少年 → 成年 → 暮年,1 年对应若干秒(可配置),四条属性:健康 / 快乐 / 财富 / 学识 |
| 事件与选择 | 事件库由后台维护,支持多语言文案、单选分支、属性增减、关键时刻记录;未选择时自动推进 |
| 死亡模型 | 分年龄段的死亡率曲线 + 健康值修正,达到最大年龄必然寿终 |
| 人生总结 | 享年、人生称号(早夭之星 / 八十岁的人生 / 百岁人生…)、关键时刻回顾、终局属性 |
| 黏性机制 | 最近 8 段人生保存在浏览器,最多珍藏 4 段;露出第一段人生后即可分享 |
| 落地页 | 实时出生 / 死亡估算计数器、怎么玩三步、投胎概率表(可展开)、"你出生那天你是第几个"人口计算器、分享墙(可点亮) |
| 多语言 | 简体中文 / 繁體中文 / English / 日本語,按浏览器 Accept-Language 自动切换,右上角可手动切换(写 cookie 一年) |
| 像素风 | 点阵等宽字体、8-bit 配色、像素描边面板、step 动画、扫描线叠加 |
二、环境要求
| 项目 | 要求 |
| -- | -- |
| PHP | ≥ 8.0(推荐 8.1 / 8.2,需 json、mbstring、PDO MySQL 扩展) |
| MySQL | ≥ 5.7(表使用 utf8mb4) |
| 框架 | 本插件宿主程序(ThinkPHP 6)自带插件体系 |
| 浏览器 | 支持 ES6 的现代浏览器(含移动端);无需任何第三方 CDN |
三、安装步骤
方式一:后台安装(推荐)
- 将整个
shiba目录上传到站点根目录的plugins/下。 - 登录后台 → 应用中心 → 插件列表 → 找到「80亿分之1的人生」→ 点击 安装。
- 安装过程自动完成三件事:
- 执行 install.sql 创建 3 张数据表(自动加站点表前缀);
- 把 plugins/shiba/static/ 复制到 public/static/shiba/;
- 写入 28 条内置事件种子数据,并注册后台菜单「80亿分之1」。
- 安装完成后,在 插件设置 里确认「启用插件」为开启状态。
方式二:手动核对(排错用)
若安装后前台 404,可依次核对:
- 插件是否登记:数据库
plugin表(带前缀)中应存在name = shiba的记录,且status = 1。 - 数据表是否建立:应存在
shibaevent、shibashare、shibaplay(前缀同站点配置,例如 zsens)。 - 静态资源是否就位:
public/static/shiba/shiba.css与shiba.js必须存在。
- 缺失时访问任意前台页面会自动补齐一次;也可重新触发安装或手动复制。
- 入口是否放行:
/1in8b路由由插件routes.php的front段注册,插件停用时会自动不注册(表现为 404,属预期行为)。
注意:插件升级后若静态资源仍是旧文件,系统会依据 public/static/shiba/version.txt 中的版本号自动重新复制。
四、目录结构
plugins/shiba/
├── plugin.json 插件元信息(名称 / 标题 / 版本 / 图标 / 分组)
├── ShibaPlugin.php 插件入口类:配置定义、安装卸载、菜单、建表自举
├── install.sql 建表语句(表名不带前缀)
├── routes.php 前台 / 后台路由注册
├── controller/
│ ├── FrontBase.php 前台基类:语言检测、SEO、视图路径、JSON 响应
│ ├── Index.php 前台:首页 / 游戏页 / 5 个接口 / 语言切换
│ └── admin/
│ ├── Base.php 后台基类
│ ├── Overview.php 概览 + 14 天曲线接口
│ ├── Event.php 事件库 CRUD
│ └── Share.php 分享墙审核与删除
├── service/
│ ├── I18n.php 语言检测与语言包取词
│ ├── CountryData.php 国家出生权重、概率归一化、随机抽样、人口锚点
│ ├── Preset.php 内置事件池、人生称号
│ └── GameService.php 事件供给、游玩记录、分享墙、点赞、统计
├── lang/
│ ├── zh-cn.php 简体中文
│ ├── zh-tw.php 繁體中文
│ ├── en.php English
│ └── ja.php 日本語
├── view/
│ ├── front/ layout / index / play
│ └── admin/ _nav / overview / event / event_form / share
└── static/
├── shiba.css 像素风样式
└── shiba.js 计数器 / 出生序号 / 游戏引擎五、前台地址与接口
| 地址 | 方法与说明 |
| -- | -- |
| /1in8b | 落地页:Hero、实时计数器、玩法、概率表、出生序号计算器、分享墙 |
| /1in8b/play | 游戏页:投胎 → 逐年推进 → 终点 → 分享 |
| /1in8b/api/bootstrap | GET,返回当前语言词典、国家概率表、启用事件、人口锚点、玩法参数 |
| /1in8b/api/shares | GET,分享墙分页数据(?page=1,每页 12 条) |
| /1in8b/api/finish | POST,记录一段走完的人生(匿名统计),返回人生称号 |
| /1in8b/api/share | POST,提交分享(留言必填,同 IP 60 秒内限 1 次) |
| /1in8b/api/like | POST,点赞(同 IP 对同一条 7 天内限 1 次) |
| /1in8b/lang/{locale} | GET,切换语言并回跳(locale 取值 zh-cn / zh-tw / en / ja,可带 ?back=/1in8b) |
语言优先级
- 手动切换写入的 cookie
shiba_lang(有效期 1 年); - 插件设置中的「默认语言」(设为
auto时跳过本步); - 浏览器
Accept-Language:zh-TW / zh-HK / zh-MO / zh-Hant→ 繁中;含zh→ 简中;ja→ 日语;en→ 英语; - 全部不匹配时回退简体中文。
六、后台功能
后台菜单:80亿分之1(含三个页面)
1. 概览 /admin/shiba
- 统计卡片:累计游玩、今日游玩、平均享年、分享总数、公开分享、今日分享、事件总数、启用事件
- 近 14 天「游玩 / 分享」趋势面积图(ApexCharts,随宿主后台图表库)
- 前台入口与当前外观参数的速览卡片
2. 事件库 /admin/shiba/event
- 列表:按年龄段、分层、状态筛选,支持关键词模糊搜索事件文案
- 操作:新增、编辑、启用 / 停用、批量删除
- 编辑页提供「格式化 JSON」按钮,便于排查语法错误
字段含义
| 字段 | 说明 |
| -- | -- |
| 最小年龄 / 最大年龄 | 事件可出现的年龄区间(0-120) |
| 国家分层 | 0 全部国家、1 富裕、2 中产、3 贫困;只对匹配分层的国家生效 |
| 权重 | 抽中概率的相对权重(1-10000),同一年龄段内按权重随机 |
| 状态 | 启用 / 停用;停用后不再参与抽取 |
| 事件内容 JSON | 见下节格式 |
事件 JSON 格式
{
"text": {
"zh-cn": "事件描述(必填)",
"zh-tw": "繁體描述",
"en": "English text",
"ja": "日本語の文章"
},
"log": {
"zh-cn": "无选项时自动记录的关键时刻(可选)"
},
"choices": [
{
"label": { "zh-cn": "选项文案", "zh-tw": "…", "en": "…", "ja": "…" },
"effects": { "hp": -5, "hap": 8, "mny": 0, "knw": 3 },
"log": { "zh-cn": "选择后记录的关键时刻(可选)" }
}
]
}规则要点:
text为必填,其余语言缺失时按「当前语言 → 简体中文 → 英语 → 第一个可用值」回退。- 有
choices时游戏会暂停等待玩家选择;无choices时为纯叙事事件,自动推进(若有log则计入关键时刻)。 effects四个键可只写部分,缺省按 0 处理;属性值范围 0-100,超出会被截断。- 属性缩写:
hp健康 /hap快乐 /mny财富 /knw学识。 - 内置事件池共 28 条,覆盖童年、少年、成年、暮年与全年龄随机;可自由增删改。
3. 分享管理 /admin/shiba/share
- 列表:按署名 / 留言 / 国家搜索,按状态筛选,展示享年、称号、留言、点赞数、提交时间
- 操作:单条公开 / 隐藏、批量删除
- 开启「分享需审核」后,玩家提交的分享默认隐藏,需在此手动公开
七、插件设置项
在后台 应用中心 → 插件列表 → 80亿分之1的人生 → 设置 中配置。
| 配置键 | 名称 | 默认值 | 说明 |
| -- | -- | -- | -- |
| enabled | 启用插件 | 开 | 关闭后前台 /1in8b 全部路由停止注册(404) |
| site_title | 站点标题 | 80亿分之1的人生 | 前台页头品牌与页面标题主词 |
| site_intro | 站点简介 | 见默认值 | 首页大标题下方文案,支持换行 |
| seo_keywords | SEO 关键词 | 人生模拟器,投胎模拟器… | 写入 <meta name="keywords"> |
| seo_description | SEO 描述 | 见默认值 | 写入 <meta name="description"> |
| primary_color | 主色调 | #7c5cff | 像素界面主色(按钮、进度条、标题装饰) |
| accent_color | 强调色 | #ffcc00 | 高亮与计数数字 |
| year_seconds | 每年秒数 | 3 | 自动推进模式下 1 年对应的现实秒数(1-10);越小节奏越快 |
| max_age | 最大年龄 | 120 | 达到该年龄必然寿终(60-120) |
| birthspersecond | 每秒出生数 | 4.3 | 首页实时出生计数器速率,参考全球真实值 |
| deathspersecond | 每秒死亡数 | 1.9 | 首页实时死亡计数器速率 |
| share_review | 分享需审核 | 关 | 开启后新分享默认隐藏,需后台公开 |
| default_lang | 默认语言 | auto | auto 按浏览器语言;也可强制指定某个语言 |
| drop_data | 卸载时清除数据 | 关 | 开启后卸载插件会删除 3 张数据表及全部数据,请谨慎 |
八、数据表
表名在运行时自动拼接站点表前缀(示例中为 zsens_)。
| 表 | 用途 | 主要字段 |
| -- | -- | -- |
| shibaevent | 事件库 | agemin / age_max / tier / weight / status / payload(JSON) |
| shibashare | 分享墙 | countrycode / country_name / age / title / highlights(JSON) / nickname / message / likes / status / ip |
| shibaplay | 游玩记录(匿名统计) | countrycode / country_name / age / title / stats(JSON) / choices / duration / ip |
说明:
shiba_play只记录走完的人生,用于后台概览统计;不涉及任何个人身份信息,ip仅用于简单的频率控制。- 玩家最近的 8 段人生记录保存在浏览器本地(
localStorage,键sblivesv1),不写入数据库,也不跨设备同步。 - 删除插件时若未开启「卸载时清除数据」,数据表与数据会保留,重新安装可继续使用。
九、多语言扩展
内置四种语言。如需新增语言(以法语 fr 为例):
- 语言包:复制
lang/en.php为lang/fr.php,逐项翻译。 - 注册语言:修改 [ShibaPlugin.php](file:///d:/phpstudy_pro/WWW/zsadmin/plugins/shiba/ShibaPlugin.php) 中的
LOCALES常量,追加'fr'。 - 语言名:在 [I18n.php](file:///d:/phpstudy_pro/WWW/zsadmin/plugins/shiba/service/I18n.php) 的
localeLabel()返回数组中补充'fr' => 'Français'。 - 浏览器检测:在同文件
detect()中按需增加str_contains($accept, 'fr')分支。 - 国家名:
CountryData::countries()每条数据补fr键;缺失时自动回退简体中文。 - 事件文案:在后台各事件的
payload.text/log/choices[].label中补fr键(可只补重点事件)。
新增语言不影响已有数据,回退链路保证不会出现空文案。
十、常见问题
Q1:访问 /1in8b 返回 404?
按顺序检查:插件是否已安装且启用 → public/static/shiba/ 是否存在 → 站点伪静态是否生效(ThinkPHP 需要 rewrite 规则)。插件停用时本就不注册路由。
Q2:页面能打开但样式全无、按钮无反应?
说明静态资源未复制或版本未更新。删除 public/static/shiba/version.txt 后访问任意前台页面,会自动重新复制;也可手动把 plugins/shiba/static/ 内容复制到 public/static/shiba/。
Q3:游戏页一直停在"出生"画面?
游戏数据由 /1in8b/api/bootstrap 提供,若毕事件表为空会没有事件。检查 shiba_event 表是否有数据(安装时写入 28 条);为空时在后台新增一条事件,或重新执行安装的种子写入。
Q4:页面文案显示成 game.born_in 这种键名?
语言包文件缺失或键名拼错。确认 lang/{当前语言}.php 存在且可被 PHP 正常解析。
Q5:投胎概率之和不是 100%?
概率由权重归一化得出,展示值保留了四舍五入误差,合计约 100%,属正常。若想调整某国出现频率,修改 CountryData::countries() 中的 w 权重即可,无需保证总和为 100。
Q6:如何加快节奏,快速测试到人生终点?
把「每年秒数」调为 1,并临时把「最大年龄」调低;或在游戏页把「自动」切为手动后连续点击「继续」。
Q7:分享提交后前台看不到?
若开启了「分享需审核」,需在后台分享管理中点击「公开」;另检查是否触发 60 秒同 IP 频率限制。
Q8:想关闭死亡等沉重事件?
在后台事件库把对应事件「停用」即可(例如童年高热、战乱、大病类事件),无需改代码。
十一、卸载
后台 插件列表 → 卸载:
- 默认保留 3 张数据表与全部数据,便于重新安装后继续使用;
- 若已开启「卸载时清除数据」,卸载会
DROP三张表并删除全部内容,操作不可恢复,请提前备份。
卸载会同时移除后台菜单与权限项、语言检测逻辑随插件停用失效,但不会删除 public/static/shiba/ 目录(静态文件可手动清理)。
十二、测试数据说明
安装时自动写入 28 条内置事件(覆盖各年龄段与三种国家分层),无需额外导入即可完整游玩。若想快速验证完整链路:
- 前台
/1in8b:等待 3 秒确认出生 / 死亡计数器增长;在出生序号计算器输入1990-06-15应得到约 53.68 亿人 / 38 万人 / 1.37 亿人三级结果。 - 前台
/1in8b/play:点击「开始这一生」,确认年龄自动增长、四条属性条变化、事件与选项交替出现,直到终点显示人生称号与关键时刻。 - 在终点填写留言提交,再到后台分享管理确认记录进入列表。
更新记录 (1)
-
v1.0.0
2026-11-09
正式发布
微信客服
QQ官方交流群