503 lines
14 KiB
Markdown
503 lines
14 KiB
Markdown
# 关卡生成规则
|
||
|
||
<cite>
|
||
**本文档中引用的文件**
|
||
- [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)
|
||
</cite>
|
||
|
||
## 目录
|
||
1. [简介](#简介)
|
||
2. [项目结构概览](#项目结构概览)
|
||
3. [核心组件分析](#核心组件分析)
|
||
4. [关卡类型判定逻辑](#关卡类型判定逻辑)
|
||
5. [怪物配置规则](#怪物配置规则)
|
||
6. [动态数量计算机制](#动态数量计算机制)
|
||
7. [强度倍率计算](#强度倍率计算)
|
||
8. [事件系统集成](#事件系统集成)
|
||
9. [GameMap集成调用](#gamemap集成调用)
|
||
10. [配置修改指南](#配置修改指南)
|
||
11. [性能优化考虑](#性能优化考虑)
|
||
12. [总结](#总结)
|
||
|
||
## 简介
|
||
|
||
RogueConfig.ts是肉鸽模式的核心配置脚本,实现了动态关卡生成系统。该系统通过复杂的关卡类型判定逻辑、智能的怪物配置规则和渐进式的难度曲线,为玩家提供持续挑战的游戏体验。系统支持普通、精英、Boss和事件四种关卡类型,并具备完善的随机事件机制。
|
||
|
||
## 项目结构概览
|
||
|
||
```mermaid
|
||
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
|
||
```
|
||
|
||
**图表来源**
|
||
- [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 {
|
||
<<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 : "触发"
|
||
```
|
||
|
||
**图表来源**
|
||
- [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个普通怪物<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
|
||
```
|
||
|
||
**图表来源**
|
||
- [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["计算关卡倍率<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([结束])
|
||
```
|
||
|
||
**图表来源**
|
||
- [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. **多语言支持**:完善国际化支持
|
||
|
||
该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。 |