# 奖励系统 **本文档引用的文件** - [Mission.ts](file://assets/script/game/common/config/Mission.ts) - [Tasks.ts](file://assets/script/game/common/config/Tasks.ts) - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts) - [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts) - [MissionHomeComp.ts](file://assets/script/game/map/MissionHomeComp.ts) - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts) - [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts) - [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts) - [TalSet.ts](file://assets/script/game/common/config/TalSet.ts) - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) ## 目录 1. [简介](#简介) 2. [系统架构概览](#系统架构概览) 3. [核心组件分析](#核心组件分析) 4. [奖励类型与配置](#奖励类型与配置) 5. [三选一奖励机制](#三选一奖励机制) 6. [战斗胜利与奖励选择](#战斗胜利与奖励选择) 7. [奖励触发条件](#奖励触发条件) 8. [数据绑定与UI展示](#数据绑定与UI展示) 9. [扩展新奖励类型](#扩展新奖励类型) 10. [性能优化考虑](#性能优化考虑) 11. [故障排除指南](#故障排除指南) 12. [总结](#总结) ## 简介 奖励系统是本游戏的核心机制之一,采用三选一奖励选择模式,在每波怪物清理后为玩家提供三种不同类型的奖励选项。系统基于肉鸽(Roguelike)游戏设计理念,通过策略性的奖励选择来影响英雄的成长路径,为玩家提供多样化的游戏体验和重玩价值。 奖励系统的主要特点包括: - **三选一选择机制**:每轮战斗结束后提供三个奖励选项 - **多样化奖励类型**:属性提升、技能升级、装备获取、新技能解锁等 - **策略性决策**:玩家需要根据当前阵容和游戏进度做出最优选择 - **动态权重系统**:奖励权重根据游戏进度和玩家状态动态调整 - **可视化反馈**:清晰的奖励预览和效果展示 ## 系统架构概览 奖励系统采用模块化架构设计,各组件职责明确,通过事件驱动的方式协同工作。 ```mermaid graph TB subgraph "战斗系统" MC[MissionComp
任务控制器] MMC[MissionMonComp
怪物控制器] MHMC[MissionHeroComp
英雄控制器] end subgraph "奖励系统" VC[VictoryComp
胜利界面] SM[SingletonModule
单例模块] end subgraph "配置系统" MS[Mission.ts
战斗配置] TS[Tasks.ts
任务配置] RS[RogueConfig.ts
肉鸽配置] end subgraph "数据层" GD[GameData
游戏数据] MD[MissionData
关卡数据] end MC --> VC MC --> SM MMC --> MC MHMC --> MC VC --> SM SM --> GD SM --> MD MS --> MC RS --> MMC TS --> MC ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151) - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L1-L75) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L41) ## 核心组件分析 ### MissionComp - 任务控制器 MissionComp是奖励系统的核心控制器,负责整个战斗流程的管理和奖励发放。 ```mermaid classDiagram class MissionComp { +rewards : any[] +game_data : any +onLoad() void +update(dt : number) void +do_reward() void +do_drop(drop_item : any[], game_data : any) void +do_mon_dead(event : any, data : any) void +do_hero_dead(event : any, data : any) void +mission_start() Promise~void~ +to_fight() void +fight_end() void +mission_end() void +data_init() void +cleanComponents() void } class SingletonModuleComp { +mission : any +vmdata : any +data : any } class GameEvent { +MissionStart +MonDead +HeroDead +FightEnd +MissionEnd } MissionComp --> SingletonModuleComp : "使用" MissionComp --> GameEvent : "监听" ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L15-L151) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L20-L41) **节来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L1-L151) - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L41) ### VictoryComp - 胜利界面控制器 VictoryComp负责战斗胜利后的奖励选择界面,处理玩家的选择和奖励发放。 ```mermaid sequenceDiagram participant Player as 玩家 participant VC as VictoryComp participant SM as SingletonModule participant UI as 用户界面 Player->>VC : 战斗胜利 VC->>SM : 获取奖励数据 SM-->>VC : 返回奖励列表 VC->>UI : 显示奖励选项 Player->>UI : 选择奖励 UI->>VC : 发送选择事件 VC->>SM : 处理奖励发放 SM-->>VC : 确认奖励生效 VC->>Player : 显示奖励效果 ``` **图表来源** - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L25-L75) **节来源** - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L1-L75) ### MissionHeroComp & MissionMonComp - 奖励触发器 这两个组件分别负责英雄和怪物的奖励触发条件监控。 ```mermaid flowchart TD A[战斗开始] --> B{检查英雄状态} B --> |英雄存活| C[继续战斗] B --> |英雄死亡| D[战斗失败] C --> E{检查怪物状态} E --> |怪物存活| F[继续战斗] E --> |怪物死亡| G[战斗胜利] F --> H[更新战斗数据] H --> B G --> I[触发奖励生成] I --> J[打开胜利界面] J --> K[等待玩家选择] D --> L[打开失败界面] ``` **图表来源** - [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L1-L81) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240) **节来源** - [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L1-L81) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240) ## 奖励类型与配置 ### 基础奖励配置 奖励系统基于Mission.ts中的FightSet枚举定义了各种奖励类型的基础配置: | 奖励类型 | 配置值 | 描述 | |---------|--------|------| | ATK_ADD_COUNT | 4 | 伙伴攻击力增加数量 | | ATK_ADD_GLOD | 1 | 金币增加数量 | | CRIT_DAMAGE | 50 | 暴击伤害百分比 | | DOUBLE_ATK_RATE | 100 | 额外攻击默认概率 | | GREEN_GOLD | 1 | 绿色金币数量 | | BLUE_GOLD | 2 | 蓝色金币数量 | | PURPLE_GOLD | 3 | 紫色金币数量 | | ORANGE_GOLD | 4 | 橙色金币数量 | **节来源** - [Mission.ts](file://assets/script/game/common/config/Mission.ts#L1-L60) ### 英雄属性系统 英雄属性系统通过HeroAttrs.ts定义了完整的属性体系: ```mermaid graph LR subgraph "基础属性" HP[生命值 HP_MAX] MP[魔法值 MP_MAX] AP[攻击力 AP] MAP[魔法攻击力 MAP] end subgraph "防御属性" DEF[物理防御 DEF] MDEF[魔法防御 MDEF] SHIELD[护盾值 SHIELD_MAX] end subgraph "特殊属性" SPEED[移动速度 SPEED] DIS[攻击距离 DIS] CRIT[暴击率 CRITICAL] DODGE[闪避率 DODGE] end HP --> DEF MP --> MDEF AP --> CRIT MAP --> CRIT ``` **图表来源** - [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts#L25-L47) **节来源** - [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts#L1-L544) ### 天赋系统配置 天赋系统通过TalSet.ts定义了丰富的天赋效果: | 天赋类型 | 示例 | 效果描述 | |---------|------|----------| | 等级类天赋 | 剑意提升 | 每升5级,攻击力增加10% | | 攻击触发类 | 胡服骑射 | 每3次攻击,攻击速度增加5% | | 受伤触发类 | 坚韧意志 | 每受伤3次,防御力增加2点 | | 特定等级触发 | 兵圣之道 | 20级获得额外技能 | **节来源** - [TalSet.ts](file://assets/script/game/common/config/TalSet.ts#L68-L114) ## 三选一奖励机制 ### 奖励生成算法 奖励系统采用基于权重的概率算法生成奖励选项: ```mermaid flowchart TD A[战斗胜利] --> B[计算基础权重] B --> C[应用难度系数] C --> D[生成奖励池] D --> E{随机选择奖励} E --> |奖励1| F[验证奖励有效性] E --> |奖励2| F E --> |奖励3| F F --> G{奖励有效?} G --> |是| H[添加到选项列表] G --> |否| I[重新生成] H --> J[返回三个奖励选项] I --> E ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L40-L50) ### 奖励权重调整 奖励权重系统根据以下因素动态调整: 1. **游戏进度**:随着关卡推进,奖励权重逐渐向高级奖励倾斜 2. **英雄状态**:根据当前英雄阵容和等级调整奖励偏好 3. **玩家行为**:记录玩家的选择历史,优化奖励推荐 4. **随机事件**:特殊事件可能临时改变奖励权重 **节来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L40-L50) ## 战斗胜利与奖励选择 ### 战斗胜利流程 战斗胜利后,系统按照以下流程处理奖励选择: ```mermaid sequenceDiagram participant Game as 游戏引擎 participant MC as MissionComp participant VC as VictoryComp participant SM as SingletonModule participant UI as 用户界面 Game->>MC : 战斗结束事件 MC->>MC : 检查战斗结果 alt 战斗胜利 MC->>SM : 获取奖励数据 SM-->>MC : 返回奖励列表 MC->>VC : 打开胜利界面 VC->>UI : 显示奖励选项 UI->>VC : 玩家选择奖励 VC->>SM : 处理奖励发放 SM-->>VC : 确认奖励生效 VC->>Game : 关闭胜利界面 else 战斗失败 MC->>Game : 显示失败界面 end ``` **图表来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L80-L95) - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L25-L40) **节来源** - [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L80-L95) - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L25-L40) ### 奖励选择界面 胜利界面提供直观的奖励选择功能: 1. **奖励预览**:每个奖励选项都有详细的属性说明 2. **视觉反馈**:通过图标和颜色区分不同类型的奖励 3. **选择确认**:提供明确的选择按钮和取消选项 4. **即时反馈**:选择后立即显示奖励效果 **节来源** - [VictoryComp.ts](file://assets/script/game/map/VictoryComp.ts#L1-L75) ## 奖励触发条件 ### 英雄奖励触发 英雄奖励通过MissionHeroComp监控英雄状态变化: ```mermaid stateDiagram-v2 [*] --> 战斗准备 战斗准备 --> 英雄召唤 : Zhaohuan事件 英雄召唤 --> 战斗中 : FightReady事件 战斗中 --> 英雄存活 : 英雄未死亡 战斗中 --> 英雄死亡 : HeroDead事件 英雄存活 --> 战斗中 : 继续战斗 英雄死亡 --> 战斗失败 : 英雄全灭 战斗失败 --> [*] ``` **图表来源** - [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L15-L30) **节来源** - [MissionHeroComp.ts](file://assets/script/game/map/MissionHeroComp.ts#L1-L81) ### 怪物奖励触发 怪物奖励通过MissionMonComp监控怪物击杀情况: ```mermaid flowchart TD A[怪物生成] --> B[怪物存活] B --> C{怪物死亡?} C --> |否| D[继续战斗] C --> |是| E[更新怪物计数] E --> F{还有怪物?} F --> |是| B F --> |否| G[战斗胜利] D --> C G --> H[触发奖励生成] ``` **图表来源** - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L40-L60) **节来源** - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240) ### 事件奖励触发 特殊事件通过RogueConfig.ts定义的事件系统触发: | 事件类型 | 概率 | 效果 | |---------|------|------| | TREASURE | 40% | 增加50金币奖励 | | TRAP | 20% | 对玩家造成伤害 | | BUFF | 25% | 增加临时增益效果 | | DEBUFF | 15% | 增加临时减益效果 | **节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L279-L310) ## 数据绑定与UI展示 ### 单例模块数据管理 SingletonModuleComp作为全局数据管理中心,维护奖励系统所需的所有数据: ```mermaid classDiagram class SingletonModuleComp { +mission : MissionData +vmdata : ViewData +data : GameData +guides : number[] +current_guide : number +openid : string } class MissionData { +status : number +play : boolean +pause : boolean +in_select : boolean +in_fight : boolean } class ViewData { +mission_data : MissionData } class GameData { +gold : number +diamond : number +score : number +mission : number } SingletonModuleComp --> MissionData SingletonModuleComp --> ViewData SingletonModuleComp --> GameData ``` **图表来源** - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L20-L41) **节来源** - [SingletonModuleComp.ts](file://assets/script/game/common/SingletonModuleComp.ts#L1-L41) ### UI配置与界面管理 GameUIConfig.ts定义了奖励系统相关的界面配置: | UI标识 | 预制件路径 | 层级 | |--------|-----------|------| | Victory | gui/element/victory | UI层 | | Loading | loading/prefab/loading | UI层 | **节来源** - [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts#L1-L36) ## 扩展新奖励类型 ### 添加新奖励类型 要扩展新的奖励类型,需要修改以下文件: 1. **Mission.ts** - 添加新的奖励配置常量 2. **HeroAttrs.ts** - 定义新属性类型 3. **TalSet.ts** - 添加新天赋效果 4. **RogueConfig.ts** - 更新事件配置 ### 奖励权重调整 通过修改FightSet枚举可以调整各类奖励的权重: ```typescript // 示例:增加高级奖励的权重 export enum FightSet { // 高级奖励权重提升 PURPLE_GOLD = 5, // 紫色金币权重从3提升到5 ORANGE_GOLD = 8, // 橙色金币权重从4提升到8 // 中级奖励保持不变 BLUE_GOLD = 2, GREEN_GOLD = 1, } ``` ### 自定义奖励算法 可以通过重写MissionComp中的do_reward方法来实现自定义奖励算法: ```typescript // 示例:基于英雄阵容的奖励算法 do_reward() { // 获取当前英雄阵容 const heroes = this.getCurrentHeroes(); // 根据阵容特点调整奖励权重 const weightMap = this.calculateRewardWeights(heroes); // 生成奖励选项 this.rewards = this.generateRewards(weightMap); } ``` ## 性能优化考虑 ### 内存管理 奖励系统采用以下内存优化策略: 1. **组件生命周期管理**:及时销毁不需要的组件 2. **数据缓存策略**:缓存常用的奖励配置数据 3. **事件监听优化**:避免不必要的事件监听器 ### 渲染优化 1. **延迟加载**:奖励界面按需加载资源 2. **对象池**:复用奖励预览对象 3. **批量更新**:合并UI更新操作 ### 算法优化 1. **权重计算缓存**:缓存复杂的权重计算结果 2. **随机数优化**:使用高效的随机数生成算法 3. **数据结构优化**:使用合适的数据结构提高查找效率 ## 故障排除指南 ### 常见问题及解决方案 #### 奖励不显示问题 **症状**:战斗胜利后没有显示奖励选项 **原因分析**: 1. 奖励数据为空 2. UI界面未正确打开 3. 事件监听器未正确注册 **解决方案**: ```typescript // 检查奖励数据 if (!this.rewards || this.rewards.length === 0) { console.error("奖励数据为空"); // 重新生成奖励 this.rewards = this.generateDefaultRewards(); } // 确保UI正确打开 oops.gui.open(UIID.Victory, { victory: true, rewards: this.rewards, game_data: this.game_data }); ``` #### 奖励权重异常 **症状**:奖励权重分布不合理 **原因分析**: 1. 权重配置错误 2. 动态权重计算逻辑问题 3. 随机数种子问题 **解决方案**: ```typescript // 验证权重配置 validateRewardWeights() { const weights = Object.values(FightSet).filter(v => typeof v === 'number'); const sum = weights.reduce((a, b) => a + b, 0); if (sum === 0) { console.error("奖励权重总和为0"); // 使用默认权重 return this.getDefaultWeights(); } return weights; } ``` #### 性能问题 **症状**:奖励生成过程卡顿 **原因分析**: 1. 奖励算法复杂度过高 2. 数据库查询频繁 3. UI渲染过于复杂 **解决方案**: ```typescript // 优化奖励生成算法 async generateRewardsOptimized() { // 使用Web Worker异步处理 const worker = new Worker('reward_worker.js'); worker.postMessage({ monsters: this.monsters, heroes: this.heroes, difficulty: this.difficulty }); worker.onmessage = (e) => { this.rewards = e.data; this.displayRewards(); }; } ``` ## 总结 奖励系统是本游戏的核心机制,通过精心设计的三选一奖励选择模式,为玩家提供了丰富的策略选择空间。系统采用模块化架构,各组件职责明确,通过事件驱动的方式实现松耦合设计。 ### 主要特性 1. **多样化奖励类型**:涵盖属性提升、技能升级、装备获取等多个方面 2. **策略性决策**:玩家需要根据当前阵容和游戏进度做出最优选择 3. **动态权重系统**:奖励权重根据游戏进度和玩家状态动态调整 4. **可视化反馈**:清晰的奖励预览和效果展示 5. **扩展性强**:易于添加新的奖励类型和调整奖励权重 ### 设计优势 - **平衡性**:通过权重系统确保奖励的平衡性 - **可玩性**:多样的奖励选项提供重玩价值 - **可维护性**:模块化设计便于维护和扩展 - **性能优化**:采用多种优化策略确保流畅运行 ### 未来发展方向 1. **智能推荐系统**:基于玩家行为的奖励推荐 2. **社交元素**:好友间的奖励分享和比较 3. **成就系统**:与奖励系统结合的成就解锁 4. **动态难度**:根据玩家表现调整奖励难度 奖励系统的设计体现了游戏设计理念的核心思想:通过简单的机制创造复杂的策略深度,为玩家提供持续的游戏动力和成就感。