Skip to content

About

网页版 FPS 射击游戏:Three.js 单文件实现,4 类敌人 + 波次系统 + 每波程序化生成地图 + 武器与道具系统

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

29 Commits

Folders and files

Repository files navigation

末日地牢(Doom Dungeon)

网页版第一人称射击地牢 Roguelike —— 单个 HTML 文件 + 本地 Three.js,无需构建、双击即玩、断网可玩。

🎮 在线试玩 · 📦 源码仓库


🕹️ 这是什么

想在浏览器里随手开一局爽快的地牢射击?《末日地牢》以「元气骑士」为蓝本,采用房间制闯关:3 大关 ×(4 战斗房 + 补给房 + Boss 房),清空房间解锁出口、收集金币、挑战层层 Boss。

游戏全部代码封装在单个 fps.html 中,本地 Three.js 库兜底,无需安装任何东西——下载仓库、双击文件、拿起枪,30 秒内进入战斗。波间还会用波次号做随机种子重新生成地形,同一波可复现、每一局又有新变化。

本项目由 studyguy 通过 Vibe Coding 方式独立开发完成,仅供学习参考和娱乐。

✨ 核心特性

  • 爽快手感:Pointer Lock 鼠标视角、WASD 移动、轻点小跳/长按高跳、Shift 加速跑(消耗耐力)、C 蹲伏、防穿墙碰撞、脱战回血、受击方向指示、低血量警示、死亡慢镜头
  • 4 把武器(除手枪外需拾取武器箱解锁,数字键 1~4 / 滚轮切换):
    • 🔫 手枪:开局自带、无限弹药的应急兜底
    • 🔫 步枪:全能主武器(34 伤 / 9 发每秒 / 30 弹匣)
    • 💥 霰弹枪:8 弹丸锥形散射 + 命中击退,近距爆发
    • 🎯 狙击枪:右键开镜、爆头 220,远射手对点
  • 马里奥赛车式道具:发光道具箱(? 标记)拾取后 F 键使用——回血 / 弹药 / 加速 / 炸弹 / 直线火箭 / 追踪弹 / 闪电 / 星星无敌 / 幽灵隐身;武器增强道具(伤害 +20%、射速 +15%、扩容 +50%、精准 ×0.7)拾取即生效、本局永久、3 级封顶
  • 4 类敌人融合 L4D2 机制:突击兵 / 疾行者 / 重装兵 / 射手,攻击带前摇红光预警;疾行者飞扑压制(蹲伏可躲)、射手舌头拉拽(可射断)、突击兵死亡爆炸、重装兵冲锋撞墙自晕,每 8 波触发坦克 Boss 事件
  • 程序化地形 × 战术动作:每波以波次号为种子重建地图(低台/跳台/矮墙/桥洞/能量高台渐进解锁),跳跃与蹲伏直接决定战术位置——矮墙蹲姿隐蔽、桥洞躲弹道、高台高风险高回报,无无敌点
  • 场景表现:实时阴影、渐变天空、Web Audio 合成 20+ 音效与背景音乐

🎯 玩法速查

操作

按键 功能
WASD / 鼠标 移动 / 视角(点击画面锁定,灵敏度可调)
左键 / 右键 射击(按住连发)/ 瞄准(狙击枪开镜)
空格 跳跃(轻点小跳、长按高跳)
Shift / C 加速跑(耗耐力)/ 蹲伏(可躲射手弹道)
R / F 换弹 / 使用道具
1~4 / 滚轮 切换武器
M / Esc 声音开关 / 暂停

耐力:冲刺 30/s、跳跃 5/次;停止消耗 0.8s 后以 40/s 回复,耐力 <15 无法冲刺。指针锁定不可用时可用方向键转视角。

敌人规则速查

类型 解锁 HP 攻击 伤害 击杀分
🔴 突击兵 第 1 波 100 挥击+突进,死亡爆炸 10 100
🟠 疾行者 第 3 波 60 飞扑压制(蹲伏可躲) 6 130
⚫ 重装兵 第 5 波 300 重击+击退,冲锋撞墙自晕 22 250
🟣 射手 第 7 波 80 远程光球 + 舌头拉拽(可射断) 8 160
  • 攻击流程:追击 → 前摇红光预警(可躲)→ 命中判定 → 突进 → 硬直 → 冷却
  • 数值成长:HP ×(1+0.12(波−1)) 上限 ×3;伤害 ×(1+0.06(波−1)) 上限 ×1.8;移速 +0.05/波 上限 ×1.5
  • 玩家:HP 100,受击无敌帧 0.4s(防围攻瞬秒),脱战 6s 后回血 6/s
  • 受击反馈:红晕 + 白闪 + 震动 + 音效

地形机制

地形 战术含义
低台 / 跳台(0.6m) 跳跃可上;近战仍可命中 → 是机动位不是安全屋
中央能量高台(1.2m) 第 7 波解锁的制高点,可俯射但会被射手命中、被围只能跳下
矮墙(1.35m) 蹲姿完全隐蔽、站姿露头挨打、可翻越、墙顶不可站立
桥洞(顶高 1.3m) 蹲姿通行,可躲射手弹道与视线

地形生成硬约束:无重叠、无死路(网格 BFS 可达性校验)、坏图自动回退上一波;波间补给当前武器 + 其他已解锁武器 +30% 弹药。

🚀 快速开始

方式 操作
🌐 在线游玩 studyguy.github.io/doom-dungeon(GitHub Pages 自动部署 main 分支)
💻 直接游玩 克隆仓库后双击 fps.html(three.min.js 为本地兜底,离线可用)
🖥️ 本地服务器 python -m http.server 8123 后访问 http://127.0.0.1:8123/fps.html

🛠️ 技术实现

  • Three.js r152:本地 three.min.js 优先,加载失败自动回退 jsdelivr / cdnjs / bootcdn / unpkg
  • 对象池:子弹 60、敌人 26、粒子 240、敌人弹幕 40,避免高频 GC
  • 主循环:requestAnimationFrame + 防崩溃安全网(单帧异常不中断循环)
  • 确定性地形:以波次号为随机种子重建地图,同波可复现
  • 调试工具(F12 控制台):
__game.debug.spawnWave(7)                 // 直接跳到第 7 波
__game.debug.teleportEnemyNear('brute', 3) // 传送重装兵到面前
__game.debug.toggleGod()                  // 无敌模式
__game.debug.regenerateMap()              // 重抽当前地形
__game.debug.spawnSpecial('tank')         // 生成特殊敌人

📁 项目结构

doom-dungeon/
├── fps.html            # 游戏全部代码(HTML + CSS + JS 单文件)
├── three.min.js        # Three.js r152 本地兜底
├── index.html          # GitHub Pages 根路径入口(跳转 fps.html)
├── CHANGELOG.md        # 版本变更记录
├── docs/maintenance.md # 多机协作维护手册
└── .github/workflows/  # Pages 自动部署

🔧 维护约定

  • 提交规范:Conventional Commits(feat / fix / docs / chore / refactor / test + 中文描述)
  • 开工前 git pull --rebase;大改动开 feature/xxx 分支,详见 docs/maintenance.md

📜 声明

  • 本项目由本人(studyguy)通过 Vibe Coding 方式独立开发完成,仅供学习参考和娱乐,若和别的项目有相似之处,纯属巧合。

About

网页版 FPS 射击游戏:Three.js 单文件实现,4 类敌人 + 波次系统 + 每波程序化生成地图 + 武器与道具系统

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages