# space-kill-web **Repository Path**: hxj-2888/space-kill-web ## Basic Information - **Project Name**: space-kill-web - **Description**: No description available - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-06 - **Last Updated**: 2026-10-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 太空杀 · 三阵营对抗(网页版) > 当前版本:**太空杀 新架构测试2.0preview**(规则口径 v6.6 · 引擎 v66)· 安卓版 `SpaceKill.apk` 同版本号 依据《太空杀规则正式版 v2.0》与《太空杀系统显示方案》实现的**可玩前端原型**: 真实计时窗口、实时公开讨论、私聊双向确认与聊天、六分区记事本、上帝视角复盘、合成 BGM 与音效、 零依赖 WebSocket 联机(空席位 / 断线者由 AI 托管)。 ## 新架构测试2.0preview(可玩测试版) > **本作为可玩测试版(新架构测试2.0preview)——新架构重构后的首次整包发布。** 后续将**全力优化 AI 判断逻辑与 AI 语言** —— 包括证据链推理、 > 指控与辩护的措辞、公开发言的博弈深度。当前 AI 行为可完整跑通对局,但语言与判断质量 > 仍在迭代中,请以「可玩测试版」而非「完成品」预期体验。 配套站点(**附件**)→ https://space-kill.pages.dev - 规则全文、剧情(人类 / 异形 / 外星人三线) - 蒙特卡洛模拟成果:规则平衡性、策略矩阵、异形流派校验 - 可玩网页版 → https://space-kill-web.pages.dev - 安卓版安装包 → https://space-kill-web.pages.dev/SpaceKill.apk(文件名不带版本号,版本号在 APK 内) ## 运行 ```bash cd space-kill-web python -m http.server 8000 # 单机:浏览器打开 http://localhost:8000 node server/server.js # 联机:同地址即可(自带静态服务与 WebSocket,端口 8766) ``` 单机也可以直接双击 `index.html`(file:// 可运行)。联机时在开始页创建/加入房间,房主开局; `npm start` / `npm run sim` 为快捷脚本。 ## 玩法 1. 选阵营偏好与随机种子 → 开始对局,系统分配身份。 2. 夜间按步骤推进:需要你操作时会自动停下并弹出决策面板,其余步骤点「继续」。 3. 右侧四个页签:公告流(①~⑫ 批次)、私人反馈、我的面板(资源与状态)、记事本(已确认身份 + 手写备注)。 4. 出局后自动进入旁观,对局由系统接管跑完,结束后解锁全知视角。 ## 已实现的机制 | 模块 | 内容 | |---|---| | 夜间步骤 | 0 私聊 → 0.5 感染抑制 → 0.55 感染致死 → 0.6 进化/转化/转职 → 0.7 行动预提交 → 1 外星人查验 → 2 查验/神探公告 → 2b 巡逻 → 3 保护 → 4a 维修 → 4b 破坏 → 5 外星人行动 → 6 开枪 → 7 异形行动 → 8 医生 → 9 死亡结算 → 10 紧急会议 → 11 倒计时 | | 伤害与濒死 | 保护 → 巡逻 → 护盾 逐层抵挡;工程师第 1 夜全能免疫、外星人夜晚免疫;濒死不跨夜,步骤 8 救援是唯一生路,步骤 9 硬结算;无补刀 | | 感染 | 真/假标记、天然互斥、普通第 3 夜 / 感染进化第 2 夜致死、感染抑制、抗体、医生清除、欺诈标记与昼末清洗 | | 停摆 | 净破坏量 3.0 / 6.0 / 9.0 三档(含永久失效)、停转夜、维修者暴露(4.0/3.0)、破坏者暴露(6.0) | | 角色 | 普通船员(查验/协助维修/转职三方向)、工程师、警长、生化医师、救援医师、神探、保镖、验票官、异形(进化/转化/结茧/自伤/欺诈感染)、外星人(查验/双刀觉醒/破坏/夜晚免疫/感染治疗额度) | | 白天 | 遗言 → 自由讨论 → 投票(最高票 + 无平票 + ≥2 票)→ 驱逐揭示;紧急会议独立一轮 | | 残局 | 寂灭时刻(人类全灭,流程冻结、倒计时胜利线取消)、决斗时刻(僵持夜 N/3 与归属判定) | | 信息可见性 | 公告按 ①②③④⑤⑥⑦⑧⑨⑩⑪⑫ 分批次;仅本人可见项(私人反馈、感染致死夜、额度余量)不进公告;异形队内共享不对外 | ## 结合层:语言 ⇄ 推理 ⇄ 行为(引擎核心) 公开发言——无论出自玩家还是 AI——**只走一个入口** `Bridge.say()`,形成闭环: ``` 玩家/AI 说话 → lang 产出 Claim IR → infer 按 kind 路由到推理链 → 写入证据台账 → 影响各 AI 的威胁度 → 影响其投票 / 夜间决策 / 下一轮发言 ↑____________________________│ ``` | 新增文件 | 职责 | |---|---| | `js/lang/ir.js` | `Claim IR`:语言层与推理层唯一的交换格式(`fromSig` 把旧的 Sig 升级为带视角与档位字段的断言) | | `js/lang/renderer.js` | 生成侧:`Claim IR → 中文句子`,与 `nlp.js` 互为逆运算,由 round-trip 测试锁死 | | `js/infer/speakable.js` | 推理 → 语言:AI「能安全说出什么」的候选发生器(只有自己确实持有的信息才成为候选) | | `js/infer/pipeline.js` | 结合层:统一发言入口、Claim 路由、证据台账、质询-应答闭环 | 要点: - **AI 与玩家完全对等**:改造前 AI 发言只有「指控 / 质询」两个意图生效,玩家有七类;现在同一条管道、同一套权重。 - **不改任何权重数值**:路由只调用既有 AI 钩子;`defend / rally / abstain / bind / 各类私有体验` 在数值方案落地前只进证据台账 `g.evidence`,不改估值。 - **AI 不蠢**:`speakable` 只从「发言者确实持有」的私有信息里出候选,没有持有就不开口。 - 回退开关:`SK_LEGACY_AI_ROUTE=1`(环境变量)可让 AI 侧只走改造前的 accuse/ask 两路,用于对拍回归。 ## 主要功能 - **计时窗口**:每个决策步骤按 B 类参数开窗倒计时,全员提交即跳秒(AI 有模拟思考时间), 超时视为放弃(投票=弃票、抑制=不使用);可勾选「快速模式」跳过等待。 - **私聊**:拆成 0a 发起邀请 → 0b 处理邀请(双向确认才配对)→ 0c 正文;对方回复即时显示在步骤区, 并进入「私人反馈」页签;AI 邀请目标随机分布,不再全场扎堆。 - **实时公开讨论**:白天 / 会议讨论为流式窗口(75s / 60s),AI 陆续表态、玩家随时插话, 发言立即上屏并写入记事本「发言」区;可点名**公开指控**与**公开质询**——计入威胁度,真实影响 AI 投票。 发言经 NLP 意图模型解析(黑话语料对齐:金水/查杀/悍跳/踩/归票/压手/划水/sus 等, 支持中文数字+职业绑定如「十二号位」「医生12号」),每条发言下方以小字「原意」展示解析结果。 - **记事本六分区**:公告流 / 发言 / 私人 / 状态·阵营 / 出局 / 备注。 - **复盘**:结束后一键「上帝视角复盘」,按夜回放全部事件(含每人当夜真实行动、攻击结果、 私人反馈、票型——金色条目为隐藏信息),并公示全部身份。 - **音乐**:WebAudio 实时合成的太空氛围 BGM(pad + 五声琶音 + 星尘底噪), 以及提交 / 公告 / 死亡 / 胜负音效,右上角 ♪ 可静音,无任何外部音频资源。 - **联机**:`node server/server.js`(零依赖,手写 WebSocket 帧协议)。权威状态在服务器运行, 按席位广播裁剪视图(医生才看得见感染名单、异形才看得见队友刀数……); 断线者由 AI 接管且不产生任何标识(对应正文 1.2 挂机条款)。当前为实验性功能,仅建议本地局域网体验。 ## 原型期的简化(非规则改动,仅为可玩性) - **讨论**:无实时语音,AI 与玩家发言均为文本;转写回显、静默检测等 B 类运营参数未实现。 - **挂机/举报/护卫队**:属运营治理层,未纳入。 - **联机**未做压力与断线重连的完整打磨。 ## AI 与平衡 AI 只使用它按规则应当掌握的信息:异形仅知队友;神探只用已查验池;外星人只用自身查验结果; 其余判断全部来自公开公告、公开发言中的指控(威胁度)与船员公开的查验结论——**不按 role 直接锁定人类关键角色**。 `tools/sim.cjs` 是无头模拟器(纯 AI 对局 / 带真人席位两种模式),`tools/uismoke.cjs` 为 UI 冒烟, `tools/verify-heat.js` 验证指控热度确实影响投票,`tools/test-fix-v26.cjs` 是缺陷回归断言集 (当前 **168 条**;条数随批次增长,**以运行输出为准**,勿据文档旧数字判断环境是否正常): ```bash npm run test:all # 回归断言 + round-trip + UI 冒烟 + 60 局模拟(推荐) node tools/sim.cjs 300 # 纯 AI(npm run sim) node tools/sim.cjs 120 human # 模拟真人随机决策,覆盖表单通路(npm run sim:human) node tools/mc.cjs 500 1 # 蒙特卡洛 500 局(npm run mc) node tools/test-fix-v26.cjs # v26 缺陷回归:硬源锁定 / 透视 / 宣称目标侧证据 / 承诺兑现 / K2 判据… node tools/verify-heat.js # 共识热度与出局的相关性(只观测,不作验收靶) node tools/test-lang.cjs # 语言库 round-trip:render → parse → IR 深比较(含 payload 关键字段) ``` > round-trip 为**深比较**:只比 kind + targets 会漏掉 `lock.faction`(目标侧证据与硬源锁定的 > 唯一载体)与 `accuse.tier`(措辞强度)。 `test-lang.cjs` 是「语言库 ⇄ 推理链」联动的地基:AI 说得出的每句话都必须能被自家解析器读回同一个意图, 否则推理链接收到的就是噪声。它已反向校出 renderer 的措辞缺陷与 `nlp.js` 里中文编号(`五号`)解析失效的问题。 ## 当前基线(v31 批 3) | 项 | 数值 | |---|---| | 行为指纹(200 局) | `4fa952e76e1ccc68f5c0967e62f191fd789c4c1011e681f2181d417e74ca2826` | | 门禁 | 回归 **71/71** · round-trip 0 失败 · UI 冒烟 30 局 | | 500 局(种子 1~500) | **0 异常** · 人类 27.2% / 异形 59.6% / 外星人 13.2% | | AUC(人类,开/中/残) | .432 / .412 / .477(0.5 = 瞎猜,只观测不设靶) | | 证据层分叉度 / 硬源 | 0.3239 · 2.27 条/局(单人私有 0.59 / 小组 0.98 / 全场 0.70) | | 通道接线 / 战术库 | 32 / 499 mounted · 战术出口 30 条 / 5896 次 | 残余偏差(异形偏强)主要来自**机制与接线缺口**(通道接线 32/499、私有信息优势不足),属推理层建设问题, **不应靠调数值掩盖**——本项目禁止以「让胜率好看」为由改权重(见交接文档 §3 红线)。 ## 文档 | 文件 | 内容 | |---|---| | [`docs/交接文档_v31.md`](docs/交接文档_v31.md) | **接手唯一入口**:项目地图 / 上手 SOP / 十条红线 / 基线 / 常见坑 / 回滚点 / 下一批 | | [`docs/v31执行台账.md`](docs/v31执行台账.md) | 逐批改动台账(批 0~3,含每批读数与待裁定项) | | [`改动说明.md`](改动说明.md) | 当前版本改动说明 | | 《太空杀游戏引擎.docx》(桌面) | 完整技术文档 14 章 + 附录(由 `tools/build-engine-docx.cjs` 生成) | > v26~v29 时代的 12 份历史文档已归档至 `<本地>/CodeBuddy/20260910112441/_archive_docs_v26-v29/`。 ## 安全与发布约定(必读) 本仓库是**公开**仓库。以下内容一律不得入库,`.gitignore` 已强制排除: | 类别 | 具体文件 | 为什么 | |---|---|---| | 口令 | `.env`(`KEYSTORE_PASS` / `KEY_PASS`) | 签名私钥口令,泄露即可伪造签名 | | 私钥 | `android/release.keystore`、`*.jks` / `*.pem` / `*.p12` | 同上;泄露等于签名权外流 | | 构建产物 | `SpaceKill.apk`、`android/SpaceKill.apk`、`android/assets/www/`、`dist/` | 二进制大文件;`assets/www` 是可随时重建的镜像 | | 本机信息 | 任何 `C:\Users\<用户名>\...` 绝对路径、`<本机用户名>` | 会暴露使用者身份。工具脚本一律用 `os.homedir()` 或命令行参数,不要写死 | | 账号信息 | 真实邮箱、令牌、API Key、Cookie | 提交邮箱用 `hxj-2888@users.noreply.github.com` 这类 noreply 地址 | | 打包副本 | `*.zip`(含 `太空杀游戏-完整版.zip`) | 仓库内有全部源文件,压缩包纯冗余 | CI(`.github/workflows/deploy.yml`)只从 **GitHub Secrets** 读 `CF_API_TOKEN` / `CF_ACCOUNT_ID`,仓库内不存放任何密钥;未配置时流水线照常跑测试并跳过部署。 提交前自检(一条命令过一遍): ```bash git ls-files | grep -Ei '\.env|keystore|\.jks|\.pem|\.apk$|assets/www' # 必须无输出 git grep -nE 'C:\\Users\\|[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}' # 必须无输出 ``` > 若不慎把敏感文件推上了远程:**先删远程再谈补救**——`git rm --cached <文件>` 只清本地,历史里仍然存在; > 需要吊销该凭据(改口令 / 换密钥)并用 `git filter-repo` 重写历史 + 强推。**`.env` 与 keystore 一旦外泄,必须视为已泄露并立即换密钥。** ## 安卓版构建 **代码托管**:GitHub `hxj-2888/space-kill-web` · Gitee `hxj-2888/space-kill-web`(两站内容同步,主分支与版本标签一致) **下载**:GitHub Release 稳定链接(永远指向最新版) 发布页: 网页版开始页另有「📱 扫码下载应用」,站内不使用明文直链。 `SpaceKill.apk` **不在仓库里**(二进制产物不入库),线上下载的是 Pages 部署与 Release 上传的那两份。本地重建: ```bash node android\sync-www.cjs # 把站点资源镜像进 android/assets/www(务必在前端改动之后) android\build.cmd # 需要 JDK 17 + Android SDK 34 + 7-Zip;产物自动复制到仓库根 ``` - 签名口令从**根目录 `.env`** 读(`KEYSTORE_PASS` / `KEY_PASS`,已被 `.gitignore` 排除);签名密钥 `android/release.keystore` 同样不入库。**请与 `.env`、`release.keystore` 一起离线备份**——丢失后无法给已安装用户推送升级版本。 - 版本号取自 `package.json`:`version` → APK `versionName`,`androidVersionCode` → `versionCode`(**每次发布必须递增**,否则无法覆盖安装)。