Files
heros/.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/关卡生成规则.md
panw 4235e3b776 refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件
- 移除 MISSION_UPDATE 事件常量
- 优化游戏事件枚举定义
2025-10-28 16:15:47 +08:00

14 KiB
Raw Blame History

关卡生成规则

**本文档中引用的文件** - [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集成调用
  10. 配置修改指南
  11. 性能优化考虑
  12. 总结

简介

RogueConfig.ts是肉鸽模式的核心配置脚本实现了动态关卡生成系统。该系统通过复杂的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线为玩家提供持续挑战的游戏体验。系统支持普通、精英、Boss和事件四种关卡类型并具备完善的随机事件机制。

项目结构概览

graph TB
subgraph "关卡生成系统"
RC[RogueConfig.ts<br/>核心配置脚本]
MC[MissionMonComp.ts<br/>怪物管理组件]
GM[GameMap.ts<br/>游戏地图]
end
subgraph "配置数据"
SCR[StageConfigRules<br/>关卡配置规则]
EC[EventConfig<br/>事件配置]
EML[EliteMonsterList<br/>精英怪物列表]
BML[BossMonsterList<br/>Boss怪物列表]
end
subgraph "运行时组件"
ST[getStageType<br/>关卡类型判定]
CMC[calculateMonsterCount<br/>数量计算]
CMSM[calculateMonsterStrengthMultiplier<br/>强度计算]
GSC[generateStageConfig<br/>关卡配置生成]
end
RC --> SCR
RC --> EC
RC --> EML
RC --> BML
RC --> ST
RC --> CM
RC --> CMSM
RC --> GSC
MC --> RC
GM --> MC

图表来源

核心组件分析

关卡类型枚举系统

系统定义了四个主要的关卡类型,每种类型都有其独特的特征和配置规则:

classDiagram
class StageType {
<<enumeration>>
+NORMAL : "normal"
+ELITE : "elite"
+BOSS : "boss"
+EVENT : "event"
}
class MonsterType {
<<enumeration>>
+NORMAL : "normal"
+ELITE : "elite"
+BOSS : "boss"
}
class EventType {
<<enumeration>>
+TREASURE : "treasure"
+TRAP : "trap"
+BUFF : "buff"
+DEBUFF : "debuff"
}
class StageConfigRules {
+NORMAL : Config
+ELITE : Config
+BOSS : Config
+EVENT : Config
}
StageType --> StageConfigRules : "使用"
MonsterType --> StageConfigRules : "配置"
EventType --> EventConfig : "触发"

图表来源

章节来源

怪物配置表结构

系统维护了专门的怪物配置表,用于管理不同类型的怪物:

怪物类型 配置表 描述
普通怪物 getMonList() 基础怪物配置通过HeroInfo过滤得到
精英怪物 EliteMonsterList 特殊精英怪物列表包含5201、5202、5203等
Boss怪物 BossMonsterList Boss怪物配置目前包含5201、5202等

章节来源

关卡类型判定逻辑

getStageType函数详解

getStageType函数是关卡类型判定的核心逻辑采用分层决策树结构

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

图表来源

特殊关卡规则详解

事件关卡规则

  • 触发条件关卡号为5的倍数5、10、15...且玩家等级为3
  • 特点:包含少量普通怪物,提供随机事件机会
  • 概率分布30%宝箱、25%陷阱、25%增益、20%减益

Boss关卡规则

  • 触发条件关卡号为10的倍数10、20、30...
  • 等级要求:仅在特定等级触发
    • 第5级Boss关卡
    • 第4级精英关卡
    • 其他等级:普通关卡

精英关卡规则

  • 触发条件玩家等级达到5级
  • 特点:混合精英和普通怪物,提供更高挑战

章节来源

怪物配置规则

StageConfigRules配置体系

StageConfigRules提供了四类关卡的详细配置规则

graph LR
subgraph "普通关卡"
NC[3个普通怪物<br/>基础数量: 3<br/>最小数量: 2<br/>最大数量: 6]
end
subgraph "精英关卡"
EC1[2个精英怪物<br/>基础数量: 2<br/>最小数量: 1<br/>最大数量: 4]
EC2[3个普通怪物<br/>基础数量: 3<br/>最小数量: 2<br/>最大数量: 5]
end
subgraph "Boss关卡"
BC1[1个Boss怪物<br/>基础数量: 1<br/>最小数量: 1<br/>最大数量: 1]
BC2[2个精英怪物<br/>基础数量: 2<br/>最小数量: 1<br/>最大数量: 3]
BC3[2个普通怪物<br/>基础数量: 2<br/>最小数量: 1<br/>最大数量: 4]
end
subgraph "事件关卡"
VC[2个普通怪物<br/>基础数量: 2<br/>最小数量: 1<br/>最大数量: 4]
end

图表来源

怪物数量扩展机制

系统实现了智能的数量扩展算法,确保游戏体验的平衡性:

扩展公式

实际数量 = 基础数量 + floor(关卡号 / 5)

数量范围控制

  • 使用Math.max(minCount, Math.min(maxCount, count))确保数量在合理范围内
  • 每5关递增1个怪物避免突变式难度提升

章节来源

动态数量计算机制

calculateMonsterCount函数实现

calculateMonsterCount函数负责根据关卡进度动态调整怪物数量

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 : 返回实际怪物数量

图表来源

数量增长曲线分析

关卡范围 基础数量 增量 最终数量范围
1-4 3 0 3-6
5-9 3 1 4-6
10-14 3 2 5-6
15+ 3 3+ 6

章节来源

强度倍率计算

calculateMonsterStrengthMultiplier函数

系统实现了双维度的强度倍率计算,综合考虑关卡进度和玩家等级:

flowchart TD
Start([开始强度计算]) --> CalcStage["计算关卡倍率<br/>stageMultiplier = 1 + (stageNumber - 1) * 0.1"]
CalcStage --> CalcLevel["计算等级倍率<br/>levelMultiplier = 1 + (level - 1) * 0.05"]
CalcLevel --> Multiply["计算总倍率<br/>strengthMultiplier = stageMultiplier * levelMultiplier"]
Multiply --> Return[返回强度倍率]
Return --> End([结束])

图表来源

强度增长特性

关卡维度

  • 每关增加10%的强度
  • 关卡1: 1.0x
  • 关卡5: 1.4x
  • 关卡10: 1.9x
  • 关卡20: 2.9x

等级维度

  • 每级增加5%的强度
  • 等级1: 1.0x
  • 等级3: 1.1x
  • 等级5: 1.2x

章节来源

事件系统集成

随机事件配置

EventConfig提供了完整的随机事件系统

事件类型 触发概率 效果描述
TREASURE 30% 获得额外奖励(+50金币
TRAP 25% 受到一定伤害
BUFF 25% 获得临时增益效果
DEBUFF 20% 受到临时减益效果

事件触发机制

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

图表来源

章节来源

GameMap集成调用

MissionMonComp集成流程

MissionMonComp作为GameMap的核心组件负责关卡生成的执行

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()

图表来源

怪物生成队列管理

系统采用了队列化的怪物生成机制:

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

图表来源

章节来源

配置修改指南

修改难度曲线

调整怪物数量

  1. 修改基础数量直接修改StageConfigRules中各关卡的count
  2. 调整数量范围:修改minCountmaxCount限制
  3. 改变增长速率修改calculateMonsterCount函数中的增量公式

调整强度倍率

  1. 修改关卡倍率调整calculateMonsterStrengthMultiplier函数中的0.1系数
  2. 修改等级倍率:调整0.05系数
  3. 添加新维度:可扩展新的强度计算因子

新增特殊关卡类型

步骤1定义关卡类型

export enum StageType {
    // 现有类型...
    SPECIAL = "special"  // 新增特殊关卡类型
}

步骤2添加配置规则

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更新判定逻辑

export function getStageType(stageNumber: number, level: number = 1): StageType {
    // 现有逻辑...
    
    // 新增特殊关卡规则
    if (/* 特殊条件 */) {
        return StageType.SPECIAL;
    }
    
    return /* 默认返回 */;
}

调整关卡频率

修改事件关卡频率

// 修改getStageType函数中的事件触发条件
if (stageNumber % 5 === 0 && level === 3) {
    return StageType.EVENT;
}

修改Boss关卡频率

// 修改Boss关卡触发条件
if (stageNumber % 10 === 0) {
    // Boss逻辑...
}

性能优化考虑

内存管理优化

  1. 怪物配置缓存:避免重复计算相同的关卡配置
  2. 事件概率预计算:使用累积概率减少每次触发的计算开销
  3. 队列长度控制:限制怪物生成队列的最大长度

计算性能优化

  1. 早期退出机制在getStageType中使用早期返回
  2. 批量操作:一次性生成所有怪物配置而非逐个生成
  3. 数值计算优化使用Math.floor替代更复杂的数学运算

内存使用监控

// 监控怪物队列大小
console.log(`怪物队列大小: ${this.monsterQueue.length}`);

总结

RogueConfig.ts实现了一个完整而灵活的肉鸽模式关卡生成系统。通过分层的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线为玩家提供了丰富的游戏体验。

主要特性

  1. 动态关卡生成:基于关卡号和玩家等级的智能判定
  2. 渐进式难度:通过数量和强度倍率实现平滑的难度提升
  3. 随机事件系统:增加游戏的不确定性和趣味性
  4. 模块化设计:清晰的职责分离便于维护和扩展
  5. 性能优化:合理的内存管理和计算优化

扩展建议

  1. 新增关卡类型:可根据游戏需求添加更多特殊关卡
  2. 动态配置加载:支持运行时修改配置而不需重启
  3. 数据分析功能:添加关卡统计数据收集和分析
  4. 多语言支持:完善国际化支持

该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。