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

9.5 KiB
Raw Permalink Blame History

《大厂保卫战:最后的打工人》- 任务计划 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.tsxNext.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.tsPhaser 配置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.ts00后实习生50HC近战
        • game/towers/SeniorDevTower.tsP6资深开发120HC远程直线
        • game/towers/PPTMasterTower.tsPPT大师100HC范围减速
        • game/towers/HRBPTower.tsHRBP80HC辅助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.ts35岁老员工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.ts100条语录

Phase 3收尾批体验优化

  • Task 3: 视觉polish + 适配优化
    • 批次:收尾批
    • 前置依赖Phase 2 完成
    • 目标:
      • Canvas 缩放适配(不同浏览器窗口大小等比缩放)
      • CRT 扫描线效果CSS叠加层
      • 霓虹发光按钮动效
      • 音效模拟Web Audio API可跳过
      • 主页视觉完善(游戏截图预览、特性介绍)

技术关键点

Phaser.js 在 Next.js 中的集成

// 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" />
}

对象池模式

// game/enemies/EnemyPool.ts
class EnemyPool {
  private pool: EnemyBase[] = []
  // 从池中获取怪物,没有则创建
  acquire(type: EnemyType): EnemyBase { ... }
  // 怪物死亡后回收
  release(enemy: EnemyBase) { ... }
}

游戏数值常量

// 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 后再结束任务。