# 需求文档：坦克大作战（微信小游戏版）

## 引言

《坦克大作战》是一款面向微信小游戏平台的经典坦克对战休闲游戏，目标用户为25-40岁怀旧玩家及泛休闲用户。游戏核心卖点为"单手操作还原FC手感 + 微信好友排行榜/对战"。技术栈采用 Cocos Creator + 微信小游戏云托管。

游戏核心循环为单局3-5分钟的快节奏体验：玩家需保护基地不被敌方坦克摧毁，击毁所有刷新的敌方坦克，通过拾取道具升级火力和辅助通关，最终根据击杀数、通关时间、基地血量计算得分并上传排行榜。

---

## 需求

### 需求 1：游戏基础框架与场景管理

**用户故事：** 作为一名玩家，我希望游戏能够流畅加载并在不同场景间平滑切换，以便获得良好的游戏体验。

#### 验收标准

1. WHEN 玩家打开小游戏 THEN 系统 SHALL 展示加载界面并在3秒内完成资源加载，进入主菜单场景。
2. WHEN 资源加载完成 THEN 系统 SHALL 支持以下场景的管理与切换：主菜单、游戏关卡、结算界面、排行榜界面。
3. WHEN 玩家在任意场景中操作 THEN 系统 SHALL 保持稳定的60FPS帧率（目标值），避免明显卡顿。
4. WHEN 游戏运行时 THEN 系统 SHALL 使用对象池技术管理子弹、爆炸特效等高频创建/销毁的对象，避免内存抖动。
5. IF 设备性能较低 THEN 系统 SHALL 自动降级渲染效果（如减少粒子特效），保证基本流畅度。

---

### 需求 2：地图与地形系统

**用户故事：** 作为一名玩家，我希望游戏拥有经典的砖块、钢铁、河流、森林等地形元素，以便体验丰富的战术策略。

#### 验收标准

1. WHEN 关卡加载时 THEN 系统 SHALL 基于13×21的网格（13行×21列）生成俯视2D地图，横屏布局确保在手机上视野宽阔清晰。
2. WHEN 地图中存在**砖块**地形 THEN 系统 SHALL 允许子弹击碎砖块（Lv3子弹可一次击碎更大范围），砖块被击碎后变为可通行区域。
3. WHEN 地图中存在**钢铁**地形 THEN 系统 SHALL 阻挡普通子弹（Lv1/Lv2），仅允许Lv3（破钢）子弹摧毁钢铁墙。
4. WHEN 地图中存在**河流**地形 THEN 系统 SHALL 阻止坦克通行但允许子弹飞越河流。
5. WHEN 地图中存在**森林**地形 THEN 系统 SHALL 允许坦克和子弹通过，但森林覆盖在坦克上方（遮挡视觉）。
6. WHEN 地图加载时 THEN 系统 SHALL 在地图底部中央放置玩家基地（老鹰图标），基地周围默认有砖块围墙保护。
7. WHEN 关卡数据加载时 THEN 系统 SHALL 支持从预设的关卡配置数据中读取地图布局（支持未来扩展自定义关卡）。

---

### 需求 3：玩家坦克操控系统

**用户故事：** 作为一名玩家，我希望通过虚拟摇杆和发射按钮操控坦克，以便在手机上获得流畅的操作体验。

#### 验收标准

1. WHEN 游戏进入战斗场景 THEN 系统 SHALL 在屏幕左下角显示虚拟摇杆（控制上下左右四方向移动），右下角显示发射按钮。
2. WHEN 玩家拖动虚拟摇杆 THEN 系统 SHALL 控制坦克朝对应方向移动，坦克炮管朝向与移动方向一致。
3. WHEN 玩家点击发射按钮 THEN 系统 SHALL 从坦克炮管方向发射一颗子弹。
4. IF 玩家坦克火力等级为Lv1 THEN 系统 SHALL 限制同屏最多1颗玩家子弹（单发模式）。
5. IF 玩家坦克火力等级为Lv2 THEN 系统 SHALL 允许快速连射（同屏最多2颗子弹，射速提升）。
6. IF 玩家坦克火力等级为Lv3 THEN 系统 SHALL 允许连发（同屏最多2颗子弹）且子弹具备破钢能力。
7. WHEN 玩家坦克被敌方子弹击中或与敌方坦克碰撞 THEN 系统 SHALL 判定玩家坦克被摧毁，扣除一条生命，并在出生点重生（默认3条生命）。
8. WHEN 玩家生命数降为0 THEN 系统 SHALL 触发游戏失败流程（可选择广告复活或结算）。

---

### 需求 4：敌方坦克AI系统

**用户故事：** 作为一名玩家，我希望敌方坦克具有不同类型和智能行为，以便获得有挑战性的游戏体验。

#### 验收标准

1. WHEN 关卡开始时 THEN 系统 SHALL 从地图顶部的预设出生点依次刷新敌方坦克，每关总计约20辆。
2. WHEN 敌方坦克刷新时 THEN 系统 SHALL 根据关卡配置生成以下4种类型之一：普通坦克（标准速度/血量）、快速坦克（高速低血量）、重甲坦克（低速需2-4次命中）、精英坦克/BOSS（高血量+智能AI）。
3. WHEN 敌方坦克处于巡逻状态 THEN 系统 SHALL 控制其沿随机方向移动并定时发射子弹。
4. WHEN 敌方坦克发现通往基地的路径 THEN 系统 SHALL 切换至追击状态，优先向基地方向移动。
5. IF 关卡编号 ≥ 10 THEN 敌方坦克AI SHALL 具备"绕路偷家"能力，尝试绕过障碍物包抄基地。
6. IF 关卡编号 ≥ 15 THEN 敌方坦克AI SHALL 具备"集火基地"能力，多辆坦克协同攻击基地方向。
7. WHEN 敌方坦克AI进行寻路时 THEN 系统 SHALL 采用简单的A*或方向权重算法，确保在微信小游戏环境下性能可控。
8. WHEN 玩家子弹与敌方子弹碰撞 THEN 系统 SHALL 使双方子弹同时抵消消失。

---

### 需求 5：道具系统

**用户故事：** 作为一名玩家，我希望在战斗中拾取各种道具来增强自身能力，以便更好地通关。

#### 验收标准

1. WHEN 玩家击毁特定标记的敌方坦克 THEN 系统 SHALL 在地图随机位置生成一个道具，道具存在时间为15秒（闪烁提示后消失）。
2. WHEN 玩家坦克触碰**星星**道具 THEN 系统 SHALL 提升玩家火力等级（Lv1→Lv2→Lv3，已满级则无额外效果）。
3. WHEN 玩家坦克触碰**时钟**道具 THEN 系统 SHALL 冻结全屏所有敌方坦克10秒（敌方坦克停止移动和射击）。
4. WHEN 玩家坦克触碰**炸弹**道具 THEN 系统 SHALL 立即摧毁当前屏幕上所有可见的敌方坦克。
5. WHEN 玩家坦克触碰**钢盔**道具 THEN 系统 SHALL 使玩家坦克进入无敌状态（持续15秒），期间闪烁护盾特效。
6. WHEN 玩家坦克触碰**铲子**道具 THEN 系统 SHALL 将基地周围的砖块围墙临时替换为钢铁墙（持续20秒后恢复）。
7. WHEN 玩家坦克触碰**坦克（+1）**道具 THEN 系统 SHALL 增加玩家一条生命。
8. WHEN 道具掉落时 THEN 系统 SHALL 根据当前关卡编号调整掉落概率（关卡越高，星星掉落率越低，增加挑战性）。

---

### 需求 6：基地防守与胜负判定

**用户故事：** 作为一名玩家，我希望有明确的胜负条件，以便清楚了解每局游戏的目标。

#### 验收标准

1. WHEN 基地被任意子弹（含己方误伤）击中 THEN 系统 SHALL 判定基地被摧毁，立即触发游戏失败（Game Over）。
2. WHEN 玩家击毁本关所有敌方坦克（约20辆）且基地未被摧毁 THEN 系统 SHALL 判定本关胜利，进入结算界面。
3. WHEN 玩家生命数降为0且无复活机会 THEN 系统 SHALL 判定游戏失败，进入结算界面。
4. WHEN 进入结算界面 THEN 系统 SHALL 展示本局得分（根据击杀数、通关时间、基地存活状态综合计算）、击杀各类型坦克的统计数据。

---

### 需求 7：关卡系统与难度曲线

**用户故事：** 作为一名玩家，我希望游戏关卡由易到难逐步递进，以便获得持续的挑战感和成就感。

#### 验收标准

1. WHEN 玩家首次进入游戏 THEN 系统 SHALL 从第1关开始，前3关作为教学关（地形开阔、敌人慢速、提示操作方法）。
2. WHEN 玩家到达第5关 THEN 系统 SHALL 引入河流地形，考验玩家走位能力。
3. WHEN 玩家到达第10关 THEN 系统 SHALL 引入重甲坦克，玩家必须升级至Lv2以上火力才能有效击破。
4. WHEN 玩家到达第20关 THEN 系统 SHALL 生成BOSS关（巨型坦克），需配合道具策略击杀。
5. WHEN 玩家通过最后一关 THEN 系统 SHALL 循环回到第1关但整体难度提升（敌人速度/数量增加），实现无限关卡循环。
6. WHEN 关卡编号增加时 THEN 系统 SHALL 逐步提升敌方AI智能程度（从直线冲锋→绕路偷家→集火基地）。
7. WHEN 关卡编号增加时 THEN 系统 SHALL 逐步降低星星道具掉落率，提升游戏挑战性。

---

### 需求 8：游戏模式

**用户故事：** 作为一名玩家，我希望有多种游戏模式可选，以便获得不同的游戏体验。

#### 验收标准

1. WHEN 玩家在主菜单选择"经典模式" THEN 系统 SHALL 进入无限关卡循环模式，玩家逐关挑战并冲击好友排行榜。
2. WHEN 玩家在主菜单选择"无尽模式" THEN 系统 SHALL 进入无限波次敌人模式，比拼最高击杀数（首次需观看广告解锁）。
3. WHEN 玩家在主菜单选择"双人对战" THEN 系统 SHALL 通过微信邀请好友进行1v1实时对战（阵地破坏模式），双方各拥有1个基地，率先摧毁对方基地的一方获胜。
4. IF 玩家选择双人对战模式 THEN 系统 SHALL 提供简单的房间匹配机制（创建房间/加入房间），通过微信社交关系链邀请好友。
5. WHEN 双人对战开始时 THEN 系统 SHALL 生成对称式对战地图，双方各拥有1个基地，分别位于地图两端。
6. WHEN 任一方基地被摧毁 THEN 系统 SHALL 判定该方失败，对战立即结束并进入结算界面。对战不设时间限制，唯一的胜利条件为摧毁对方基地。
7. WHEN 玩家在双人对战中被击毁 THEN 系统 SHALL 在己方基地附近自动重生（无生命数限制），重生间隔为3秒。
8. WHEN 双人对战结算时 THEN 系统 SHALL 展示双方基地HP、击杀数、死亡数、阵地伤害等数据。
9. IF 玩家在双人对战中断线 THEN 系统 SHALL 尝试自动重连（最多5次），超时未重连则判定对方获胜。

---

### 需求 9：微信社交与排行榜系统

**用户故事：** 作为一名玩家，我希望能看到微信好友的排名并与他们互动，以便增加游戏的社交乐趣和竞争动力。

#### 验收标准

1. WHEN 玩家进入排行榜界面 THEN 系统 SHALL 通过微信开放数据域展示好友排名（按最高通关关卡/最高得分排序）。
2. WHEN 玩家通关后 THEN 系统 SHALL 自动将得分上传至微信云数据库，更新排行榜数据。
3. WHEN 玩家通关后 THEN 系统 SHALL 提供"挑战书"功能，生成包含"我通关了第X关，你敢挑战吗？"文案的分享卡片（带小程序码），可分享到群/朋友圈。
4. WHEN 玩家卡关时 THEN 系统 SHALL 提供"助战"功能，分享给好友后好友点击可为玩家发送"炸弹"道具援助。
5. WHEN 玩家本局得分超过好友最高分 THEN 系统 SHALL 在结算界面高亮提示"超越了好友XXX"。

---

### 需求 10：商业化系统（广告与内购）

**用户故事：** 作为游戏运营方，我希望通过合理的广告和内购设计实现商业化，同时不影响玩家核心体验。

#### 验收标准

1. WHEN 玩家死亡且有剩余复活机会 THEN 系统 SHALL 弹出"观看广告复活"选项（激励视频），复活后保留当前火力等级。
2. WHEN 关卡结算时 THEN 系统 SHALL 提供"观看广告获得双倍金币/道具"选项（激励视频）。
3. WHEN 玩家进入皮肤商店 THEN 系统 SHALL 展示可通过观看广告解锁的特殊皮肤（如"黄金坦克"）。
4. WHEN 每局游戏结束或玩家退出关卡时 THEN 系统 SHALL 展示插屏广告（频率控制：每3局最多1次）。
5. IF 玩家购买"永久去广告"内购项 THEN 系统 SHALL 永久移除所有插屏广告（激励视频保留，因为是玩家主动选择）。
6. IF 玩家购买"皮肤包"内购项 THEN 系统 SHALL 解锁对应的坦克皮肤（如"红白机配色"经典皮肤包）。

---

### 需求 11：数据持久化与存档系统

**用户故事：** 作为一名玩家，我希望游戏进度能够自动保存，以便下次打开时继续游戏。

#### 验收标准

1. WHEN 玩家通过任意关卡 THEN 系统 SHALL 使用 `wx.setStorageSync` 自动保存当前关卡进度、最高分、生命数等本地数据。
2. WHEN 玩家重新打开游戏 THEN 系统 SHALL 读取本地存档数据，允许玩家从上次进度继续游戏或重新开始。
3. WHEN 玩家得分更新时 THEN 系统 SHALL 将最新得分同步至微信云数据库（用于排行榜）。
4. IF 本地存档数据损坏或丢失 THEN 系统 SHALL 从云端恢复玩家的关键进度数据（最高关卡、最高分）。
5. WHEN 玩家获得新皮肤或内购项 THEN 系统 SHALL 将购买记录同步至云端，确保换设备后不丢失。

---

### 需求 12：UI界面与用户体验

**用户故事：** 作为一名玩家，我希望游戏界面简洁美观、操作直觉化，以便快速上手并沉浸在游戏中。

#### 验收标准

1. WHEN 游戏启动 THEN 系统 SHALL 展示主菜单界面，包含：经典模式、无尽模式、双人对战、排行榜、设置等入口。
2. WHEN 进入战斗场景 THEN 系统 SHALL 在屏幕顶部显示HUD信息：当前关卡、剩余敌人数量、玩家生命数、当前火力等级。
3. WHEN 玩家暂停游戏 THEN 系统 SHALL 弹出暂停菜单（继续游戏、重新开始、返回主菜单）。
4. WHEN 玩家首次进入游戏 THEN 系统 SHALL 提供简短的新手引导（指示虚拟摇杆和发射按钮的用法，约2-3步）。
5. WHEN 游戏中出现重要事件（如道具拾取、敌人全灭、BOSS出现） THEN 系统 SHALL 播放对应的音效和简短的视觉反馈。
6. WHEN 玩家在设置界面操作 THEN 系统 SHALL 提供音效开关、音乐开关、振动开关等选项。

---

### 需求 13：3v3 对战模式

**用户故事：** 作为一名玩家，我希望能与好友组队进行 3v3 破坏对方阵地的对战，以便获得更具团队协作感和竞技性的游戏体验。

#### 模式定位

玩法：3v3 破坏对方阵地。双方各拥有1个基地（阵地），不限时间，率先摧毁对方基地的一方获胜。

#### 核心流程

```mermaid
graph TD
    A[玩家点击3v3入口] --> B{选择模式}
    B -->|组队开黑| C[创建队伍]
    B -->|单人| D[快速匹配]
    
    C --> E[邀请好友入队]
    E --> F[队伍满3人/点击匹配]
    F --> G[系统匹配对手]
    
    D --> H[加入匹配池]
    G --> I[6人满房]
    H --> I
    I --> J[进入加载页]
    J --> K[开始对战]
```

#### 验收标准

##### 好友开黑 — 队伍系统

1. WHEN 玩家在 3v3 入口选择"组队开黑" THEN 系统 SHALL 创建一个队伍房间，创建者自动成为**队长**。
2. WHEN 队长操作队伍时 THEN 系统 SHALL 赋予队长以下权限：邀请好友、踢出队员、开始匹配、解散队伍；队长头像带"队长"标识，操作按钮高亮。
3. WHEN 队员加入队伍后 THEN 系统 SHALL 赋予队员以下权限：准备/取消准备、退出队伍；队员界面显示"准备状态"，无法操作匹配按钮。
4. WHEN 队长点击"邀请好友" THEN 系统 SHALL 调用微信好友列表，生成邀请卡片，卡片内容为"坦克3v3，速来开黑！"。
5. WHEN 好友点击邀请卡片 THEN 系统 SHALL 检测卡片中的 `teamId` 参数，将好友加入对应队伍房间（MGOBE Room）。
6. IF 队伍人数已满3人 THEN 系统 SHALL 拒绝新成员加入并提示"队伍已满"。

##### 匹配方案

7. WHEN 玩家单独点击"快速开始" THEN 系统 SHALL 将玩家加入单人匹配池，按段位/胜率进行匹配，补位至 3v3。
8. WHEN 队长点击"开始匹配" THEN 系统 SHALL 将队伍整体加入匹配池，寻找实力相近的对手队伍或散人进行组合。
9. IF 匹配超时（超过60秒未凑满6人） THEN 系统 SHALL 自动填充 AI 机器人补位，确保对局可以正常开始。
10. WHEN 6人满房（含 AI 填充） THEN 系统 SHALL 进入加载页，所有玩家同步加载对战地图资源。

##### 对战规则

11. WHEN 3v3 对战开始时 THEN 系统 SHALL 生成对称式对战地图，双方各拥有1个基地（阵地），分别位于地图两端，地图中央为争夺区域。
12. WHEN 任一方基地被摧毁 THEN 系统 SHALL 判定该方失败，对战立即结束并进入结算界面。对战不设时间限制，唯一的胜利条件为摧毁对方基地。
13. WHEN 玩家在 3v3 对战中被击毁 THEN 系统 SHALL 在己方基地附近自动重生（无生命数限制），重生间隔为3秒。所有坦克的出生点均位于所在基地附近区域。
14. WHEN 3v3 对战结算时 THEN 系统 SHALL 展示双方各玩家的击杀数、死亡数、助攻数、对阵地伤害等数据，并根据表现计算段位积分变化。

##### 网络与同步

15. WHEN 3v3 对战进行中 THEN 系统 SHALL 采用帧同步或状态同步方案（基于微信小游戏 MGOBE 或同等方案），确保6人对战的网络延迟可控。
16. IF 玩家在对战中断线 THEN 系统 SHALL 保留其位置60秒，期间允许重连恢复对战；超时未重连则由 AI 接管该玩家坦克。

---

## 边界情况与技术约束

### 边界情况
1. **网络断开**：排行榜上传失败时，系统应缓存数据并在网络恢复后自动重试。
2. **小游戏被后台切走**：系统应自动暂停游戏，返回前台后恢复。
3. **广告加载失败**：激励视频加载失败时，应提供备选方案（如直接给予较少奖励或提示稍后重试）。
4. **同屏大量对象**：当同屏坦克+子弹数量过多时，应通过对象池和渲染优化保证性能。
5. **玩家误伤基地**：玩家自己的子弹也可以摧毁基地围墙和基地本身，需保留此经典机制。

### 技术约束
1. 微信小游戏包体大小限制（首包≤4MB，分包≤20MB），需合理规划资源加载策略。
2. 微信小游戏不支持DOM API，所有UI需通过Canvas或Cocos Creator UI系统实现。
3. 双人对战需要实时通信，建议使用微信小游戏帧同步或状态同步方案。
4. 开放数据域（排行榜）与主域隔离，需通过SharedCanvas方案展示好友排名。

### 成功标准
1. 游戏首包加载时间 ≤ 3秒（4G网络环境）。
2. 战斗场景稳定帧率 ≥ 55FPS（中端机型）。
3. 单局游戏时长控制在3-5分钟。
4. 新手玩家3分钟内理解核心操作。
