18 KiB
需求文档:坦克大作战(微信小游戏版)
引言
《坦克大作战》是一款面向微信小游戏平台的经典坦克对战休闲游戏,目标用户为25-40岁怀旧玩家及泛休闲用户。游戏核心卖点为"单手操作还原FC手感 + 微信好友排行榜/对战"。技术栈采用 Cocos Creator + 微信小游戏云托管。
游戏核心循环为单局3-5分钟的快节奏体验:玩家需保护基地不被敌方坦克摧毁,击毁所有刷新的敌方坦克,通过拾取道具升级火力和辅助通关,最终根据击杀数、通关时间、基地血量计算得分并上传排行榜。
需求
需求 1:游戏基础框架与场景管理
用户故事: 作为一名玩家,我希望游戏能够流畅加载并在不同场景间平滑切换,以便获得良好的游戏体验。
验收标准
- WHEN 玩家打开小游戏 THEN 系统 SHALL 展示加载界面并在3秒内完成资源加载,进入主菜单场景。
- WHEN 资源加载完成 THEN 系统 SHALL 支持以下场景的管理与切换:主菜单、游戏关卡、结算界面、排行榜界面。
- WHEN 玩家在任意场景中操作 THEN 系统 SHALL 保持稳定的60FPS帧率(目标值),避免明显卡顿。
- WHEN 游戏运行时 THEN 系统 SHALL 使用对象池技术管理子弹、爆炸特效等高频创建/销毁的对象,避免内存抖动。
- IF 设备性能较低 THEN 系统 SHALL 自动降级渲染效果(如减少粒子特效),保证基本流畅度。
需求 2:地图与地形系统
用户故事: 作为一名玩家,我希望游戏拥有经典的砖块、钢铁、河流、森林等地形元素,以便体验丰富的战术策略。
验收标准
- WHEN 关卡加载时 THEN 系统 SHALL 基于13×21的网格(13行×21列)生成俯视2D地图,横屏布局确保在手机上视野宽阔清晰。
- WHEN 地图中存在砖块地形 THEN 系统 SHALL 允许子弹击碎砖块(Lv3子弹可一次击碎更大范围),砖块被击碎后变为可通行区域。
- WHEN 地图中存在钢铁地形 THEN 系统 SHALL 阻挡普通子弹(Lv1/Lv2),仅允许Lv3(破钢)子弹摧毁钢铁墙。
- WHEN 地图中存在河流地形 THEN 系统 SHALL 阻止坦克通行但允许子弹飞越河流。
- WHEN 地图中存在森林地形 THEN 系统 SHALL 允许坦克和子弹通过,但森林覆盖在坦克上方(遮挡视觉)。
- WHEN 地图加载时 THEN 系统 SHALL 在地图底部中央放置玩家基地(老鹰图标),基地周围默认有砖块围墙保护。
- WHEN 关卡数据加载时 THEN 系统 SHALL 支持从预设的关卡配置数据中读取地图布局(支持未来扩展自定义关卡)。
需求 3:玩家坦克操控系统
用户故事: 作为一名玩家,我希望通过虚拟摇杆和发射按钮操控坦克,以便在手机上获得流畅的操作体验。
验收标准
- WHEN 游戏进入战斗场景 THEN 系统 SHALL 在屏幕左下角显示虚拟摇杆(控制上下左右四方向移动),右下角显示发射按钮。
- WHEN 玩家拖动虚拟摇杆 THEN 系统 SHALL 控制坦克朝对应方向移动,坦克炮管朝向与移动方向一致。
- WHEN 玩家点击发射按钮 THEN 系统 SHALL 从坦克炮管方向发射一颗子弹。
- IF 玩家坦克火力等级为Lv1 THEN 系统 SHALL 限制同屏最多1颗玩家子弹(单发模式)。
- IF 玩家坦克火力等级为Lv2 THEN 系统 SHALL 允许快速连射(同屏最多2颗子弹,射速提升)。
- IF 玩家坦克火力等级为Lv3 THEN 系统 SHALL 允许连发(同屏最多2颗子弹)且子弹具备破钢能力。
- WHEN 玩家坦克被敌方子弹击中或与敌方坦克碰撞 THEN 系统 SHALL 判定玩家坦克被摧毁,扣除一条生命,并在出生点重生(默认3条生命)。
- WHEN 玩家生命数降为0 THEN 系统 SHALL 触发游戏失败流程(可选择广告复活或结算)。
需求 4:敌方坦克AI系统
用户故事: 作为一名玩家,我希望敌方坦克具有不同类型和智能行为,以便获得有挑战性的游戏体验。
验收标准
- WHEN 关卡开始时 THEN 系统 SHALL 从地图顶部的预设出生点依次刷新敌方坦克,每关总计约20辆。
- WHEN 敌方坦克刷新时 THEN 系统 SHALL 根据关卡配置生成以下4种类型之一:普通坦克(标准速度/血量)、快速坦克(高速低血量)、重甲坦克(低速需2-4次命中)、精英坦克/BOSS(高血量+智能AI)。
- WHEN 敌方坦克处于巡逻状态 THEN 系统 SHALL 控制其沿随机方向移动并定时发射子弹。
- WHEN 敌方坦克发现通往基地的路径 THEN 系统 SHALL 切换至追击状态,优先向基地方向移动。
- IF 关卡编号 ≥ 10 THEN 敌方坦克AI SHALL 具备"绕路偷家"能力,尝试绕过障碍物包抄基地。
- IF 关卡编号 ≥ 15 THEN 敌方坦克AI SHALL 具备"集火基地"能力,多辆坦克协同攻击基地方向。
- WHEN 敌方坦克AI进行寻路时 THEN 系统 SHALL 采用简单的A*或方向权重算法,确保在微信小游戏环境下性能可控。
- WHEN 玩家子弹与敌方子弹碰撞 THEN 系统 SHALL 使双方子弹同时抵消消失。
需求 5:道具系统
用户故事: 作为一名玩家,我希望在战斗中拾取各种道具来增强自身能力,以便更好地通关。
验收标准
- WHEN 玩家击毁特定标记的敌方坦克 THEN 系统 SHALL 在地图随机位置生成一个道具,道具存在时间为15秒(闪烁提示后消失)。
- WHEN 玩家坦克触碰星星道具 THEN 系统 SHALL 提升玩家火力等级(Lv1→Lv2→Lv3,已满级则无额外效果)。
- WHEN 玩家坦克触碰时钟道具 THEN 系统 SHALL 冻结全屏所有敌方坦克10秒(敌方坦克停止移动和射击)。
- WHEN 玩家坦克触碰炸弹道具 THEN 系统 SHALL 立即摧毁当前屏幕上所有可见的敌方坦克。
- WHEN 玩家坦克触碰钢盔道具 THEN 系统 SHALL 使玩家坦克进入无敌状态(持续15秒),期间闪烁护盾特效。
- WHEN 玩家坦克触碰铲子道具 THEN 系统 SHALL 将基地周围的砖块围墙临时替换为钢铁墙(持续20秒后恢复)。
- WHEN 玩家坦克触碰**坦克(+1)**道具 THEN 系统 SHALL 增加玩家一条生命。
- WHEN 道具掉落时 THEN 系统 SHALL 根据当前关卡编号调整掉落概率(关卡越高,星星掉落率越低,增加挑战性)。
需求 6:基地防守与胜负判定
用户故事: 作为一名玩家,我希望有明确的胜负条件,以便清楚了解每局游戏的目标。
验收标准
- WHEN 基地被任意子弹(含己方误伤)击中 THEN 系统 SHALL 判定基地被摧毁,立即触发游戏失败(Game Over)。
- WHEN 玩家击毁本关所有敌方坦克(约20辆)且基地未被摧毁 THEN 系统 SHALL 判定本关胜利,进入结算界面。
- WHEN 玩家生命数降为0且无复活机会 THEN 系统 SHALL 判定游戏失败,进入结算界面。
- WHEN 进入结算界面 THEN 系统 SHALL 展示本局得分(根据击杀数、通关时间、基地存活状态综合计算)、击杀各类型坦克的统计数据。
需求 7:关卡系统与难度曲线
用户故事: 作为一名玩家,我希望游戏关卡由易到难逐步递进,以便获得持续的挑战感和成就感。
验收标准
- WHEN 玩家首次进入游戏 THEN 系统 SHALL 从第1关开始,前3关作为教学关(地形开阔、敌人慢速、提示操作方法)。
- WHEN 玩家到达第5关 THEN 系统 SHALL 引入河流地形,考验玩家走位能力。
- WHEN 玩家到达第10关 THEN 系统 SHALL 引入重甲坦克,玩家必须升级至Lv2以上火力才能有效击破。
- WHEN 玩家到达第20关 THEN 系统 SHALL 生成BOSS关(巨型坦克),需配合道具策略击杀。
- WHEN 玩家通过最后一关 THEN 系统 SHALL 循环回到第1关但整体难度提升(敌人速度/数量增加),实现无限关卡循环。
- WHEN 关卡编号增加时 THEN 系统 SHALL 逐步提升敌方AI智能程度(从直线冲锋→绕路偷家→集火基地)。
- WHEN 关卡编号增加时 THEN 系统 SHALL 逐步降低星星道具掉落率,提升游戏挑战性。
需求 8:游戏模式
用户故事: 作为一名玩家,我希望有多种游戏模式可选,以便获得不同的游戏体验。
验收标准
- WHEN 玩家在主菜单选择"经典模式" THEN 系统 SHALL 进入无限关卡循环模式,玩家逐关挑战并冲击好友排行榜。
- WHEN 玩家在主菜单选择"无尽模式" THEN 系统 SHALL 进入无限波次敌人模式,比拼最高击杀数(首次需观看广告解锁)。
- WHEN 玩家在主菜单选择"双人对战" THEN 系统 SHALL 通过微信邀请好友进行1v1实时对战(阵地破坏模式),双方各拥有1个基地,率先摧毁对方基地的一方获胜。
- IF 玩家选择双人对战模式 THEN 系统 SHALL 提供简单的房间匹配机制(创建房间/加入房间),通过微信社交关系链邀请好友。
- WHEN 双人对战开始时 THEN 系统 SHALL 生成对称式对战地图,双方各拥有1个基地,分别位于地图两端。
- WHEN 任一方基地被摧毁 THEN 系统 SHALL 判定该方失败,对战立即结束并进入结算界面。对战不设时间限制,唯一的胜利条件为摧毁对方基地。
- WHEN 玩家在双人对战中被击毁 THEN 系统 SHALL 在己方基地附近自动重生(无生命数限制),重生间隔为3秒。
- WHEN 双人对战结算时 THEN 系统 SHALL 展示双方基地HP、击杀数、死亡数、阵地伤害等数据。
- IF 玩家在双人对战中断线 THEN 系统 SHALL 尝试自动重连(最多5次),超时未重连则判定对方获胜。
需求 9:微信社交与排行榜系统
用户故事: 作为一名玩家,我希望能看到微信好友的排名并与他们互动,以便增加游戏的社交乐趣和竞争动力。
验收标准
- WHEN 玩家进入排行榜界面 THEN 系统 SHALL 通过微信开放数据域展示好友排名(按最高通关关卡/最高得分排序)。
- WHEN 玩家通关后 THEN 系统 SHALL 自动将得分上传至微信云数据库,更新排行榜数据。
- WHEN 玩家通关后 THEN 系统 SHALL 提供"挑战书"功能,生成包含"我通关了第X关,你敢挑战吗?"文案的分享卡片(带小程序码),可分享到群/朋友圈。
- WHEN 玩家卡关时 THEN 系统 SHALL 提供"助战"功能,分享给好友后好友点击可为玩家发送"炸弹"道具援助。
- WHEN 玩家本局得分超过好友最高分 THEN 系统 SHALL 在结算界面高亮提示"超越了好友XXX"。
需求 10:商业化系统(广告与内购)
用户故事: 作为游戏运营方,我希望通过合理的广告和内购设计实现商业化,同时不影响玩家核心体验。
验收标准
- WHEN 玩家死亡且有剩余复活机会 THEN 系统 SHALL 弹出"观看广告复活"选项(激励视频),复活后保留当前火力等级。
- WHEN 关卡结算时 THEN 系统 SHALL 提供"观看广告获得双倍金币/道具"选项(激励视频)。
- WHEN 玩家进入皮肤商店 THEN 系统 SHALL 展示可通过观看广告解锁的特殊皮肤(如"黄金坦克")。
- WHEN 每局游戏结束或玩家退出关卡时 THEN 系统 SHALL 展示插屏广告(频率控制:每3局最多1次)。
- IF 玩家购买"永久去广告"内购项 THEN 系统 SHALL 永久移除所有插屏广告(激励视频保留,因为是玩家主动选择)。
- IF 玩家购买"皮肤包"内购项 THEN 系统 SHALL 解锁对应的坦克皮肤(如"红白机配色"经典皮肤包)。
需求 11:数据持久化与存档系统
用户故事: 作为一名玩家,我希望游戏进度能够自动保存,以便下次打开时继续游戏。
验收标准
- WHEN 玩家通过任意关卡 THEN 系统 SHALL 使用
wx.setStorageSync自动保存当前关卡进度、最高分、生命数等本地数据。 - WHEN 玩家重新打开游戏 THEN 系统 SHALL 读取本地存档数据,允许玩家从上次进度继续游戏或重新开始。
- WHEN 玩家得分更新时 THEN 系统 SHALL 将最新得分同步至微信云数据库(用于排行榜)。
- IF 本地存档数据损坏或丢失 THEN 系统 SHALL 从云端恢复玩家的关键进度数据(最高关卡、最高分)。
- WHEN 玩家获得新皮肤或内购项 THEN 系统 SHALL 将购买记录同步至云端,确保换设备后不丢失。
需求 12:UI界面与用户体验
用户故事: 作为一名玩家,我希望游戏界面简洁美观、操作直觉化,以便快速上手并沉浸在游戏中。
验收标准
- WHEN 游戏启动 THEN 系统 SHALL 展示主菜单界面,包含:经典模式、无尽模式、双人对战、排行榜、设置等入口。
- WHEN 进入战斗场景 THEN 系统 SHALL 在屏幕顶部显示HUD信息:当前关卡、剩余敌人数量、玩家生命数、当前火力等级。
- WHEN 玩家暂停游戏 THEN 系统 SHALL 弹出暂停菜单(继续游戏、重新开始、返回主菜单)。
- WHEN 玩家首次进入游戏 THEN 系统 SHALL 提供简短的新手引导(指示虚拟摇杆和发射按钮的用法,约2-3步)。
- WHEN 游戏中出现重要事件(如道具拾取、敌人全灭、BOSS出现) THEN 系统 SHALL 播放对应的音效和简短的视觉反馈。
- WHEN 玩家在设置界面操作 THEN 系统 SHALL 提供音效开关、音乐开关、振动开关等选项。
需求 13:3v3 对战模式
用户故事: 作为一名玩家,我希望能与好友组队进行 3v3 破坏对方阵地的对战,以便获得更具团队协作感和竞技性的游戏体验。
模式定位
玩法:3v3 破坏对方阵地。双方各拥有1个基地(阵地),不限时间,率先摧毁对方基地的一方获胜。
核心流程
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[开始对战]
验收标准
好友开黑 — 队伍系统
- WHEN 玩家在 3v3 入口选择"组队开黑" THEN 系统 SHALL 创建一个队伍房间,创建者自动成为队长。
- WHEN 队长操作队伍时 THEN 系统 SHALL 赋予队长以下权限:邀请好友、踢出队员、开始匹配、解散队伍;队长头像带"队长"标识,操作按钮高亮。
- WHEN 队员加入队伍后 THEN 系统 SHALL 赋予队员以下权限:准备/取消准备、退出队伍;队员界面显示"准备状态",无法操作匹配按钮。
- WHEN 队长点击"邀请好友" THEN 系统 SHALL 调用微信好友列表,生成邀请卡片,卡片内容为"坦克3v3,速来开黑!"。
- WHEN 好友点击邀请卡片 THEN 系统 SHALL 检测卡片中的
teamId参数,将好友加入对应队伍房间(MGOBE Room)。 - IF 队伍人数已满3人 THEN 系统 SHALL 拒绝新成员加入并提示"队伍已满"。
匹配方案
- WHEN 玩家单独点击"快速开始" THEN 系统 SHALL 将玩家加入单人匹配池,按段位/胜率进行匹配,补位至 3v3。
- WHEN 队长点击"开始匹配" THEN 系统 SHALL 将队伍整体加入匹配池,寻找实力相近的对手队伍或散人进行组合。
- IF 匹配超时(超过60秒未凑满6人) THEN 系统 SHALL 自动填充 AI 机器人补位,确保对局可以正常开始。
- WHEN 6人满房(含 AI 填充) THEN 系统 SHALL 进入加载页,所有玩家同步加载对战地图资源。
对战规则
- WHEN 3v3 对战开始时 THEN 系统 SHALL 生成对称式对战地图,双方各拥有1个基地(阵地),分别位于地图两端,地图中央为争夺区域。
- WHEN 任一方基地被摧毁 THEN 系统 SHALL 判定该方失败,对战立即结束并进入结算界面。对战不设时间限制,唯一的胜利条件为摧毁对方基地。
- WHEN 玩家在 3v3 对战中被击毁 THEN 系统 SHALL 在己方基地附近自动重生(无生命数限制),重生间隔为3秒。所有坦克的出生点均位于所在基地附近区域。
- WHEN 3v3 对战结算时 THEN 系统 SHALL 展示双方各玩家的击杀数、死亡数、助攻数、对阵地伤害等数据,并根据表现计算段位积分变化。
网络与同步
- WHEN 3v3 对战进行中 THEN 系统 SHALL 采用帧同步或状态同步方案(基于微信小游戏 MGOBE 或同等方案),确保6人对战的网络延迟可控。
- IF 玩家在对战中断线 THEN 系统 SHALL 保留其位置60秒,期间允许重连恢复对战;超时未重连则由 AI 接管该玩家坦克。
边界情况与技术约束
边界情况
- 网络断开:排行榜上传失败时,系统应缓存数据并在网络恢复后自动重试。
- 小游戏被后台切走:系统应自动暂停游戏,返回前台后恢复。
- 广告加载失败:激励视频加载失败时,应提供备选方案(如直接给予较少奖励或提示稍后重试)。
- 同屏大量对象:当同屏坦克+子弹数量过多时,应通过对象池和渲染优化保证性能。
- 玩家误伤基地:玩家自己的子弹也可以摧毁基地围墙和基地本身,需保留此经典机制。
技术约束
- 微信小游戏包体大小限制(首包≤4MB,分包≤20MB),需合理规划资源加载策略。
- 微信小游戏不支持DOM API,所有UI需通过Canvas或Cocos Creator UI系统实现。
- 双人对战需要实时通信,建议使用微信小游戏帧同步或状态同步方案。
- 开放数据域(排行榜)与主域隔离,需通过SharedCanvas方案展示好友排名。
成功标准
- 游戏首包加载时间 ≤ 3秒(4G网络环境)。
- 战斗场景稳定帧率 ≥ 55FPS(中端机型)。
- 单局游戏时长控制在3-5分钟。
- 新手玩家3分钟内理解核心操作。