docs: 添加PRD需求文档、任务计划和设计系统

This commit is contained in:
Cloud Bot
2026-03-21 08:16:51 +00:00
parent 3a236fd294
commit 21e3da573e
6 changed files with 1608 additions and 0 deletions

View File

@@ -0,0 +1,239 @@
# 《大厂保卫战:最后的打工人》- 任务计划 v1.0
**日期:** 2026-03-21
**目标:** 在 Next.js 项目中,用 Phaser.js 实现完整的第一关塔防游戏
**设计文档:** `design-system/大厂保卫战/MASTER.md`
**需求文档:** `.docs/prd-tower-defense-game.md`
---
## 功能优先级
| 优先级 | 功能 | 说明 |
|--------|------|------|
| P0 | 游戏基础框架 + 主页入口 | Next.js 页面 + Phaser.js 集成 + 地图渲染 |
| P0 | 防御塔系统 | 4种塔的部署、攻击、精力管理 |
| P0 | 怪物波次系统 | 6波怪物 + 路径寻路 + 战斗逻辑 |
| P1 | 周报结算系统 | 第3波后触发的黑话问答弹窗 |
| P1 | 特殊技能与摸鱼机制 | 各塔特殊能力 + 精力恢复 + 咖啡购买 |
| P1 | 胜利/失败结算界面 | 钉钉风格弹窗 + 绩效评级 |
| P2 | 怪物头顶语录飘字 | 100条黑话随机飘过 |
---
## Phase 1当前批游戏基础框架 + 主页
**目标:** 搭建可运行的 Next.js + Phaser.js 框架,渲染 S 型地图,部署基础塔,实现预设路径怪物移动
### 任务列表
- [ ] **Task 1A: 安装依赖 + 创建游戏入口页面**
- 批次:当前批
- 执行方式:串行(基础设施)
- 前置依赖:无
- 目标:
- 安装 `phaser` npm 包
- 创建 `app/game/page.tsx`Next.js 游戏页面(`use client`
- 创建 `app/page.tsx`:主页(游戏封面 + 进入游戏按钮,覆盖模板原有页面)
- 字体:从 Google Fonts 加载 Press Start 2P + VT323
- 涉及范围:
- `package.json`(添加 phaser 依赖)
- `app/page.tsx`(主页重写)
- `app/game/page.tsx`(游戏页面新建)
- `app/layout.tsx`(添加字体 import
- `app/globals.css`(游戏全局样式)
- 验收标准:访问 `/game` 页面不报错,主页显示游戏封面
- 验证方式:`curl -s http://localhost:13000/game | grep -c "html"`
- [ ] **Task 1B: Phaser.js 游戏核心框架**
- 批次:当前批
- 执行方式:串行(依赖 1A
- 前置依赖Task 1A 完成
- 目标:
- 创建 `game/` 目录(游戏源码目录,非 Next.js app 目录)
- 实现 `game/GameScene.ts`主游戏场景S型地图渲染16x12格格子48px
- 实现 `game/config.ts`Phaser 配置Canvas 1280x720transparent background
- 实现 `game/constants.ts`游戏常量地图路径坐标、HC初始值200、KPI初始100等
- 实现 `game/GameManager.ts`游戏状态管理HC、KPI、波次、游戏状态
-`app/game/page.tsx` 中挂载 Phaser Game 实例useEffect
- 涉及范围:
- `game/config.ts`
- `game/constants.ts`
- `game/GameScene.ts`
- `game/GameManager.ts`
- `app/game/page.tsx`
- 关键实现细节:
- S型路径坐标`[(0,2),(7,2),(7,9),(15,9)]`,格子大小 48px
- 地图背景:深色办公室风格(`#0A1628`),路径用深褐色(`#2D1B00`
- 可建塔区域路径以外的格子点击触发建塔UI
- 所有 Phaser 相关代码只在客户端运行SSR 需跳过)
- 验收标准浏览器显示游戏地图S型路径可见格子可点击
- 验证方式:启动开发服务器后访问 `/game`
- [ ] **Task 1C: 防御塔基础系统(部署+攻击+精力)**
- 批次:当前批
- 执行方式:串行(依赖 1B
- 前置依赖Task 1B 完成
- 目标:
- 实现 `game/towers/TowerBase.ts`:塔基类(位置、成本、攻速、精力、攻击范围)
- 实现 4 种塔:
- `game/towers/InternTower.ts`00后实习生50HC近战
- `game/towers/SeniorDevTower.ts`P6资深开发120HC远程直线
- `game/towers/PPTMasterTower.ts`PPT大师100HC范围减速
- `game/towers/HRBPTower.ts`HRBP80HC辅助Buff
- 实现 `game/towers/TowerManager.ts`:塔的部署管理、攻击目标选择
- HUD 底部塔选择栏4个卡片显示名称、成本、当前可选状态
- 点击地图格子后弹出确认浮层,扣除 HC 后放置塔
- 塔的精力条显示(进度条悬浮在塔上方)
- 涉及范围:
- `game/towers/` 目录5个文件
- `game/GameScene.ts`(集成塔管理器)
- `game/ui/TowerPanel.ts`(底部塔选择 HUD
- 验收标准:可以点击格子选塔,扣除 HC 后塔出现在地图上,塔有精力条
- 验证方式:手动游玩验证
- [ ] **Task 1D: 怪物波次系统(路径寻路+战斗)**
- 批次:当前批
- 执行方式:串行(依赖 1B
- 前置依赖Task 1B 完成(可与 1C 并行)
- 执行方式:并行(P1-游戏核心)(与 1C 并行)
- 关键实现细节:
- 实现 `game/enemies/EnemyBase.ts`:怪物基类(血量、移速、路径跟随、受伤、死亡)
- 实现 4 种怪物:
- `game/enemies/FreshGraduate.ts`校招应届生30HP快速数量多
- `game/enemies/OldEmployee.ts`35岁老员工150HP慢速经验护盾
- `game/enemies/TroubleMaker.ts`职业碰瓷王80HP死亡扣20HC
- `game/enemies/BossVP.ts`空降VP800HP组织架构调整技能
- 实现 `game/enemies/WaveManager.ts`波次管理器6波配置、波次间隔、怪物生成
- 实现路径跟随:沿预设路径坐标数组移动,到达终点扣除 KPI
- 实现攻击目标选择:塔选择射程内最近怪物
- 对象池:复用怪物对象,避免频繁 GC
- 怪物头顶显示血条
- 涉及范围:
- `game/enemies/` 目录6个文件
- `game/GameScene.ts`(集成波次管理器)
- 验收标准第1波10只应届生沿S型路径走到终点KPI 正确扣减
- 验证方式手动游玩第1波
---
## Phase 2下一批游戏玩法完整化
**目标:** 实现周报结算、特殊技能、完整6波、胜利/失败界面
- [ ] **Task 2A: 周报结算系统 + 特殊技能**
- 批次:下一批
- 执行方式:并行(P2-玩法)
- 前置依赖Phase 1 全部完成
- 目标:
- 实现周报弹窗第3波结束触发10秒倒计时3个黑话选项
- 实现选对/超时/选错的结果逻辑
- 实现各塔特殊技能:整顿职场、代码屎山、黑话领域、打鸡血
- 实现摸鱼机制点击塔花10HC买咖啡补满精力
- 涉及范围:
- `game/ui/WeeklyReportModal.ts`(周报弹窗)
- `game/data/buzzwords.ts`黑话题库100条
- 各塔文件的特殊技能方法
- 验收标准第3波后弹出周报选对获得奖励特殊技能正常触发
- [ ] **Task 2B: 胜利/失败结算界面 + HUD完善**
- 批次:下一批
- 执行方式:并行(P2-玩法)
- 前置依赖Phase 1 全部完成
- 目标:
- 失败结算仿钉钉退群通知弹窗KPI归零触发
- 胜利结算仿绩效评级界面6波全部通过
- 顶部 HUD 完善KPI 进度条 + HC 数值实时更新
- BOSS 出现特效:全屏红色闪光 + 警告文字
- 怪物头顶语录飘字100条黑话随机显示
- 涉及范围:
- `game/ui/VictoryModal.ts`
- `game/ui/DefeatModal.ts`
- `game/ui/HUD.ts`
- `game/data/quotes.ts`100条语录
---
## Phase 3收尾批体验优化
- [ ] **Task 3: 视觉polish + 适配优化**
- 批次:收尾批
- 前置依赖Phase 2 完成
- 目标:
- Canvas 缩放适配(不同浏览器窗口大小等比缩放)
- CRT 扫描线效果CSS叠加层
- 霓虹发光按钮动效
- 音效模拟Web Audio API可跳过
- 主页视觉完善(游戏截图预览、特性介绍)
---
## 技术关键点
### Phaser.js 在 Next.js 中的集成
```typescript
// app/game/page.tsx
'use client'
import { useEffect, useRef } from 'react'
export default function GamePage() {
const gameRef = useRef<Phaser.Game | null>(null)
useEffect(() => {
// 动态导入 Phaser避免 SSR 报错)
import('phaser').then((Phaser) => {
import('@/game/config').then(({ gameConfig }) => {
gameRef.current = new Phaser.Game(gameConfig)
})
})
return () => {
gameRef.current?.destroy(true)
}
}, [])
return <div id="game-container" className="w-full h-screen" />
}
```
### 对象池模式
```typescript
// game/enemies/EnemyPool.ts
class EnemyPool {
private pool: EnemyBase[] = []
// 从池中获取怪物,没有则创建
acquire(type: EnemyType): EnemyBase { ... }
// 怪物死亡后回收
release(enemy: EnemyBase) { ... }
}
```
### 游戏数值常量
```typescript
// game/constants.ts
export const MAP_COLS = 16
export const MAP_ROWS = 12
export const TILE_SIZE = 48
export const CANVAS_WIDTH = MAP_COLS * TILE_SIZE // 768 (内部逻辑宽度Phaser处理)
export const CANVAS_HEIGHT = MAP_ROWS * TILE_SIZE // 576
// S型路径坐标格子坐标非像素
export const PATH_WAYPOINTS = [
{ x: 0, y: 2 }, // 入口(面试间)
{ x: 7, y: 2 }, // 第一个转折
{ x: 7, y: 9 }, // 第二个转折
{ x: 15, y: 9 }, // 出口(财务室)
]
export const INITIAL_HC = 200
export const INITIAL_KPI = 100
```
---
## 相关上下文
- PRD 文档:`.docs/prd-tower-defense-game.md`
- 设计系统:`design-system/大厂保卫战/MASTER.md`
- 开发规范:`@rules/dev-best-practices.md`
- 原子提交规范:`@rules/atomic-commit.md`
完成开发后,按 `@rules/atomic-commit.md` 规范,将变更按逻辑模块分组提交(禁止 `git add .`),确保所有文件均已 commit 后再结束任务。