Skip to content

Repository files navigation

网页版 FPS 游戏

纯单机、无联机的网页第一人称射击游戏(灰盒版),依据《网页FPS产品规格书》v1.0 开发。 按《网页FPS开发计划》v1.0 分阶段交付,当前状态:已达到预期,收尾定稿

玩法内容

  • 波次生存:10 波进攻(备战 5s → 战斗 → 清空循环),第 5/10 波 Boss 战
  • 敌人类型(规格书 6.2 全部落地):
    类型 HP 行为 金币
    近战怪(方块丧尸) 80 成群冲锋、主动追击、A* 绕障、卡住自动救援 50
    远程怪(枪手) 60 保持距离、喷射毒液弹道(可躲避)、撞墙即炸 50
    自爆怪 40 红色预警(越近越急)+ 近身自爆 AOE 60 40
    精英怪(重装) 400 霰弹 90、正面受击减伤 50%(建议绕后) 300
    Boss(终结者) 3000 远程炮击 + 召唤小怪 → 血量 <50% 狂暴(提速/近身范围攻击);顶部血条 + 登场/击杀播报 1000
  • 武器(波次自动解锁,无需购买):
    武器 解锁 伤害 特点
    M9 手枪 初始 25(爆头 ×2) 480 RPM 半自动、备用弹无限
    AK-47 第 3 波 34 600 RPM 全自动、弹匣 30/备用 120
    870 霰弹枪 第 4 波 18×8 弹丸(爆头 ×1.5) 近距爆发、弹匣 8/备用 32
    AWP 狙击枪 第 5 波 120(爆头 ×3) 右键点按开镜(22° 视场 + 散布骤减)、一击必杀小怪
  • 经济:击杀得金币(爆头 +25%)、波次奖励(100 + 剩余血量加成);B 键商店随时可用(打开暂停游戏):弹药 100 / 护甲 500(吸收 50% 伤害)/ 医疗包 300(+50 HP)
  • 战斗 HUD:左下 HP/护甲/体力条、右上金币/波次、右下武器弹药 + 击杀提示滚动、顶部 Boss 血条、波次横幅、命中 ❌(仅靶子/敌人)
  • 反馈系统:敌人受击红闪 + 肉感受击声、玩家受击红闪 + 方向指示、死亡倒地视角 + 3s 复活、弹孔贴花、自爆预警红光

操作

按键 功能
WASD / 鼠标 移动 / 视角(点击画面锁定鼠标,Esc 释放)
Shift / Space 冲刺(体力条)/ 跳跃
左键 / 右键 射击 / 开镜(狙击枪右键点按切换)
R / 1~4 换弹 / 切换武器(切枪打断换弹)
B 购买菜单(随时可用,打开即暂停)
N / M 调试:跳波 / +500 金币
= - ] [ 音效音量 ± / 音乐音量 ±
F1 状态机切换(调试)

页面调试参数:?yaw= ?pitch= 初始朝向;?markers=1 显示点位标记;?fastwave=1 跳过备战;?pixel=1 天空像素采样。

自动测试(Node 直跑,无 DOM)

命令 覆盖
npx tsx scripts/test-movement.ts 移动 9 场景:碰撞/滑动/台阶/跳跃/冲刺
npx tsx scripts/test-shooting.ts 射击 10 场景:命中/后坐/散布/换弹/全自动/霰弹弹丸/ADS
npx tsx scripts/test-enemy.ts 敌人 14 场景:寻路/索敌/四类型/Boss/分离/卡住救援/高台包围/垂直判定
npx tsx scripts/test-wave.ts 波次 4 场景:流程/同屏上限/倍率/10 波通关
npx tsx scripts/test-economy.ts 经济 2 场景:护甲吸收/爆头奖励

常用命令

命令 说明
npm install 安装依赖
npm run dev 启动开发服务器(默认 http://localhost:5173)
npm run build 类型检查 + 生产构建(输出 dist/
npm run preview 本地预览构建产物

目录结构

src/
├── core/     # GameLoop、状态机、输入管理、配置加载
├── player/   # 玩家控制器(胶囊碰撞、冲刺、护甲、死亡)
├── weapons/  # 武器系统(4 把武器、多弹丸、ADS、后坐散布)
├── enemies/  # 敌人 AI(5 类型、A*、弹道弹丸、Boss、分离/救援)
├── map/      # 地图与碰撞(灰盒仓库、程序化贴图、天空)
├── ui/       # HUD(状态条/弹药/波次/Boss 血条/商店/击杀提示/受击反馈)
├── audio/    # WebAudio 合成音效 + 三轨动感 BGM
└── vfx/      # 特效(粒子池等)
public/       # 配置 JSON(游戏数值 / 地图点位)
docs/         # 地图说明、预览截图
scripts/      # 自动测试(tsx 直跑)

已知限制(记录在案)

  • 敌人为 2D 寻路,不上楼梯/平台——玩家上二楼后丧尸会绕到高台底部包围等待(垂直攻击已判定拦截)
  • 小地图 / 结算星级界面 / 暂停菜单 / 新手引导未实现(计划 4.2/4.5,按需求收尾跳过)
  • 三种玩法模式(波次/限时/防守)与难度曲线未实现(计划 3.4/3.5,按需求收尾跳过)
  • 无存档(规格书要求单机即点即玩)

里程碑回顾

  • M1:靶场 Demo(移动/射击/打靶/换弹)✅
  • M2:灰盒完整一局(10 波 + 商店 + 5 类敌人 + Boss)✅
  • 收尾:游戏已达预期,进入维护状态

About

A standalone web FPS game (Three.js + Vite + TypeScript): 10-wave survival, 5 enemy types with a two-phase boss, 4 weapons with ADS, shop economy, full HUD, synthesized audio and dynamic BGM, single-file build.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages