# 实施计划 — 《影之传说：忍者救公主》MVP（仅第一章，横屏）

> 以下任务基于 [requirements.md](./requirements.md) 中的 20 条需求，按"自底向上 + 可独立验证"的顺序组织。每一个子任务均为可执行的编码步骤，可独立提交与测试。
>
> **核心约束**：横屏（Landscape）锁定、设计分辨率 960×540、Cocos Creator 3.8.x + TypeScript、微信小游戏、首包 ≤4MB、锁帧 30fps、仅硬核模式、MVP 仅第一章 5 关。

---

- [ ] 1. 项目脚手架与分层架构搭建
- [ ] 1.1 初始化 Cocos Creator 3.8.x + TypeScript 项目（横屏）
  - 创建项目骨架：`assets/scripts/{ui,logic,data,common}`、`assets/scenes`、`assets/resources/{prefabs,textures,audio,configs}`
  - 配置微信小游戏构建选项（基础库 2.16.0+，锁帧 30fps）
  - **在 Cocos Project Settings + `game.json` 中强制横屏**（`deviceOrientation: landscape`），设计分辨率 960×540，Canvas Fit Height 适配策略
  - 接入 ESLint + Prettier + tsconfig 严格模式
  - _需求：技术栈约束、18.1 ~ 18.7_
- [ ] 1.2 建立核心基础设施模块
  - 实现 `EventBus`（全局事件）、`ObjectPool`（对象池）、`TimeMgr`（暂停/恢复）、`StorageMgr`（封装 `wx.setStorageSync` + 读取失败回退）
  - 定义 `Logger` 与分级打点接口，预留性能埋点入口
  - 为上述模块补充单元测试（Jest），覆盖率 ≥ 80%
  - _需求：17.1 ~ 17.6、18.4 ~ 18.5、20.1 ~ 20.6_

- [ ] 2. 数据驱动配置与类型系统
- [ ] 2.1 定义 TS 接口与 JSON 配置表（仅硬核）
  - 编写 `IEnemyConfig`、`IWeaponConfig`、`IItemConfig`、`ILevelConfig`、`IBossConfig`、`IStorySceneConfig` 等接口
  - 输出第一章 5 关 + 4 种敌人 + 1 个 BOSS（双幻坊）+ 5 种道具（水晶玉/点丸/术丸/魔笛/增丸）+ 2 种武器 + 剧情背景 3 页配置的 JSON
  - 实现 `ConfigMgr` 异步加载与校验（缺失字段报错），**不加载任何轻度模式配置分支**
  - _需求：6.1 ~ 6.7、7.1 ~ 7.6、8.1 ~ 8.5、9.1 ~ 9.6、13.1 ~ 13.6、19.2_

- [ ] 3. 悬浮操作 UI 系统（横屏布局 + 多点触控）
- [ ] 3.1 实现悬浮 UI 图层与虚拟摇杆（横屏基线 960×540）
  - 创建独立 UI Canvas（层级高于游戏场景），按横屏布局渲染摇杆（左下 Ø120px）、跳跃键（摇杆右上方 Ø90px）、手里剑（右下偏左 Ø90px）、忍者刀（右下偏右 Ø90px），默认透明度 70%
  - 保证左右两组按钮分别落在屏幕**左右 1/3 安全区**，不遮挡战斗视野
  - 实现摇杆死区（10px）、区域外点击方向向量识别、45°/135° 抛物线角度识别区与轨迹预览光效
  - 支持横屏安全区自适应（16:9 / 18:9 / 19.5:9 / 20:9，识别**左右两侧**刘海/听筒/Home Indicator），≥3 点多点触控、按钮区优先、非按钮区事件穿透
  - _需求：1.1 ~ 1.8、2.5 ~ 2.6、18.6、20.1、20.3_
- [ ] 3.2 实现布局自定义与持久化
  - 长按进入布局设置模式，允许拖拽按钮位置、调整大小与透明度
  - 将布局写入 `StorageMgr`，下次启动自动还原；读取失败使用横屏默认布局
  - _需求：1.6、17.2、17.6_

- [ ] 4. 角色移动与物理跳跃系统
- [ ] 4.1 实现地面检测与横向移动
  - 基于简化 AABB 碰撞实现地面/空中状态机，暴露 `isGrounded` 属性
  - 摇杆左右方向 → 100/150px/秒移动（红衣/绿衣/黄衣分档）
  - _需求：2.1、5.1 ~ 5.2_
- [ ] 4.2 实现物理跳跃与抛物线跳跃
  - 实现标准垂直跳（250px）、长按蓄力高跳（375px）、黄衣跳跃（300px）
  - 摇杆在 45°/135° + 跳跃按下 → 抛物线轨迹跳跃；空中禁用跳跃按钮并半透明反馈
  - 起跳前插入 ≈150ms 下蹲延迟；硬核模式下跳跃过程中禁止横向轨迹调整
  - _需求：2.2 ~ 2.8、13.3 ~ 13.5、20.2、20.5_

- [ ] 5. 攻击与状态系统（双按钮互斥 + 自动升级）
- [ ] 5.1 实现双攻击按钮互斥与组合操作
  - 点击任一攻击按钮激活对应武器（手里剑 0.3/0.25 s，忍者刀 0.5 s），另一按钮半透明未激活；同时按下以最先按下的为准
  - 支持长按手里剑 3 连发；跳跃+攻击（100ms 内）识别为跳跃攻击组合；允许"移动+跳跃+攻击"三合一与组合光效叠加
  - _需求：3.1 ~ 3.6、3.9、4.1 ~ 4.5、20.4_
- [ ] 5.2 实现忍者刀攻防一体与角色状态机
  - 忍者刀判定帧内对 `shuriken/sword` 类型攻击成功格挡（播放特效+音效），对 `fireball/smoke_bomb` 不格挡
  - 角色状态机：红衣 ↔ 绿衣 ↔ 黄衣，拾取水晶玉自动升级，被普攻命中立即降回红衣并清零强化；烟玉/火球直接死亡
  - _需求：3.7 ~ 3.8、5.1 ~ 5.6、10.2 ~ 10.5_

- [ ] 6. 敌人 AI、道具与碰撞伤害系统
- [ ] 6.1 实现 4 种敌人 AI
  - 青忍（远程十字镖 + 近战刀斩，2.0 s 间隔）、赤忍（120px/s + 烟玉 1.5 s + 主动拦截跳跃）
  - 黑忍（城壁关卡掉落魔笛卷物，死亡后不再刷新）、妖坊（3.0 s 直线火球，秒杀）
  - 摄像机视野外敌人暂停 AI 更新，进入视野恢复；敌人/子弹统一走对象池
  - _需求：6.1 ~ 6.7、18.5_
- [ ] 6.2 实现道具掉落与碰撞伤害判定
  - 森林 12 击杀计数 → 水晶玉确定性生成，13~20 s 或移出视野后销毁
  - 3 赤忍击杀 → 50% 掉落点丸/术丸；魔笛秒杀全屏；增丸 +1 命
  - 统一 `DamageSystem`：无敌帧 → 忍者刀格挡 → 攻击类型/距离判定 → 扣血；火球 <100px、烟玉 <80px 致命
  - _需求：7.1 ~ 7.6、10.1 ~ 10.6_

- [ ] 7. 关卡、场景与视差滚动系统
- [ ] 7.1 实现 4 层视差场景与关卡框架（按 16:9 横屏基准标定）
  - 抽象 `LevelBase`，加载关卡配置 → 摄像机卷轴（横向/左右/垂直）→ 4 层视差滚动（1:2:4:4）
  - **按 16:9 横屏可视宽度重新标定卷轴速度与关卡长度**，保证 30fps 稳定渲染
  - 场景互动：树木/石柱遮挡子弹、草丛短暂隐身、藤蔓可攀爬、绳索需挥刀斩断
  - _需求：8.8 ~ 8.9、15.4 ~ 15.5、18.1 ~ 18.3_
- [ ] 7.2 实现第一章 5 关内容（1-1 ~ 1-5）
  - 按配置表完成 1-1 森林（3 妖坊/75s）、1-2 森林深处（红妖珠坊/85s）、1-3 洞穴水路（10 青忍/100s）、1-4 城壁垂直（顶层/95s）
  - 1-5 魔城天守阁：进入双幻坊 BOSS 战房间；保证时限、通关条件、场景切换稳定
  - _需求：8.1 ~ 8.5、14.5_

- [ ] 8. BOSS 战（双幻坊 蝴蝶显形）与第一章结局叙事
- [ ] 8.1 实现蝴蝶显形与一击必杀机制
  - BOSS 战关卡生成环绕蝴蝶对象，未命中前 BOSS 无敌；命中蝴蝶 → 变色并触发 BOSS 显形
  - 双幻坊 3 种攻击模式（双人夹击 / 火球喷射 / 分身迷惑）按血量 1/3 阶段切换
  - 显形后任一有效命中 → BOSS 死亡；玩家被火球命中立即死亡
  - _需求：9.1 ~ 9.6、13.4_
- [ ] 8.2 实现"公主被带走"过场与章节结算
  - BOSS 血量 ≤ 1/2 时触发 ≤3s "公主被青忍带走"短过场（战斗不暂停）
  - 击败双幻坊 → ≤2s 定格画面 → 无缝进入第一章结算界面；全程不得出现"斩断绳索解救成功"画面
  - 过场与结算期间支持"跳过"按钮直达结算
  - _需求：8.6 ~ 8.7、14.1 ~ 14.5_

- [ ] 9. 基础 UI 流程、剧情背景、新手引导与得分结算
- [ ] 9.1 实现剧情背景介绍系统（正式进关前的背景交代）
  - 新建 `StorySceneCtrl`：按配置加载 3 页像素插画 + 打字机文案，分页推进；右下角"跳过"、左下角"下一页"指示
  - 点击屏幕任意区域加速打字显现；点击"跳过"立即终止过场并加载 1-1，无二次确认
  - 仅**首次**从主菜单点击"开始游戏"或首次进入 1-1 时自动播放；首次完成/跳过后写入 `StorageMgr`，下次启动默认跳过
  - 设置界面提供"重新观看背景介绍"入口、结算界面"重玩第一章"按钮触发状态重置
  - 播放专属 `bgm_story`，遵循 BGM/音效音量；960×540 横屏布局下文字避开左右安全区
  - 过场结束无缝衔接新手引导（需求 11.1），不引入额外点击等待
  - _需求：19.1 ~ 19.9、17.5_
- [ ] 9.2 实现主流程 UI 场景（横屏布局）
  - 主菜单（开始游戏/设置/关卡选择）→ 关卡选择（依据本地解锁状态）→ 游戏内 HUD（命数/得分/计时）→ 结算界面（本关得分/总分/连击/无伤）→ 失败界面（重试/返回）
  - 设置界面：BGM/音效音量、悬浮按钮布局重置、重置新手引导、**重新观看背景介绍**；**不得出现任何难度选择入口**
  - 所有场景均按 960×540 设计，横屏下对刘海/听筒区进行黑边或偏移处理
  - _需求：12.7 ~ 12.8、13.1、17.1 ~ 17.6、18.6_
- [ ] 9.3 实现新手引导与得分系统
  - 1-1 高亮引导：攻击按钮 → 摇杆 → 跳跃按钮；1-2 引导：抛物线跳跃/互斥按钮/格挡/跳跃攻击/自动升级；1-3 引导：蝴蝶显形/BOSS 攻击识别/一击必杀
  - 引导完成状态持久化；得分规则：忍者刀 ×2、手里剑 ×1、完美格挡 ×3、5 连刃接触 +1500、无伤 ×3、剩余时间折分
  - _需求：11.1 ~ 11.5、12.1 ~ 12.6_

- [ ] 10. 美术音效资源、性能优化与体验埋点
- [ ] 10.1 集成像素美术与音频资源
  - 按 `images/影.png`、`images/敌人.png`、`images/场景.png` 产出主角 3 形态（16×32）、4 敌人、1 BOSS 及森林/城墙/魔城 3 场景（每场景 ≤48 色）
  - 产出剧情背景介绍的 3 页像素插画（主角身份/公主被掳/启程使命）
  - 接入 5 类 WAV 音效（attack/jump/hurt/pickup/parry）与 5 首 MP3 BGM（forest/castle/final/boss/story），总音频 ≤500KB
  - 实现季节调色板切换（青叶/红叶/雪原）与落叶/飘雪粒子（MVP 仅启用青叶，其余保留接口）
  - _需求：15.1 ~ 15.5、16.1 ~ 16.5、19.7_
- [ ] 10.2 性能优化与埋点验证
  - 对象池复用敌人/子弹/特效；关卡切换清理资源，内存峰值 ≤200MB；首包 ≤4MB（其余按关卡分包）
  - 横屏异形屏适配（左右两侧安全区识别），低端机可关闭粒子特效，帧率 ≥25fps
  - 埋点：触控响应 <50ms、跳跃状态切换 <50ms、45°/135° 识别 ≥95%、组合识别 <100ms、空中跳跃禁用执行率 ≥99%，并输出流畅度评分统计
  - _需求：18.1 ~ 18.7、20.1 ~ 20.6_
