# Task 6: 开发 Canvas 2D 深空巡航实时玩法 ## Agent: full-stack-developer ## 完成状态: ✅ 全部完成 ## 创建的文件 1. `/home/z/my-project/src/lib/game/cruise.ts` — 逻辑层(~520 行纯 TS) 2. `/home/z/my-project/src/components/game/CruiseMode.tsx` — Canvas 2D 渲染层(~830 行) ## 修改的文件 1. `/home/z/my-project/src/app/page.tsx` — 新增巡航入口按钮 + CruiseMode 渲染 ## 关键实现细节 ### cruise.ts 逻辑层 - **类型系统**:CruiseEntity 联合类型(8 种实体:ship/asteroid/storm/crystal/insight/beacon/stargate/particle),完整 CruiseState/Phase/RunResult/Stats/Input - **关卡生成**:mulberry32 + FNV-1a 种子化 RNG;陨石(8+level×2)、风暴(1+level/2)、晶体(5+level)、洞见(2+level/3)、信标(1+level/4)、星门;时长 60-90s - **物理**:飞船 8 方向加速度+摩擦+限速+边界反弹;陨石碰撞扣盾+击退+600ms 无敌;风暴持续 DPS;收集物吸引半径 90px 自动吸入 - **奖励**:crystals=碎片×(8+lvl×2)、insights=洞见×(2+lvl×0.5)、contact=信标×(1.5+lvl×0.3);通关×1.5、失败×0.5 - **localStorage**:独立 key `echo-nexus-cruise-v1`,记录最高分/通关数/最高关卡/累计奖励/最近 20 局 ### CruiseMode.tsx 渲染层 - **全屏 Canvas**:fixed inset-0 z-50,DPR cap 2,resize 监听 - **3 层视差星空**:远/中/近 100/60/30 星,独立漂移+飞船速度视差+闪烁 - **实体辉光绘制**:全部使用 ctx.shadowBlur;飞船三角形+尾焰渐变;陨石不规则多边形;风暴 5 层云团+闪电;晶体菱形+脉冲环;洞见球体+漩涡;信标光束+旋转环;星门 4 层旋涡+吸入粒子 - **粒子系统**:尾焰/收集/碰撞/烟花,上限 200 - **屏幕震动**:受击 280ms 衰减抖动 - **低护盾警告**:shield<30% 屏幕边缘 rose 脉冲边框 - **HUD**:HTML 叠层(非 canvas),glass+backdrop-blur;护盾/能量/分数/用时/收集计数;80ms 节流更新 - **控制**:桌面 WASD/方向键;移动端 floating 虚拟摇杆;P 暂停;Esc 退出;失焦自动暂停 - **奖励同步**:结算时 grantCruiseReward + recordRun,rewardGrantedRef 防重 ### page.tsx 集成 - header 按钮区新增「巡航」按钮(Navigation 图标,amber 主题) - 新增 cruiseOpen state - 组件末尾渲染 {cruiseOpen && } - 未破坏现有 7 标签页和其他功能 ## QA 验证结果 - ✅ lint 零错误 - ✅ 巡航按钮出现在顶部 header - ✅ 点击进入全屏 Canvas,ready 界面完整 - ✅ WASD 控制飞船移动,按 W 直冲星门通关 - ✅ 收集 2 晶体 → 奖励 +30(2×10×1.5=30 计算正确) - ✅ localStorage 正确记录 highScore/totalWins/bestLevel - ✅ 奖励同步到 gameStore - ✅ 退出返回主界面,7 标签页完好 - ✅ 移动端 viewport 测试通过 ## 色彩遵循 emerald(#34d399) / rose(#fb7185) / amber(#fbbf24) / fuchsia(#e879f9) 四色全息色谱,零蓝色/靛色