14 KiB
14 KiB
关卡生成规则
**本文档中引用的文件** - [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)目录
简介
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
图表来源
章节来源
配置修改指南
修改难度曲线
调整怪物数量
- 修改基础数量:直接修改StageConfigRules中各关卡的
count值 - 调整数量范围:修改
minCount和maxCount限制 - 改变增长速率:修改calculateMonsterCount函数中的增量公式
调整强度倍率
- 修改关卡倍率:调整calculateMonsterStrengthMultiplier函数中的
0.1系数 - 修改等级倍率:调整
0.05系数 - 添加新维度:可扩展新的强度计算因子
新增特殊关卡类型
步骤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逻辑...
}
性能优化考虑
内存管理优化
- 怪物配置缓存:避免重复计算相同的关卡配置
- 事件概率预计算:使用累积概率减少每次触发的计算开销
- 队列长度控制:限制怪物生成队列的最大长度
计算性能优化
- 早期退出机制:在getStageType中使用早期返回
- 批量操作:一次性生成所有怪物配置而非逐个生成
- 数值计算优化:使用Math.floor替代更复杂的数学运算
内存使用监控
// 监控怪物队列大小
console.log(`怪物队列大小: ${this.monsterQueue.length}`);
总结
RogueConfig.ts实现了一个完整而灵活的肉鸽模式关卡生成系统。通过分层的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线,为玩家提供了丰富的游戏体验。
主要特性
- 动态关卡生成:基于关卡号和玩家等级的智能判定
- 渐进式难度:通过数量和强度倍率实现平滑的难度提升
- 随机事件系统:增加游戏的不确定性和趣味性
- 模块化设计:清晰的职责分离便于维护和扩展
- 性能优化:合理的内存管理和计算优化
扩展建议
- 新增关卡类型:可根据游戏需求添加更多特殊关卡
- 动态配置加载:支持运行时修改配置而不需重启
- 数据分析功能:添加关卡统计数据收集和分析
- 多语言支持:完善国际化支持
该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。