一款关于「追杀」的浏览器恐怖游戏。你在一座停电的废弃疗养院里恢复三路电力,然后从南门逃出去。 它没有眼睛。它不需要。 它靠声音找你——你的脚步、你的喘息、你合闸时的电流声。
声音是你唯一的视野,也是你唯一的死因。
▶ 在线试玩:https://162-ctrl.github.io/blind-hunt/ (电脑 + 键鼠,建议戴耳机)
| 按住 R 倾听:声呐勾出墙壁 | 手电锥光里的它 |
|---|---|
![]() |
![]() |
| 死亡会告诉你:它听见了什么 | 你逃出来了 |
|---|---|
![]() |
![]() |
-
在线玩(推荐发给朋友):打开 https://162-ctrl.github.io/blind-hunt/,点击「进入疗养院」。
-
离线玩:双击
index.html(推荐 Edge / Chrome 最新版),点击「进入疗养院」。 -
单文件版:运行
node tools/build-dist.mjs生成dist/盲猎.html,一个 HTML 文件就能玩,可直接发微信/邮件。 -
首次点击「进入疗养院」是为了让浏览器允许播放声音(Web Audio 需要用户手势)。
-
建议戴耳机:怪物的「哒、哒」声有左右声像,是判断它在哪边耳朵的唯一方式。
-
无需安装、无需本地服务器、无任何外部资源与网络请求,全部程序化合成。
改完代码后,双击项目根目录的 更新并上传.bat 就行,它会自动:
- 重新打包单文件版
dist/盲猎.html(方便离线分享) - 提交所有改动(提交信息默认「更新:日期 时间」;也可以在命令行传
-Message "这次改了什么") - 推送到 GitHub —— GitHub Pages 会在 1~2 分钟后自动更新在线版
手动等价命令(在项目根目录执行):
git add -A
git commit -m "更新:说明"
git push两个注意点:
- 这台机器访问 GitHub 需要系统代理(
127.0.0.1:7897),脚本会自动读取 Windows 系统代理设置;如果代理端口变了,改tools/publish.ps1第 1 步的读取逻辑即可。 - 如果 GitHub 登录过期,脚本最后会提示重新授权命令:
& "C:\Program Files\GitHub CLI\gh.exe" auth login --hostname github.com --git-protocol https --web
- 找到并按住空格 2.6 秒合上三路电闸(锅炉房 B1、配电室 B2、护士办公室 B3)。合闸会发出传遍整栋楼的巨响。
- 三路电闸全部合上后,南门(你出生的门厅)解锁。
- 回到南门,按住空格 2.8 秒,逃出去。
提示:每合上一路电闸,它的搜寻时间更长、速度更快。先把退路想好。
| 按键 | 作用 |
|---|---|
W A S D |
移动 |
| 鼠标 | 手电指向 / 角色朝向(F 开关手电,电池有限) |
Shift |
冲刺(很响,耗体力) |
Ctrl / C |
潜行(几乎无声,但慢) |
空格 / E |
交互(合闸、开门)|在躲藏点按:躲进去|躲藏中按住:屏住呼吸(约 3.4 秒上限) |
| 左键 | 投掷石块:朝鼠标方向扔出去,屏幕上的虚线会标出落点(诱饵:落地的声音能把它引开) |
R |
倾听:站定不动,声呐扫过墙壁勾出轮廓,声音涟漪更清晰 |
Esc |
暂停 |
M |
静音 |
- 怪物完全失明,只对「噪音事件」有反应:走路、冲刺、喘息、合闸、投石、屏息失败的抽气。
- 冲刺的噪音半径最大;潜行几乎无声;站着不动它就会失去你。
- 任何状态下,只要它在约 6.6 格内听见你真正的脚步/喘息,就会立刻扑过来——不管它当时在巡逻、调查还是搜索。在它附近冲刺等于自杀。
- 进入追逐后,它会按你刚才的移动方向预判你的位置,并频繁重新规划路线;如果 4.2 秒内没有新声音,它会追到你最后发声的位置,然后转入搜索。它永远不会瞬移。
- 搜索会持续约 11 秒(每恢复一路电力 +2 秒),它会逐个检查最后声源 8.5 格内的躲藏点;每 7 秒左右会停下来「听」1.35 秒——那记清脆的「哒」就是它在听。屏息能骗过它,但呼吸断掉的那一刻,它会掀开你藏身的地方。
- 搜索失败后它不会走远:约 20 秒的「猎场记忆」会让它继续在你最后出现过的区域巡逻。躲起来能保命,但最好边走边藏。
- 投石:石头落地的「嗒」声很硬,能穿墙传到约 9.3 格外(空旷处 11 格)。它没在追你时,几乎一定会去查看,并当场发出一声「哒」——那就是它上钩了。它正在追你时,只有约 25% 会被骗(安静一阵后约 40%);没骗到时你也能听见它「哒」的一声:它听见了石头,只是没有上当。石头不是万能脱身符。
- 纯 Canvas 2D 渲染:静态层预渲染 + 动态光照遮罩(环境光 / 手电锥 / 电闸灯 / 闪电),无贴图文件。
- 全部音效由
js/audio.js用 Web Audio 实时合成:心跳随危险度加速、呼吸随体力变化、怪物脚步/点击/尖啸、雷暴与建筑吱嘎、电流嗡鸣随合闸数增加。
index.html 页面骨架、HUD、各类界面、错误捕获
css/style.css 暗色恐怖风 UI
js/level.js 疗养院地图数据(64×45 格,16 房间 + 6 段走廊,30 门、31 躲藏点、3 电闸、8 笔记、14 拾取物)
js/game.js A* 寻路、听觉系统、怪物状态机、玩家/躲藏/投石/交互、死亡与胜利流程
js/render.js 预渲染静态层、光照遮罩、声呐、涟漪、死亡特写、标题氛围
js/audio.js 程序化 WebAudio 音频引擎(23 种事件 + 心跳/呼吸/压迫/环境层)
js/main.js 输入、HUD、界面切换、主循环、无头测试接口 window.__BH_DEBUG
tests/audio-test.html 音频引擎自测页(无头运行输出 AUDIO_SELFTEST_OK)
tests/cdp-run.mjs 16 阶段无头 E2E(Edge + CDP:启动→手电→声呐→合闸→笔记→拾取→投石→躲藏→追击→暂停→死亡→重开→胜利→零报错)
tests/cdp-shots.mjs 视觉迭代探针(快速截取门厅/声呐/全灯画面)
tests/shots/ 验收截图
D:\node.exe --check js\game.js
D:\node.exe tests\cdp-run.mjs :: 16 阶段全绿(约 1 分钟;无头软件渲染较慢,脚本按状态轮询)音频自测:
"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --headless=new --disable-gpu ^
--autoplay-policy=no-user-gesture-required --virtual-time-budget=5000 --dump-dom ^
"file:///D:/万昊林/项目/恐怖游戏/tests/audio-test.html"无头截图调试:index.html#autostart&sim=30&seed=7 会自动开局、跑 30 秒模拟并把快照写进 #errlog。
- 为什么这么黑:恐怖来自信息饥荒。你能安全看清的东西很少,所以「停下来听」必须真的有用、真的危险。
- 为什么怪物永不瞬移:恐怖要有因果。死的时候你要能复盘「它听见了什么、在几米外」——死亡界面会直接告诉你。
- 为什么加声呐:给玩家一个主动获取信息的工具,但代价是站定不动。移动与理解之间必须二选一。
- 为什么死亡能复盘:死亡不是惩罚,是教学。每次死都告诉你下次该在哪个环节闭嘴。
- 未适配触屏 / 移动端(需要键盘 + 鼠标)。
- 音频需一次用户手势后才能启动;静音或无声环境下游戏逻辑仍然完整(音频层全为安全 no-op)。
- 无头 E2E 使用软件渲染,帧率约 10–20fps;真实浏览器在有 GPU 时正常。




