# 关卡生成规则
**本文档中引用的文件**
- [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. **多语言支持**:完善国际化支持
该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。