# 关卡生成规则 **本文档中引用的文件** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts) - [GameMap.ts](file://assets/script/game/map/GameMap.ts) - [heroSet.ts](file://assets/script/game/common/config/heroSet.ts) - [Mon.ts](file://assets/script/game/hero/Mon.ts) ## 目录 1. [简介](#简介) 2. [项目结构概览](#项目结构概览) 3. [核心组件分析](#核心组件分析) 4. [关卡类型判定逻辑](#关卡类型判定逻辑) 5. [怪物配置规则](#怪物配置规则) 6. [动态数量计算机制](#动态数量计算机制) 7. [强度倍率计算](#强度倍率计算) 8. [事件系统集成](#事件系统集成) 9. [GameMap集成调用](#gamemap集成调用) 10. [配置修改指南](#配置修改指南) 11. [性能优化考虑](#性能优化考虑) 12. [总结](#总结) ## 简介 RogueConfig.ts是肉鸽模式的核心配置脚本,实现了动态关卡生成系统。该系统通过复杂的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线,为玩家提供持续挑战的游戏体验。系统支持普通、精英、Boss和事件四种关卡类型,并具备完善的随机事件机制。 ## 项目结构概览 ```mermaid graph TB subgraph "关卡生成系统" RC[RogueConfig.ts
核心配置脚本] MC[MissionMonComp.ts
怪物管理组件] GM[GameMap.ts
游戏地图] end subgraph "配置数据" SCR[StageConfigRules
关卡配置规则] EC[EventConfig
事件配置] EML[EliteMonsterList
精英怪物列表] BML[BossMonsterList
Boss怪物列表] end subgraph "运行时组件" ST[getStageType
关卡类型判定] CMC[calculateMonsterCount
数量计算] CMSM[calculateMonsterStrengthMultiplier
强度计算] GSC[generateStageConfig
关卡配置生成] end RC --> SCR RC --> EC RC --> EML RC --> BML RC --> ST RC --> CM RC --> CMSM RC --> GSC MC --> RC GM --> MC ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240) ## 核心组件分析 ### 关卡类型枚举系统 系统定义了四个主要的关卡类型,每种类型都有其独特的特征和配置规则: ```mermaid classDiagram class StageType { <> +NORMAL : "normal" +ELITE : "elite" +BOSS : "boss" +EVENT : "event" } class MonsterType { <> +NORMAL : "normal" +ELITE : "elite" +BOSS : "boss" } class EventType { <> +TREASURE : "treasure" +TRAP : "trap" +BUFF : "buff" +DEBUFF : "debuff" } class StageConfigRules { +NORMAL : Config +ELITE : Config +BOSS : Config +EVENT : Config } StageType --> StageConfigRules : "使用" MonsterType --> StageConfigRules : "配置" EventType --> EventConfig : "触发" ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L25-L52) **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L25-L52) ### 怪物配置表结构 系统维护了专门的怪物配置表,用于管理不同类型的怪物: | 怪物类型 | 配置表 | 描述 | |---------|--------|------| | 普通怪物 | getMonList() | 基础怪物配置,通过HeroInfo过滤得到 | | 精英怪物 | EliteMonsterList | 特殊精英怪物列表,包含5201、5202、5203等 | | Boss怪物 | BossMonsterList | Boss怪物配置,目前包含5201、5202等 | **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L17-L32) - [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L32-L38) ## 关卡类型判定逻辑 ### getStageType函数详解 getStageType函数是关卡类型判定的核心逻辑,采用分层决策树结构: ```mermaid flowchart TD Start([开始关卡类型判定]) --> CheckEvent{"检查是否为5的倍数关卡且等级为3"} CheckEvent --> |是| ReturnEvent[返回EVENT类型] CheckEvent --> |否| CheckTen{"检查是否为10的倍数关卡"} CheckTen --> |是| CheckLevelTen{"检查等级"} CheckLevelTen --> |等级5| ReturnBoss[返回BOSS类型] CheckLevelTen --> |等级4| ReturnElite[返回ELITE类型] CheckLevelTen --> |其他| ReturnNormal[返回NORMAL类型] CheckTen --> |否| CheckLevel{"检查等级"} CheckLevel --> |等级5| ReturnElite2[返回ELITE类型] CheckLevel --> |其他| ReturnNormal2[返回NORMAL类型] ReturnEvent --> End([结束]) ReturnBoss --> End ReturnElite --> End ReturnNormal --> End ReturnElite2 --> End ReturnNormal2 --> End ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L129-L168) ### 特殊关卡规则详解 #### 事件关卡规则 - **触发条件**:关卡号为5的倍数(5、10、15...)且玩家等级为3 - **特点**:包含少量普通怪物,提供随机事件机会 - **概率分布**:30%宝箱、25%陷阱、25%增益、20%减益 #### Boss关卡规则 - **触发条件**:关卡号为10的倍数(10、20、30...) - **等级要求**:仅在特定等级触发 - 第5级:Boss关卡 - 第4级:精英关卡 - 其他等级:普通关卡 #### 精英关卡规则 - **触发条件**:玩家等级达到5级 - **特点**:混合精英和普通怪物,提供更高挑战 **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L129-L168) ## 怪物配置规则 ### StageConfigRules配置体系 StageConfigRules提供了四类关卡的详细配置规则: ```mermaid graph LR subgraph "普通关卡" NC[3个普通怪物
基础数量: 3
最小数量: 2
最大数量: 6] end subgraph "精英关卡" EC1[2个精英怪物
基础数量: 2
最小数量: 1
最大数量: 4] EC2[3个普通怪物
基础数量: 3
最小数量: 2
最大数量: 5] end subgraph "Boss关卡" BC1[1个Boss怪物
基础数量: 1
最小数量: 1
最大数量: 1] BC2[2个精英怪物
基础数量: 2
最小数量: 1
最大数量: 3] BC3[2个普通怪物
基础数量: 2
最小数量: 1
最大数量: 4] end subgraph "事件关卡" VC[2个普通怪物
基础数量: 2
最小数量: 1
最大数量: 4] end ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L54-L95) ### 怪物数量扩展机制 系统实现了智能的数量扩展算法,确保游戏体验的平衡性: #### 扩展公式 ``` 实际数量 = 基础数量 + floor(关卡号 / 5) ``` #### 数量范围控制 - 使用`Math.max(minCount, Math.min(maxCount, count))`确保数量在合理范围内 - 每5关递增1个怪物,避免突变式难度提升 **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L54-L95) - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L150-L168) ## 动态数量计算机制 ### calculateMonsterCount函数实现 calculateMonsterCount函数负责根据关卡进度动态调整怪物数量: ```mermaid sequenceDiagram participant Caller as 调用方 participant CMC as calculateMonsterCount participant Formula as 数量计算公式 Caller->>CMC : calculateMonsterCount(stageNumber, baseCount, minCount, maxCount) CMC->>Formula : increment = Math.floor(stageNumber / 5) Formula-->>CMC : 返回增量值 CMC->>CMC : count = baseCount + increment CMC->>CMC : count = Math.max(minCount, Math.min(maxCount, count)) CMC-->>Caller : 返回实际怪物数量 ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L150-L168) ### 数量增长曲线分析 | 关卡范围 | 基础数量 | 增量 | 最终数量范围 | |---------|----------|------|-------------| | 1-4 | 3 | 0 | 3-6 | | 5-9 | 3 | 1 | 4-6 | | 10-14 | 3 | 2 | 5-6 | | 15+ | 3 | 3+ | 6 | **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L150-L168) ## 强度倍率计算 ### calculateMonsterStrengthMultiplier函数 系统实现了双维度的强度倍率计算,综合考虑关卡进度和玩家等级: ```mermaid flowchart TD Start([开始强度计算]) --> CalcStage["计算关卡倍率
stageMultiplier = 1 + (stageNumber - 1) * 0.1"] CalcStage --> CalcLevel["计算等级倍率
levelMultiplier = 1 + (level - 1) * 0.05"] CalcLevel --> Multiply["计算总倍率
strengthMultiplier = stageMultiplier * levelMultiplier"] Multiply --> Return[返回强度倍率] Return --> End([结束]) ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L170-L178) ### 强度增长特性 #### 关卡维度 - 每关增加10%的强度 - 关卡1: 1.0x - 关卡5: 1.4x - 关卡10: 1.9x - 关卡20: 2.9x #### 等级维度 - 每级增加5%的强度 - 等级1: 1.0x - 等级3: 1.1x - 等级5: 1.2x **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L170-L178) ## 事件系统集成 ### 随机事件配置 EventConfig提供了完整的随机事件系统: | 事件类型 | 触发概率 | 效果描述 | |---------|----------|----------| | TREASURE | 30% | 获得额外奖励(+50金币) | | TRAP | 25% | 受到一定伤害 | | BUFF | 25% | 获得临时增益效果 | | DEBUFF | 20% | 受到临时减益效果 | ### 事件触发机制 ```mermaid sequenceDiagram participant MC as MissionMonComp participant RC as RogueConfig participant EC as EventConfig MC->>RC : getStageType(stageNumber, level) RC-->>MC : 返回关卡类型 MC->>MC : 检查是否为EVENT类型 alt 是事件关卡 MC->>RC : getRandomEvent() RC->>EC : 遍历事件配置 EC-->>RC : 返回事件类型 RC-->>MC : 返回EventType MC->>MC : processRandomEvent() end ``` **图表来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L97-L127) - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L293-L310) **章节来源** - [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L97-L127) ## GameMap集成调用 ### MissionMonComp集成流程 MissionMonComp作为GameMap的核心组件,负责关卡生成的执行: ```mermaid sequenceDiagram participant GM as GameMap participant MC as MissionMonComp participant RC as RogueConfig GM->>MC : do_mon_wave() MC->>MC : 重置召唤状态 MC->>RC : getStageType(currentStage, level) RC-->>MC : 返回关卡类型 MC->>MC : 检查是否为事件关卡 alt 是事件关卡 MC->>RC : getRandomEvent() RC-->>MC : 返回事件类型 end MC->>RC : getStageMonsterConfigs(currentStage, level) RC-->>MC : 返回怪物配置数组 MC->>MC : generateMonstersFromStageConfig() MC->>MC : addToStageSpawnQueue() MC->>MC : spawnNextMonster() ``` **图表来源** - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L95-L115) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L147-L169) ### 怪物生成队列管理 系统采用了队列化的怪物生成机制: ```mermaid graph TB subgraph "怪物生成流程" A[生成怪物配置] --> B[添加到队列] B --> C[定时器检查] C --> D{是否暂停?} D --> |是| E[暂停计时] D --> |否| F[正常生成] F --> G[召唤计数+1] G --> H{达到5只?} H --> |是| I[进入暂停状态] H --> |否| J[继续生成] I --> K[暂停5秒] K --> L[恢复生成] E --> M[等待恢复] L --> J M --> N[暂停结束] N --> J end ``` **图表来源** - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L69-L105) **章节来源** - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L95-L115) - [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L147-L169) ## 配置修改指南 ### 修改难度曲线 #### 调整怪物数量 1. **修改基础数量**:直接修改StageConfigRules中各关卡的`count`值 2. **调整数量范围**:修改`minCount`和`maxCount`限制 3. **改变增长速率**:修改calculateMonsterCount函数中的增量公式 #### 调整强度倍率 1. **修改关卡倍率**:调整calculateMonsterStrengthMultiplier函数中的`0.1`系数 2. **修改等级倍率**:调整`0.05`系数 3. **添加新维度**:可扩展新的强度计算因子 ### 新增特殊关卡类型 #### 步骤1:定义关卡类型 ```typescript export enum StageType { // 现有类型... SPECIAL = "special" // 新增特殊关卡类型 } ``` #### 步骤2:添加配置规则 ```typescript export const StageConfigRules = { // 现有规则... [StageType.SPECIAL]: { description: "特殊关卡", monsters: [ { type: MonsterType.BOSS, count: 1, minCount: 1, maxCount: 1 }, { type: MonsterType.ELITE, count: 3, minCount: 2, maxCount: 4 } ] } }; ``` #### 步骤3:更新判定逻辑 ```typescript export function getStageType(stageNumber: number, level: number = 1): StageType { // 现有逻辑... // 新增特殊关卡规则 if (/* 特殊条件 */) { return StageType.SPECIAL; } return /* 默认返回 */; } ``` ### 调整关卡频率 #### 修改事件关卡频率 ```typescript // 修改getStageType函数中的事件触发条件 if (stageNumber % 5 === 0 && level === 3) { return StageType.EVENT; } ``` #### 修改Boss关卡频率 ```typescript // 修改Boss关卡触发条件 if (stageNumber % 10 === 0) { // Boss逻辑... } ``` ## 性能优化考虑 ### 内存管理优化 1. **怪物配置缓存**:避免重复计算相同的关卡配置 2. **事件概率预计算**:使用累积概率减少每次触发的计算开销 3. **队列长度控制**:限制怪物生成队列的最大长度 ### 计算性能优化 1. **早期退出机制**:在getStageType中使用早期返回 2. **批量操作**:一次性生成所有怪物配置而非逐个生成 3. **数值计算优化**:使用Math.floor替代更复杂的数学运算 ### 内存使用监控 ```typescript // 监控怪物队列大小 console.log(`怪物队列大小: ${this.monsterQueue.length}`); ``` ## 总结 RogueConfig.ts实现了一个完整而灵活的肉鸽模式关卡生成系统。通过分层的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线,为玩家提供了丰富的游戏体验。 ### 主要特性 1. **动态关卡生成**:基于关卡号和玩家等级的智能判定 2. **渐进式难度**:通过数量和强度倍率实现平滑的难度提升 3. **随机事件系统**:增加游戏的不确定性和趣味性 4. **模块化设计**:清晰的职责分离便于维护和扩展 5. **性能优化**:合理的内存管理和计算优化 ### 扩展建议 1. **新增关卡类型**:可根据游戏需求添加更多特殊关卡 2. **动态配置加载**:支持运行时修改配置而不需重启 3. **数据分析功能**:添加关卡统计数据收集和分析 4. **多语言支持**:完善国际化支持 该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。