refactor(game): 移除已弃用的事件常量
- 删除 UpdateHero 和 UpdateFightHero 事件 - 移除 MISSION_UPDATE 事件常量 - 优化游戏事件枚举定义
This commit is contained in:
503
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/关卡生成规则.md
Normal file
503
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/关卡生成规则.md
Normal file
@@ -0,0 +1,503 @@
|
||||
# 关卡生成规则
|
||||
|
||||
<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. **多语言支持**:完善国际化支持
|
||||
|
||||
该系统为肉鸽游戏提供了坚实的技术基础,通过合理的配置和适当的扩展,可以满足各种游戏设计需求。
|
||||
435
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/怪物配置体系.md
Normal file
435
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/怪物配置体系.md
Normal file
@@ -0,0 +1,435 @@
|
||||
# 怪物配置体系
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
|
||||
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
|
||||
- [SkillSet.ts](file://assets/script/game/common/config/SkillSet.ts)
|
||||
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [概述](#概述)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概览](#架构概览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 概述
|
||||
|
||||
RogueConfig.ts是肉鸽模式中的核心怪物配置管理系统,提供了完整的怪物类型定义、关卡配置规则、强度计算机制和随机事件系统。该系统通过分层的配置结构实现了怪物的差异化管理,支持普通怪物、精英怪物和Boss怪物三种类型,并能够根据关卡进度动态调整怪物数量和强度。
|
||||
|
||||
系统的主要功能包括:
|
||||
- **怪物类型管理**:通过MonsterType枚举定义三种怪物类型
|
||||
- **关卡配置系统**:支持普通关卡、精英关卡、Boss关卡和事件关卡
|
||||
- **强度计算引擎**:基于关卡号和等级计算怪物强度倍率
|
||||
- **随机事件系统**:提供宝箱、陷阱、增益和减益事件
|
||||
- **程序化关卡生成**:支持怪物数量随关卡递增的动态配置
|
||||
|
||||
## 项目结构
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "怪物配置模块"
|
||||
RC[RogueConfig.ts<br/>核心配置管理]
|
||||
MC[MissionMonComp.ts<br/>怪物生成控制]
|
||||
end
|
||||
subgraph "数据源模块"
|
||||
HS[heroSet.ts<br/>英雄/怪物数据]
|
||||
Mon[Mon.ts<br/>怪物实体管理]
|
||||
end
|
||||
subgraph "配置系统"
|
||||
SC[StageConfigRules<br/>关卡配置规则]
|
||||
EM[EliteMonsterList<br/>精英怪物配置]
|
||||
BM[BossMonsterList<br/>Boss怪物配置]
|
||||
end
|
||||
RC --> SC
|
||||
RC --> EM
|
||||
RC --> BM
|
||||
MC --> RC
|
||||
MC --> Mon
|
||||
Mon --> HS
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L209)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L35)
|
||||
|
||||
## 核心组件
|
||||
|
||||
### 怪物类型枚举系统
|
||||
|
||||
系统定义了三个核心的怪物类型,通过枚举确保类型安全和可维护性:
|
||||
|
||||
| 怪物类型 | 描述 | 特征 |
|
||||
|---------|------|------|
|
||||
| NORMAL | 普通怪物 | 基础属性,随机选择 |
|
||||
| ELITE | 精英怪物 | 强化配置,固定列表 |
|
||||
| BOSS | Boss怪物 | 高强度,特殊配置 |
|
||||
|
||||
### 关卡类型系统
|
||||
|
||||
| 关卡类型 | 触发条件 | 怪物组成 |
|
||||
|---------|----------|----------|
|
||||
| NORMAL | 1-9关1-4级 | 普通怪物为主 |
|
||||
| ELITE | 1-9关5级/10关4级 | 精英+普通怪物 |
|
||||
| BOSS | 10关5级 | Boss+精英+普通怪物 |
|
||||
| EVENT | 每5关特殊事件 | 少量普通怪物 |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L55)
|
||||
|
||||
## 架构概览
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Player as 玩家
|
||||
participant MC as MissionMonComp
|
||||
participant RC as RogueConfig
|
||||
participant Mon as Monster
|
||||
participant HS as HeroSet
|
||||
Player->>MC : 开始关卡
|
||||
MC->>RC : getStageType(stage, level)
|
||||
RC-->>MC : 返回关卡类型
|
||||
MC->>RC : getStageMonsterConfigs(stage, level)
|
||||
RC->>RC : calculateMonsterStrengthMultiplier()
|
||||
RC->>RC : generateStageConfig()
|
||||
RC->>RC : getMonsterUUIDsByType()
|
||||
RC-->>MC : 返回怪物配置数组
|
||||
MC->>Mon : 创建怪物实例
|
||||
Mon->>HS : 加载怪物数据
|
||||
HS-->>Mon : 返回属性配置
|
||||
Mon-->>MC : 怪物实例完成
|
||||
MC-->>Player : 关卡准备就绪
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 怪物类型管理系统
|
||||
|
||||
#### MonsterType枚举定义
|
||||
|
||||
系统通过清晰的枚举定义区分不同类型的怪物:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class MonsterType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
}
|
||||
class StageType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
+EVENT : "event"
|
||||
}
|
||||
class EventType {
|
||||
<<enumeration>>
|
||||
+TREASURE : "treasure"
|
||||
+TRAP : "trap"
|
||||
+BUFF : "buff"
|
||||
+DEBUFF : "debuff"
|
||||
}
|
||||
MonsterType --> StageType : "映射到"
|
||||
StageType --> EventType : "可能触发"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L55)
|
||||
|
||||
#### 怪物UUID获取机制
|
||||
|
||||
getMonsterUUIDsByType函数实现了根据不同怪物类型获取对应配置表的功能:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始获取怪物UUID]) --> CheckType{检查怪物类型}
|
||||
CheckType --> |NORMAL| GetNormal[调用getMonList获取普通怪物]
|
||||
CheckType --> |ELITE| GetElite[使用EliteMonsterList配置表]
|
||||
CheckType --> |BOSS| GetBoss[使用BossMonsterList配置表]
|
||||
CheckType --> |其他| ReturnEmpty[返回空数组]
|
||||
GetNormal --> FilterMonsters[过滤怪物数据]
|
||||
FilterMonsters --> ReturnUUIDs[返回UUID数组]
|
||||
GetElite --> ReturnEliteUUIDs[返回精英怪物UUID]
|
||||
GetBoss --> ReturnBossUUIDs[返回Boss怪物UUID]
|
||||
ReturnEmpty --> End([结束])
|
||||
ReturnUUIDs --> End
|
||||
ReturnEliteUUIDs --> End
|
||||
ReturnBossUUIDs --> End
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L225-L247)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L225-L247)
|
||||
|
||||
### 关卡配置系统
|
||||
|
||||
#### StageConfigRules配置表
|
||||
|
||||
系统通过StageConfigRules定义了四种关卡类型的怪物配置规则:
|
||||
|
||||
| 关卡类型 | 普通怪物 | 精英怪物 | Boss怪物 | 数量范围 |
|
||||
|---------|----------|----------|----------|----------|
|
||||
| NORMAL | 3-6只 | 0只 | 0只 | 基础3只递增 |
|
||||
| ELITE | 2-5只 | 1-4只 | 0只 | 混合配置 |
|
||||
| BOSS | 1-4只 | 1-3只 | 1只 | 高强度组合 |
|
||||
| EVENT | 1-4只 | 0只 | 0只 | 少量怪物 |
|
||||
|
||||
#### 强度计算引擎
|
||||
|
||||
calculateMonsterStrengthMultiplier函数实现了基于关卡进度的强度倍率计算:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始计算强度倍率]) --> CalcStage[计算关卡倍率<br/>stageMultiplier = 1 + (stage-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#L175-L180)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L65-L132)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L175-L180)
|
||||
|
||||
### 怪物生成流程
|
||||
|
||||
#### getStageMonsterConfigs函数详解
|
||||
|
||||
该函数是怪物配置生成的核心,整合了关卡配置、强度计算和UUID选择:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Caller as 调用者
|
||||
participant Func as getStageMonsterConfigs
|
||||
participant Gen as generateStageConfig
|
||||
participant Calc as calculateMonsterStrengthMultiplier
|
||||
participant UUID as getMonsterUUIDsByType
|
||||
Caller->>Func : getStageMonsterConfigs(stage, level)
|
||||
Func->>Gen : 生成关卡配置
|
||||
Gen-->>Func : 返回怪物类型数组
|
||||
Func->>Calc : 计算强度倍率
|
||||
Calc-->>Func : 返回倍率值
|
||||
loop 遍历每个怪物类型
|
||||
Func->>UUID : 获取该类型UUID列表
|
||||
UUID-->>Func : 返回UUID数组
|
||||
Func->>Func : 随机选择UUID
|
||||
Func->>Func : 构建怪物配置对象
|
||||
end
|
||||
Func-->>Caller : 返回完整怪物配置数组
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L269-L310)
|
||||
|
||||
### 怪物数据源关联性
|
||||
|
||||
#### Mon.ts与heroSet.ts的数据绑定
|
||||
|
||||
怪物实体通过Mon.ts加载来自heroSet.ts的配置数据:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Monster {
|
||||
+load(pos, scale, uuid, is_boss, strengthMultiplier)
|
||||
+hero_init(uuid, node, scale, box_group, is_boss, is_call, strengthMultiplier)
|
||||
-init()
|
||||
-destroy()
|
||||
}
|
||||
class HeroInfo {
|
||||
+uuid : number
|
||||
+name : string
|
||||
+path : string
|
||||
+fac : FacSet
|
||||
+type : HType
|
||||
+hp : number
|
||||
+mp : number
|
||||
+ap : number
|
||||
+def : number
|
||||
+skills : number[]
|
||||
}
|
||||
class MonModelComp {
|
||||
+base_hp : number
|
||||
+base_mp : number
|
||||
+base_ap : number
|
||||
+base_def : number
|
||||
+strengthMultiplier : number
|
||||
}
|
||||
Monster --> HeroInfo : "使用数据"
|
||||
Monster --> MonModelComp : "包含组件"
|
||||
MonModelComp --> HeroInfo : "应用属性"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L20-L110)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L80-L151)
|
||||
|
||||
**章节来源**
|
||||
- [Mon.ts](file://assets/script/game/hero/Mon.ts#L20-L110)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts#L80-L151)
|
||||
|
||||
### 随机事件系统
|
||||
|
||||
#### EventConfig配置表
|
||||
|
||||
系统提供了完整的随机事件配置,支持四种事件类型:
|
||||
|
||||
| 事件类型 | 触发概率 | 效果描述 |
|
||||
|---------|----------|----------|
|
||||
| TREASURE | 30% | 获得额外奖励 |
|
||||
| TRAP | 25% | 受到一定伤害 |
|
||||
| BUFF | 25% | 获得临时增益效果 |
|
||||
| DEBUFF | 20% | 受到临时减益效果 |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L134-L165)
|
||||
|
||||
## 依赖关系分析
|
||||
|
||||
```mermaid
|
||||
graph TD
|
||||
subgraph "外部依赖"
|
||||
ECS[ECS框架]
|
||||
Oops[Oops插件框架]
|
||||
CC[Cocos Creator]
|
||||
end
|
||||
subgraph "内部模块"
|
||||
RC[RogueConfig]
|
||||
MC[MissionMonComp]
|
||||
Mon[Monster实体]
|
||||
HS[HeroSet]
|
||||
end
|
||||
subgraph "配置数据"
|
||||
HeroInfo[HeroInfo配置]
|
||||
SkillSet[SkillSet配置]
|
||||
HeroAttrs[HeroAttrs配置]
|
||||
end
|
||||
RC --> HS
|
||||
MC --> RC
|
||||
MC --> Mon
|
||||
Mon --> HS
|
||||
Mon --> HeroInfo
|
||||
Mon --> SkillSet
|
||||
Mon --> HeroAttrs
|
||||
RC -.-> ECS
|
||||
MC -.-> Oops
|
||||
Mon -.-> CC
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L10)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L15)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L10)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L15)
|
||||
|
||||
## 性能考虑
|
||||
|
||||
### 怪物生成优化策略
|
||||
|
||||
1. **延迟加载**:怪物实体采用延迟初始化机制,避免一次性加载过多资源
|
||||
2. **随机选择优化**:使用Math.random()进行高效随机选择,避免复杂算法
|
||||
3. **配置缓存**:关卡配置结果被缓存在MissionMonComp中,减少重复计算
|
||||
4. **内存管理**:怪物实体销毁时正确释放组件和资源
|
||||
|
||||
### 强度计算优化
|
||||
|
||||
- 使用简单的数学运算替代复杂的属性计算
|
||||
- 强度倍率计算结果被缓存,避免重复计算
|
||||
- 关卡类型判断采用分支预测友好的条件语句
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 怪物配置不生效
|
||||
|
||||
**问题现象**:关卡中没有生成预期的怪物类型
|
||||
|
||||
**排查步骤**:
|
||||
1. 检查EliteMonsterList和BossMonsterList是否包含正确的UUID
|
||||
2. 验证getMonsterUUIDsByType函数的返回值
|
||||
3. 确认generateStageConfig生成的怪物类型数组
|
||||
|
||||
**解决方案**:
|
||||
- 在heroSet.ts中添加缺失的怪物UUID
|
||||
- 检查MonsterType枚举定义是否正确
|
||||
- 验证关卡配置规则中的怪物数量设置
|
||||
|
||||
#### 强度倍率异常
|
||||
|
||||
**问题现象**:怪物强度不符合预期的增长曲线
|
||||
|
||||
**排查步骤**:
|
||||
1. 检查calculateMonsterStrengthMultiplier函数的计算逻辑
|
||||
2. 验证关卡号和等级参数传递是否正确
|
||||
3. 确认基础属性值是否合理
|
||||
|
||||
**解决方案**:
|
||||
- 调整关卡倍率和等级倍率的计算公式
|
||||
- 检查HeroInfo中的基础属性配置
|
||||
- 验证强度倍率的应用逻辑
|
||||
|
||||
#### 随机事件不触发
|
||||
|
||||
**问题现象**:事件关卡中没有随机事件发生
|
||||
|
||||
**排查步骤**:
|
||||
1. 检查EventConfig的概率设置
|
||||
2. 验证getRandomEvent函数的随机性
|
||||
3. 确认事件处理逻辑是否正确
|
||||
|
||||
**解决方案**:
|
||||
- 调整事件概率分布,确保总和为1
|
||||
- 检查随机数生成器的实现
|
||||
- 验证事件处理函数的调用时机
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L175-L200)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L135-L169)
|
||||
|
||||
## 结论
|
||||
|
||||
RogueConfig.ts构建了一个完整而灵活的怪物配置体系,通过分层的设计实现了怪物类型的差异化管理和关卡的程序化生成。系统的三大核心特性——类型管理、强度计算和随机事件——为肉鸽模式提供了丰富的游戏体验。
|
||||
|
||||
### 主要优势
|
||||
|
||||
1. **类型安全**:通过枚举确保怪物类型的一致性
|
||||
2. **可扩展性**:配置表设计支持轻松添加新怪物类型
|
||||
3. **动态平衡**:强度计算机制保证游戏难度的渐进式提升
|
||||
4. **随机性**:事件系统增加了游戏的不确定性和趣味性
|
||||
|
||||
### 改进建议
|
||||
|
||||
1. **配置验证**:添加配置完整性检查机制
|
||||
2. **性能监控**:在大型关卡中监控怪物生成性能
|
||||
3. **平衡调整**:提供更精细的强度调节工具
|
||||
4. **可视化编辑**:开发关卡配置的可视化编辑器
|
||||
|
||||
该系统为肉鸽游戏提供了坚实的基础架构,支持开发者根据具体需求进行定制和扩展,是构建高质量肉鸽游戏的重要组件。
|
||||
592
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/肉鸽关卡配置.md
Normal file
592
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/肉鸽关卡配置.md
Normal file
@@ -0,0 +1,592 @@
|
||||
# 肉鸽关卡配置系统
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
|
||||
- [heroSet.ts](file://assets/script/game/common/config/heroSet.ts)
|
||||
- [Mon.ts](file://assets/script/game/hero/Mon.ts)
|
||||
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts)
|
||||
- [MapModelComp.ts](file://assets/script/game/map/model/MapModelComp.ts)
|
||||
- [MapViewComp.ts](file://assets/script/game/map/view/MapViewComp.ts)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [系统概述](#系统概述)
|
||||
2. [核心架构](#核心架构)
|
||||
3. [关卡类型系统](#关卡类型系统)
|
||||
4. [怪物类型体系](#怪物类型体系)
|
||||
5. [关卡配置规则](#关卡配置规则)
|
||||
6. [随机事件系统](#随机事件系统)
|
||||
7. [动态难度计算](#动态难度计算)
|
||||
8. [关卡生成流程](#关卡生成流程)
|
||||
9. [实际调用机制](#实际调用机制)
|
||||
10. [扩展指南](#扩展指南)
|
||||
11. [性能优化建议](#性能优化建议)
|
||||
12. [总结](#总结)
|
||||
|
||||
## 系统概述
|
||||
|
||||
肉鸽关卡配置系统是一个高度程序化的关卡生成框架,专为Roguelike游戏设计。该系统通过智能算法动态生成具有递增难度的关卡,支持多种怪物类型、随机事件和平衡性调整。
|
||||
|
||||
### 主要特性
|
||||
|
||||
- **程序化关卡生成**:基于关卡号和等级自动计算关卡配置
|
||||
- **动态难度曲线**:怪物数量和强度随关卡递增而增强
|
||||
- **多样化关卡类型**:普通关卡、精英关卡、Boss关卡、事件关卡
|
||||
- **随机事件系统**:包含奖励、陷阱、增益、减益等多种事件
|
||||
- **灵活配置管理**:支持快速调整难度曲线和平衡性
|
||||
|
||||
## 核心架构
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "配置层"
|
||||
A[RogueConfig.ts] --> B[StageType枚举]
|
||||
A --> C[MonsterType枚举]
|
||||
A --> D[EventType枚举]
|
||||
A --> E[StageConfigRules]
|
||||
A --> F[EventConfig]
|
||||
end
|
||||
subgraph "逻辑层"
|
||||
G[getStageType] --> H[calculateMonsterCount]
|
||||
G --> I[calculateMonsterStrengthMultiplier]
|
||||
H --> J[generateStageConfig]
|
||||
I --> J
|
||||
J --> K[getStageMonsterConfigs]
|
||||
end
|
||||
subgraph "应用层"
|
||||
L[MissionMonComp.ts] --> M[GameMap.ts]
|
||||
L --> N[Mon.ts]
|
||||
L --> O[MapModelComp.ts]
|
||||
end
|
||||
A --> G
|
||||
K --> L
|
||||
M --> O
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240)
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L1-L36)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L40)
|
||||
|
||||
## 关卡类型系统
|
||||
|
||||
系统定义了四种主要的关卡类型,每种类型都有独特的配置特征和挑战性。
|
||||
|
||||
### StageType枚举结构
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class StageType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
+EVENT : "event"
|
||||
}
|
||||
class StageConfigRules {
|
||||
+NORMAL : NormalConfig
|
||||
+ELITE : EliteConfig
|
||||
+BOSS : BossConfig
|
||||
+EVENT : EventConfig
|
||||
}
|
||||
class NormalConfig {
|
||||
+description : "普通关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
class EliteConfig {
|
||||
+description : "精英关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
class BossConfig {
|
||||
+description : "Boss关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
class EventConfig {
|
||||
+description : "事件关卡"
|
||||
+monsters : MonsterGroup[]
|
||||
}
|
||||
StageType --> StageConfigRules : "映射到"
|
||||
StageConfigRules --> NormalConfig : "包含"
|
||||
StageConfigRules --> EliteConfig : "包含"
|
||||
StageConfigRules --> BossConfig : "包含"
|
||||
StageConfigRules --> EventConfig : "包含"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L35-L86)
|
||||
|
||||
### 关卡类型特征对比
|
||||
|
||||
| 关卡类型 | 怪物组成 | 数量范围 | 特殊规则 |
|
||||
|---------|---------|---------|---------|
|
||||
| 普通关卡 | 普通怪物 | 2-6只 | 基础难度,适合新手 |
|
||||
| 精英关卡 | 精英+普通 | 3-9只 | 中等难度,包含精英怪物 |
|
||||
| Boss关卡 | Boss+精英+普通 | 4-8只 | 高难度,包含Boss |
|
||||
| 事件关卡 | 普通怪物 | 1-4只 | 包含随机事件 |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L47-L86)
|
||||
|
||||
## 怪物类型体系
|
||||
|
||||
系统采用分层的怪物分类体系,支持不同强度和行为特征的怪物配置。
|
||||
|
||||
### MonsterType枚举设计
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class MonsterType {
|
||||
<<enumeration>>
|
||||
+NORMAL : "normal"
|
||||
+ELITE : "elite"
|
||||
+BOSS : "boss"
|
||||
}
|
||||
class MonsterConfig {
|
||||
+uuid : number
|
||||
+type : MonsterType
|
||||
+stageNumber : number
|
||||
+level : number
|
||||
+strengthMultiplier : number
|
||||
}
|
||||
class MonsterPool {
|
||||
+getMonsterUUIDsByType() : number[]
|
||||
+EliteMonsterList : number[]
|
||||
+BossMonsterList : number[]
|
||||
+getMonList() : number[]
|
||||
}
|
||||
MonsterType --> MonsterConfig : "生成"
|
||||
MonsterPool --> MonsterType : "提供"
|
||||
MonsterPool --> MonsterConfig : "包含"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L28-L34)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L240-L260)
|
||||
|
||||
### 怪物池配置
|
||||
|
||||
系统维护三个独立的怪物池,每个池包含特定类型的怪物:
|
||||
|
||||
- **普通怪物池**:使用 `getMonList()` 方法获取所有可用的普通怪物
|
||||
- **精英怪物池**:固定配置的精英怪物列表
|
||||
- **Boss怪物池**:固定配置的Boss怪物列表
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L18-L34)
|
||||
- [heroSet.ts](file://assets/script/game/game/common/config/heroSet.ts#L35-L40)
|
||||
|
||||
## 关卡配置规则
|
||||
|
||||
系统通过预定义的配置规则实现关卡的程序化生成,确保游戏体验的连贯性和挑战性。
|
||||
|
||||
### 配置规则结构
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[关卡号] --> B{关卡类型判断}
|
||||
B --> |第5关且等级3| C[事件关卡]
|
||||
B --> |第10关| D{等级判断}
|
||||
B --> |其他| E{等级判断}
|
||||
D --> |等级5| F[Boss关卡]
|
||||
D --> |等级4| G[精英关卡]
|
||||
D --> |其他| H[普通关卡]
|
||||
E --> |等级5| I[精英关卡]
|
||||
E --> |其他| J[普通关卡]
|
||||
C --> K[生成怪物配置]
|
||||
F --> K
|
||||
G --> K
|
||||
H --> K
|
||||
I --> K
|
||||
J --> K
|
||||
K --> L[计算怪物数量]
|
||||
K --> M[计算强度倍率]
|
||||
L --> N[生成最终配置]
|
||||
M --> N
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L129-L168)
|
||||
|
||||
### 怪物数量计算算法
|
||||
|
||||
系统采用线性递增算法计算怪物数量:
|
||||
|
||||
```typescript
|
||||
// 计算公式:基础数量 + (关卡号 ÷ 5) 的整数部分
|
||||
const increment = Math.floor(stageNumber / 5);
|
||||
let count = baseCount + increment;
|
||||
|
||||
// 确保数量在最小值和最大值范围内
|
||||
count = Math.max(minCount, Math.min(maxCount, count));
|
||||
```
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L150-L175)
|
||||
|
||||
## 随机事件系统
|
||||
|
||||
系统提供了丰富的随机事件机制,为游戏增添不确定性和策略深度。
|
||||
|
||||
### EventType枚举
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class EventType {
|
||||
<<enumeration>>
|
||||
+TREASURE : "treasure"
|
||||
+TRAP : "trap"
|
||||
+BUFF : "buff"
|
||||
+DEBUFF : "debuff"
|
||||
}
|
||||
class EventConfig {
|
||||
+TREASURE : TreasureConfig
|
||||
+TRAP : TrapConfig
|
||||
+BUFF : BuffConfig
|
||||
+DEBUFF : DebuffConfig
|
||||
}
|
||||
class EventProbability {
|
||||
+TREASURE : 0.3
|
||||
+TRAP : 0.25
|
||||
+BUFF : 0.25
|
||||
+DEBUFF : 0.2
|
||||
}
|
||||
EventType --> EventConfig : "配置"
|
||||
EventConfig --> EventProbability : "概率分布"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L50-L75)
|
||||
|
||||
### 事件触发机制
|
||||
|
||||
事件系统采用累积概率算法确保公平性:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Player as 玩家
|
||||
participant System as 事件系统
|
||||
participant RNG as 随机数生成器
|
||||
participant Effect as 效果处理器
|
||||
Player->>System : 进入事件关卡
|
||||
System->>RNG : 生成随机数(0-1)
|
||||
RNG-->>System : 返回随机值
|
||||
System->>System : 累积概率计算
|
||||
alt 随机数 ≤ 0.3
|
||||
System->>Effect : 触发宝藏事件
|
||||
Effect->>Player : 增加50金币
|
||||
else 随机数 ≤ 0.55
|
||||
System->>Effect : 触发陷阱事件
|
||||
Effect->>Player : 造成伤害
|
||||
else 随机数 ≤ 0.8
|
||||
System->>Effect : 触发增益事件
|
||||
Effect->>Player : 获得临时增益
|
||||
else 随机数 > 0.8
|
||||
System->>Effect : 触发减益事件
|
||||
Effect->>Player : 造成临时减益
|
||||
end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L295-L311)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L50-L75)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L295-L311)
|
||||
|
||||
## 动态难度计算
|
||||
|
||||
系统实现了复杂的难度计算机制,确保游戏体验的渐进式挑战。
|
||||
|
||||
### 强度倍率计算
|
||||
|
||||
```mermaid
|
||||
flowchart LR
|
||||
A[关卡号] --> B[阶段倍率计算]
|
||||
C[等级] --> D[等级倍率计算]
|
||||
B --> E[基础倍率 = 1 + (关卡号-1) × 0.1]
|
||||
D --> F[等级倍率 = 1 + (等级-1) × 0.05]
|
||||
E --> G[总倍率 = 阶段倍率 × 等级倍率]
|
||||
F --> G
|
||||
G --> H[应用到怪物属性]
|
||||
H --> I[HP = 基础HP × 总倍率]
|
||||
H --> J[AP = 基础AP × 总倍率]
|
||||
H --> K[DEF = 基础DEF × 总倍率]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L177-L185)
|
||||
|
||||
### 难度曲线特征
|
||||
|
||||
| 关卡范围 | 等级要求 | 强度倍率 | 怪物数量 | 挑战特点 |
|
||||
|---------|---------|---------|---------|---------|
|
||||
| 1-9 | 1-4级 | 1.0-1.4 | 2-6只 | 渐进适应 |
|
||||
| 1-9 | 5级 | 1.4-1.8 | 3-6只 | 中等挑战 |
|
||||
| 10 | 1-3级 | 1.9-2.3 | 3-6只 | 高强度 |
|
||||
| 10 | 4级 | 2.4-2.8 | 3-6只 | 极限挑战 |
|
||||
| 10 | 5级 | 2.9-3.3 | 3-6只 | 终极考验 |
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L177-L185)
|
||||
|
||||
## 关卡生成流程
|
||||
|
||||
系统通过多层函数协作实现完整的关卡生成流程。
|
||||
|
||||
### 完整生成序列
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant MC as MissionComp
|
||||
participant RM as MissionMonComp
|
||||
participant RC as RogueConfig
|
||||
participant MM as MapModel
|
||||
participant M as Monster
|
||||
MC->>RM : do_mon_wave()
|
||||
RM->>RC : getStageType(stageNumber, level)
|
||||
RC-->>RM : StageType
|
||||
RM->>RC : getStageMonsterConfigs(stageNumber, level)
|
||||
RC->>RC : generateStageConfig()
|
||||
RC->>RC : calculateMonsterCount()
|
||||
RC->>RC : calculateMonsterStrengthMultiplier()
|
||||
RC-->>RM : 怪物配置数组
|
||||
RM->>RM : generateMonstersFromStageConfig()
|
||||
loop 每个怪物配置
|
||||
RM->>RM : addToStageSpawnQueue()
|
||||
end
|
||||
loop 怪物生成队列
|
||||
RM->>M : addMonster()
|
||||
M->>MM : 加载怪物资源
|
||||
MM-->>M : 怪物实例
|
||||
M-->>RM : 怪物实体
|
||||
end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L207-L247)
|
||||
|
||||
### 怪物生成队列管理
|
||||
|
||||
系统采用队列机制控制怪物生成节奏:
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 等待生成
|
||||
等待生成 --> 准备生成 : 怪物队列非空
|
||||
准备生成 --> 生成中 : spawnTimer >= spawnInterval
|
||||
生成中 --> 暂停检查 : 生成5只后
|
||||
生成中 --> 准备生成 : 继续生成
|
||||
暂停检查 --> 暂停中 : 需要暂停
|
||||
暂停检查 --> 准备生成 : 继续生成
|
||||
暂停中 --> 暂停结束 : pauseInterval时间到
|
||||
暂停结束 --> 准备生成 : 重置计数器
|
||||
准备生成 --> [*] : 队列为空
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L45-L85)
|
||||
|
||||
**章节来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L150-L180)
|
||||
|
||||
## 实际调用机制
|
||||
|
||||
系统在游戏运行时通过事件驱动的方式调用关卡配置功能。
|
||||
|
||||
### 调用时序图
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant GM as GameMap
|
||||
participant MC as MissionComp
|
||||
participant MMon as MissionMonComp
|
||||
participant RC as RogueConfig
|
||||
GM->>MC : 初始化游戏
|
||||
MC->>MC : data_init()
|
||||
MC->>MC : mission_start()
|
||||
MC->>MC : to_fight()
|
||||
MC->>MMon : fight_ready()
|
||||
MMon->>MMon : do_mon_wave()
|
||||
Note over MMon : 开始关卡生成流程
|
||||
MMon->>RC : getStageType(currentStage, level)
|
||||
MMon->>RC : getStageMonsterConfigs(currentStage, level)
|
||||
RC-->>MMon : 怪物配置数据
|
||||
MMon->>MMon : generateMonstersFromStageConfig()
|
||||
MMon->>MMon : addToStageSpawnQueue()
|
||||
loop 怪物生成循环
|
||||
MMon->>MMon : spawnNextMonster()
|
||||
MMon->>GM : addMonster()
|
||||
end
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L25-L35)
|
||||
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L75-L95)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L40-L50)
|
||||
|
||||
### 数据流传递
|
||||
|
||||
关卡配置数据通过以下路径传递:
|
||||
|
||||
1. **配置层**:RogueConfig.ts 提供基础配置
|
||||
2. **逻辑层**:MissionMonComp.ts 处理游戏逻辑
|
||||
3. **渲染层**:Mon.ts 负责怪物渲染和行为
|
||||
4. **状态层**:smc.vmdata.mission_data 管理游戏状态
|
||||
|
||||
**章节来源**
|
||||
- [GameMap.ts](file://assets/script/game/map/GameMap.ts#L25-L35)
|
||||
- [MissionComp.ts](file://assets/script/game/map/MissionComp.ts#L75-L95)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L40-L50)
|
||||
|
||||
## 扩展指南
|
||||
|
||||
### 添加新事件类型
|
||||
|
||||
要添加新的随机事件类型,请按照以下步骤操作:
|
||||
|
||||
1. **扩展EventType枚举**:
|
||||
```typescript
|
||||
export enum EventType {
|
||||
// 现有类型...
|
||||
NEW_EVENT = "new_event" // 新增事件类型
|
||||
}
|
||||
```
|
||||
|
||||
2. **更新EventConfig配置**:
|
||||
```typescript
|
||||
export const EventConfig = {
|
||||
// 现有配置...
|
||||
[EventType.NEW_EVENT]: {
|
||||
description: "新事件描述",
|
||||
probability: 0.15, // 新事件概率
|
||||
effect: "新事件效果"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
3. **在事件处理函数中添加逻辑**:
|
||||
```typescript
|
||||
private processRandomEvent() {
|
||||
switch (this.currentEvent) {
|
||||
// 现有事件处理...
|
||||
case EventType.NEW_EVENT:
|
||||
// 实现新事件逻辑
|
||||
break;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 调整难度曲线
|
||||
|
||||
可以通过修改以下参数来调整难度曲线:
|
||||
|
||||
1. **基础倍率调整**:
|
||||
```typescript
|
||||
// 修改 StageConfigRules 中的怪物配置
|
||||
[StageType.NORMAL]: {
|
||||
monsters: [
|
||||
{ type: MonsterType.NORMAL, count: 3, minCount: 2, maxCount: 6 }
|
||||
// count: 基础数量
|
||||
// minCount/maxCount: 数量范围限制
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
2. **强度倍率系数**:
|
||||
```typescript
|
||||
// 修改 calculateMonsterStrengthMultiplier 函数
|
||||
const stageMultiplier = 1 + (stageNumber - 1) * 0.15; // 增加每关倍率
|
||||
const levelMultiplier = 1 + (level - 1) * 0.08; // 增加每级倍率
|
||||
```
|
||||
|
||||
### 平衡精英/Boss关卡
|
||||
|
||||
1. **调整精英怪物配置**:
|
||||
```typescript
|
||||
export const EliteMonsterList = [
|
||||
5201, // 兽人战士
|
||||
5202, // 兽人刺客
|
||||
5203, // 兽人护卫
|
||||
// 添加更多精英怪物
|
||||
5204, // 新精英怪物
|
||||
5205 // 更强精英怪物
|
||||
];
|
||||
```
|
||||
|
||||
2. **优化Boss关卡配置**:
|
||||
```typescript
|
||||
[StageType.BOSS]: {
|
||||
description: "Boss关卡",
|
||||
monsters: [
|
||||
{ type: MonsterType.BOSS, count: 1, minCount: 1, maxCount: 1 },
|
||||
{ type: MonsterType.ELITE, count: 3, minCount: 2, maxCount: 4 }, // 增加精英数量
|
||||
{ type: MonsterType.NORMAL, count: 4, minCount: 2, maxCount: 6 } // 增加普通怪物
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
### 自定义怪物池
|
||||
|
||||
如果需要添加特定类型的怪物:
|
||||
|
||||
1. **扩展怪物池**:
|
||||
```typescript
|
||||
// 在 RogueConfig.ts 中
|
||||
export const CustomMonsterList = [
|
||||
5301, // 自定义怪物1
|
||||
5302, // 自定义怪物2
|
||||
5303 // 自定义怪物3
|
||||
];
|
||||
```
|
||||
|
||||
2. **在 getMonsterUUIDsByType 中添加分支**:
|
||||
```typescript
|
||||
case MonsterType.CUSTOM:
|
||||
return CustomMonsterList;
|
||||
```
|
||||
|
||||
## 性能优化建议
|
||||
|
||||
### 怪物生成优化
|
||||
|
||||
1. **批量生成**:使用对象池减少频繁的实例化
|
||||
2. **延迟加载**:怪物资源按需加载
|
||||
3. **队列管理**:合理控制生成频率避免性能峰值
|
||||
|
||||
### 内存管理
|
||||
|
||||
1. **及时清理**:战斗结束后立即清理怪物实体
|
||||
2. **资源卸载**:不再需要的资源及时卸载
|
||||
3. **缓存策略**:合理缓存常用的配置数据
|
||||
|
||||
### 配置优化
|
||||
|
||||
1. **预计算**:将静态配置在启动时预计算
|
||||
2. **分层加载**:按关卡需求分层加载配置
|
||||
3. **压缩存储**:使用紧凑的数据结构存储配置
|
||||
|
||||
## 总结
|
||||
|
||||
肉鸽关卡配置系统是一个设计精良的程序化关卡生成框架,具有以下核心优势:
|
||||
|
||||
### 技术亮点
|
||||
|
||||
- **模块化设计**:清晰的职责分离和接口定义
|
||||
- **可扩展性**:易于添加新类型和调整配置
|
||||
- **性能优化**:合理的算法设计和资源管理
|
||||
- **用户体验**:平衡的难度曲线和多样化的游戏体验
|
||||
|
||||
### 应用价值
|
||||
|
||||
该系统不仅适用于Roguelike游戏,也可作为其他类型游戏关卡生成的基础框架。其程序化的设计理念和灵活的配置机制为游戏开发提供了强大的工具支持。
|
||||
|
||||
通过深入理解和合理运用这套系统,开发者可以创造出具有深度策略性和持续挑战性的游戏体验,为玩家提供持久的游戏乐趣。
|
||||
342
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/随机事件系统.md
Normal file
342
.qoder/repowiki/zh/content/地图系统/肉鸽关卡配置/随机事件系统.md
Normal file
@@ -0,0 +1,342 @@
|
||||
# 随机事件系统
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts)
|
||||
- [GameEvent.ts](file://assets/script/game/common/config/GameEvent.ts)
|
||||
- [HeroAttrs.ts](file://assets/script/game/common/config/HeroAttrs.ts)
|
||||
- [GameUIConfig.ts](file://assets/script/game/common/config/GameUIConfig.ts)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [概述](#概述)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概览](#架构概览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 概述
|
||||
|
||||
随机事件系统是肉鸽模式(Roguelike)游戏的核心机制之一,它为玩家提供了不可预测的游戏体验。本文档详细分析了RogueConfig.ts中实现的随机事件机制,包括事件类型定义、概率配置、触发逻辑以及与游戏流程的集成方式。
|
||||
|
||||
该系统通过EventType枚举定义了四种基本事件类型:宝箱事件(Treasure)、陷阱事件(Trap)、增益事件(Buff)和减益事件(Debuff),并通过EventConfig配置对象实现了灵活的概率控制和效果描述。
|
||||
|
||||
## 项目结构
|
||||
|
||||
随机事件系统的核心文件位于游戏的地图模块中,主要包含以下关键组件:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "随机事件系统架构"
|
||||
RogueConfig["RogueConfig.ts<br/>核心配置与算法"]
|
||||
MissionMonComp["MissionMonComp.ts<br/>事件处理控制器"]
|
||||
GameEvent["GameEvent.ts<br/>事件通信系统"]
|
||||
HeroAttrs["HeroAttrs.ts<br/>属性系统"]
|
||||
end
|
||||
subgraph "UI反馈系统"
|
||||
GameUIConfig["GameUIConfig.ts<br/>界面配置"]
|
||||
MessageSystem["消息系统"]
|
||||
end
|
||||
RogueConfig --> MissionMonComp
|
||||
MissionMonComp --> GameEvent
|
||||
MissionMonComp --> HeroAttrs
|
||||
GameEvent --> MessageSystem
|
||||
MessageSystem --> GameUIConfig
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L311)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L240)
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L50)
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L30)
|
||||
|
||||
## 核心组件
|
||||
|
||||
### EventType枚举定义
|
||||
|
||||
系统定义了四种基本的随机事件类型,每种类型都有明确的业务含义:
|
||||
|
||||
| 事件类型 | 描述 | 业务含义 |
|
||||
|---------|------|----------|
|
||||
| TREASURE | 宝箱事件 | 提供额外奖励,增加玩家收益 |
|
||||
| TRAP | 陷阱事件 | 造成伤害,增加游戏风险 |
|
||||
| BUFF | 增益事件 | 提供临时能力提升,改善玩家状态 |
|
||||
| DEBUFF | 减益事件 | 降低玩家能力,增加挑战难度 |
|
||||
|
||||
### EventConfig配置对象
|
||||
|
||||
每个事件类型都通过EventConfig对象进行详细配置,包含触发概率和效果描述:
|
||||
|
||||
| 配置项 | 宝箱事件 | 陷阱事件 | 增益事件 | 减益事件 |
|
||||
|--------|----------|----------|----------|----------|
|
||||
| 触发概率 | 30% | 25% | 25% | 20% |
|
||||
| 效果描述 | 获得额外奖励 | 受到一定伤害 | 获得临时增益效果 | 受到临时减益效果 |
|
||||
|
||||
### StageType事件关卡
|
||||
|
||||
事件关卡(StageType.EVENT)作为特殊的关卡类型,具有独特的触发条件和游戏流程融合方式。
|
||||
|
||||
**章节来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L40-L85)
|
||||
|
||||
## 架构概览
|
||||
|
||||
随机事件系统采用分层架构设计,确保了良好的模块化和可扩展性:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Player as "玩家"
|
||||
participant MissionComp as "MissionMonComp"
|
||||
participant RogueConfig as "RogueConfig"
|
||||
participant GameEvent as "GameEvent系统"
|
||||
participant UI as "UI反馈"
|
||||
Player->>MissionComp : 进入关卡
|
||||
MissionComp->>RogueConfig : getStageType()
|
||||
RogueConfig-->>MissionComp : 返回关卡类型
|
||||
MissionComp->>RogueConfig : getRandomEvent()
|
||||
RogueConfig-->>MissionComp : 返回事件类型
|
||||
MissionComp->>MissionComp : processRandomEvent()
|
||||
MissionComp->>GameEvent : 触发事件
|
||||
GameEvent->>UI : 显示事件效果
|
||||
Note over Player,UI : 随机事件处理流程
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L136)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L280-L311)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### getRandomEvent函数实现
|
||||
|
||||
getRandomEvent函数是随机事件系统的核心算法,基于累积概率算法实现加权随机选择:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始随机事件选择]) --> InitRandom["生成随机数<br/>random = Math.random()"]
|
||||
InitRandom --> ResetCumulative["重置累积概率<br/>cumulativeProbability = 0"]
|
||||
ResetCumulative --> LoopEvents["遍历EventConfig中的事件类型"]
|
||||
LoopEvents --> AddProbability["累积概率<br/>cumulativeProbability += probability"]
|
||||
AddProbability --> CheckCondition{"random <= cumulativeProbability?"}
|
||||
CheckCondition --> |是| ReturnEvent["返回事件类型"]
|
||||
CheckCondition --> |否| NextEvent["检查下一个事件"]
|
||||
NextEvent --> LoopEvents
|
||||
ReturnEvent --> End([结束])
|
||||
style Start fill:#e1f5fe
|
||||
style End fill:#e8f5e8
|
||||
style ReturnEvent fill:#fff3e0
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L280-L311)
|
||||
|
||||
该算法的关键特性:
|
||||
- **累积概率计算**:通过逐步累加各事件的概率,实现加权随机选择
|
||||
- **边界条件处理**:确保所有事件都有被选中的机会
|
||||
- **性能优化**:O(n)时间复杂度,其中n为事件类型数量
|
||||
|
||||
### getStageType关卡类型判断
|
||||
|
||||
关卡类型判断逻辑实现了复杂的触发条件:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([开始关卡类型判断]) --> CheckStageNumber{"stageNumber % 5 == 0?"}
|
||||
CheckStageNumber --> |是| CheckLevel{"level == 3?"}
|
||||
CheckLevel --> |是| ReturnEvent["返回EVENT类型"]
|
||||
CheckLevel --> |否| ContinueCheck["继续检查"]
|
||||
CheckStageNumber --> |否| CheckTen{"stageNumber % 10 == 0?"}
|
||||
CheckTen --> |是| CheckTenLevel{"level == 5?"}
|
||||
CheckTenLevel --> |是| ReturnBoss["返回BOSS类型"]
|
||||
CheckTenLevel --> |否| CheckFour{"level == 4?"}
|
||||
CheckFour --> |是| ReturnElite["返回ELITE类型"]
|
||||
CheckFour --> |否| ReturnNormal["返回NORMAL类型"]
|
||||
CheckTen --> |否| CheckOneToNine{"1 <= stageNumber <= 9?"}
|
||||
CheckOneToNine --> |是| CheckFive{"level == 5?"}
|
||||
CheckFive --> |是| ReturnElite2["返回ELITE类型"]
|
||||
CheckFive --> |否| ReturnNormal2["返回NORMAL类型"]
|
||||
ContinueCheck --> CheckTen
|
||||
ReturnEvent --> End([结束])
|
||||
ReturnBoss --> End
|
||||
ReturnElite --> End
|
||||
ReturnNormal --> End
|
||||
ReturnElite2 --> End
|
||||
ReturnNormal2 --> End
|
||||
style Start fill:#e1f5fe
|
||||
style End fill:#e8f5e8
|
||||
style ReturnEvent fill:#fff3e0
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L140-L170)
|
||||
|
||||
### 事件处理流程
|
||||
|
||||
事件处理通过MissionMonComp组件实现,包含完整的生命周期管理:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class MissionMonComp {
|
||||
-currentEvent : EventType | null
|
||||
-eventProcessed : boolean
|
||||
+do_mon_wave() : void
|
||||
+processRandomEvent() : void
|
||||
-generateMonstersFromStageConfig() : void
|
||||
-addToStageSpawnQueue() : void
|
||||
}
|
||||
class EventType {
|
||||
<<enumeration>>
|
||||
TREASURE
|
||||
TRAP
|
||||
BUFF
|
||||
DEBUFF
|
||||
}
|
||||
class RogueConfig {
|
||||
+getRandomEvent() : EventType | null
|
||||
+getStageType() : StageType
|
||||
+calculateMonsterCount() : number
|
||||
+calculateMonsterStrengthMultiplier() : number
|
||||
}
|
||||
MissionMonComp --> EventType : "使用"
|
||||
MissionMonComp --> RogueConfig : "调用"
|
||||
RogueConfig --> EventType : "返回"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L15-L35)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L40-L85)
|
||||
|
||||
**章节来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L102-L169)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L280-L311)
|
||||
|
||||
## 依赖关系分析
|
||||
|
||||
随机事件系统的依赖关系体现了清晰的分层架构:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "外部依赖"
|
||||
ECS[ECS框架]
|
||||
OopsFramework[Oops Framework]
|
||||
GameEngine[Cocos Creator引擎]
|
||||
end
|
||||
subgraph "核心模块"
|
||||
RogueConfig[RogueConfig.ts]
|
||||
MissionMonComp[MissionMonComp.ts]
|
||||
GameEvent[GameEvent.ts]
|
||||
end
|
||||
subgraph "配置模块"
|
||||
HeroAttrs[HeroAttrs.ts]
|
||||
GameUIConfig[GameUIConfig.ts]
|
||||
end
|
||||
ECS --> MissionMonComp
|
||||
OopsFramework --> GameEvent
|
||||
GameEngine --> ECS
|
||||
RogueConfig --> MissionMonComp
|
||||
MissionMonComp --> GameEvent
|
||||
GameEvent --> GameUIConfig
|
||||
HeroAttrs --> MissionMonComp
|
||||
style RogueConfig fill:#e3f2fd
|
||||
style MissionMonComp fill:#f3e5f5
|
||||
style GameEvent fill:#e8f5e8
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L15)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L20)
|
||||
|
||||
**章节来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L1-L20)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L1-L20)
|
||||
|
||||
## 性能考虑
|
||||
|
||||
随机事件系统在设计时充分考虑了性能优化:
|
||||
|
||||
### 算法复杂度分析
|
||||
- **getRandomEvent函数**:O(n)时间复杂度,其中n为事件类型数量
|
||||
- **getStageType函数**:O(1)时间复杂度,固定条件判断
|
||||
- **事件处理**:单次事件处理时间复杂度为O(1)
|
||||
|
||||
### 内存使用优化
|
||||
- 事件配置采用静态常量定义,避免运行时内存分配
|
||||
- 事件类型使用枚举,减少字符串比较开销
|
||||
- 事件状态管理简洁,避免不必要的状态保存
|
||||
|
||||
### 扩展性设计
|
||||
- 新增事件类型只需修改EventType枚举和EventConfig配置
|
||||
- 事件效果处理采用switch语句,便于添加新的处理逻辑
|
||||
- 关卡类型判断逻辑支持未来扩展新的触发条件
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 事件触发概率异常
|
||||
**问题描述**:事件触发概率不符合预期
|
||||
**可能原因**:
|
||||
- EventConfig中的概率设置错误
|
||||
- 累积概率计算逻辑异常
|
||||
|
||||
**解决方案**:
|
||||
1. 检查EventConfig中各事件的概率总和是否为1
|
||||
2. 验证getRandomEvent函数的累积概率计算逻辑
|
||||
3. 添加调试日志输出随机数和累积概率值
|
||||
|
||||
#### 事件关卡触发时机错误
|
||||
**问题描述**:事件关卡在非预期关卡触发
|
||||
**可能原因**:
|
||||
- getStageType函数的关卡判断逻辑错误
|
||||
- 关卡参数传递不正确
|
||||
|
||||
**解决方案**:
|
||||
1. 检查关卡号和等级参数的传递
|
||||
2. 验证getStageType函数中的模运算逻辑
|
||||
3. 添加关卡类型判断的日志输出
|
||||
|
||||
#### 事件效果未生效
|
||||
**问题描述**:事件发生但效果未体现
|
||||
**可能原因**:
|
||||
- 事件处理逻辑缺失
|
||||
- UI反馈未正确触发
|
||||
|
||||
**解决方案**:
|
||||
1. 检查MissionMonComp中的processRandomEvent函数
|
||||
2. 验证GameEvent系统的事件分发机制
|
||||
3. 确认UI层的消息接收和处理逻辑
|
||||
|
||||
**章节来源**
|
||||
- [MissionMonComp.ts](file://assets/script/game/map/MissionMonComp.ts#L120-L169)
|
||||
- [RogueConfig.ts](file://assets/script/game/map/RogueConfig.ts#L280-L311)
|
||||
|
||||
## 结论
|
||||
|
||||
随机事件系统通过精心设计的架构和算法,为肉鸽模式游戏提供了丰富且可控的随机体验。系统的主要优势包括:
|
||||
|
||||
### 设计优势
|
||||
- **模块化架构**:清晰的职责分离,便于维护和扩展
|
||||
- **灵活的概率控制**:支持动态调整事件触发概率
|
||||
- **完善的事件处理**:从触发到效果呈现的完整流程
|
||||
- **良好的性能表现**:高效的算法实现和内存使用
|
||||
|
||||
### 扩展建议
|
||||
1. **新增事件类型**:可以轻松添加复活、传送等新事件类型
|
||||
2. **概率动态调整**:可以根据游戏进程动态调整事件概率
|
||||
3. **事件效果增强**:支持更复杂的事件效果和组合效果
|
||||
4. **UI反馈完善**:集成更丰富的视觉和音效反馈
|
||||
|
||||
### 最佳实践
|
||||
- 保持事件概率的平衡性,避免过于极端的结果
|
||||
- 提供清晰的事件效果说明,帮助玩家理解游戏机制
|
||||
- 实现事件历史记录功能,增加游戏的策略深度
|
||||
- 建立完善的测试机制,确保事件系统的稳定性
|
||||
|
||||
该随机事件系统为肉鸽游戏提供了坚实的基础,通过合理的扩展和优化,可以进一步提升游戏的趣味性和挑战性。
|
||||
Reference in New Issue
Block a user