Files
test1/.docs/plans/2026-03-21-tower-defense-game.md

240 lines
9.5 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 《大厂保卫战:最后的打工人》- 任务计划 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 后再结束任务。