2.9 KiB
Executable File
2.9 KiB
Executable File
Task 6: 开发 Canvas 2D 深空巡航实时玩法
Agent: full-stack-developer
完成状态: ✅ 全部完成
创建的文件
/home/z/my-project/src/lib/game/cruise.ts— 逻辑层(~520 行纯 TS)/home/z/my-project/src/components/game/CruiseMode.tsx— Canvas 2D 渲染层(~830 行)
修改的文件
/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) 四色全息色谱,零蓝色/靛色