Skip to content

About

《盲猎》—— 一只失明怪物靠声音追杀你的浏览器恐怖游戏。Canvas 2D + Web Audio 程序化音效,无外部资源,双击即玩。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

6 Commits

Folders and files

Repository files navigation

盲猎 · Blind Hunt

一款关于「追杀」的浏览器恐怖游戏。你在一座停电的废弃疗养院里恢复三路电力,然后从南门逃出去。 它没有眼睛。它不需要。 它靠声音找你——你的脚步、你的喘息、你合闸时的电流声。

声音是你唯一的视野,也是你唯一的死因。

▶ 在线试玩: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 就行,它会自动:

  1. 重新打包单文件版 dist/盲猎.html(方便离线分享)
  2. 提交所有改动(提交信息默认「更新:日期 时间」;也可以在命令行传 -Message "这次改了什么")
  3. 推送到 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

怎么赢

  1. 找到并按住空格 2.6 秒合上三路电闸(锅炉房 B1、配电室 B2、护士办公室 B3)。合闸会发出传遍整栋楼的巨响。
  2. 三路电闸全部合上后,南门(你出生的门厅)解锁。
  3. 回到南门,按住空格 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 时正常。

About

《盲猎》—— 一只失明怪物靠声音追杀你的浏览器恐怖游戏。Canvas 2D + Web Audio 程序化音效,无外部资源,双击即玩。

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages