Skip to content

Latest commit

 

History

155 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

随机迷宫生成器

随机迷宫生成器包括四个模块

迷宫生成器

提供多种形状的迷宫场的数据结构

由(统一的)随机迷宫生成器生成不同的迷宫

public class MazeGenerator
{
    // 同步函数
    public MazeField Generate(MazeField field, EMazeAlgorithm algorithm);
    // 异步函数
    public async Task<MazeField> GenerateAsync(MazeField field, EMazeAlgorithm algorithm)
}

参数

  • field 迷宫场数据
  • algorithm 生成算法
    • DFS
    • BFS
    • Prim
    • Kruskal
    • Wilson
    • Eller
    • Aldous-Broder
    • Hunt and Kill

每种形状都有多种算法

算法 迷宫风格 随机偏差 死胡同特征 速度 内存占用 稳定性
DFS 长通道、少分支 强(方向偏好) 少而深 ⚡⚡快 ✅ 稳> 定
BFS 短通道、多分支 轻(径向偏好) 多而浅 ⚡⚡快 ✅ 稳> 定
Prim 珊瑚状生长 轻(扩散偏好) 多而浅 ⚡⚡快 较高 ✅ 稳定
Kruskal 均匀纹理 均匀 ⚡⚡快 较高 ✅ 稳定
Wilson 完全随机 无(均匀) 均匀 🐢不可预测 ❌ 不稳定
Eller 层状结构 强(水平偏好) 中等 ⚡⚡快 极低 ✅ 稳定
Aldous-Broder 完全随机 无(均匀) 均匀 🐢🐢极慢 ❌ 极> 不稳定
Hunt and Kill 长通道+岛屿式分支 轻(索引偏好) 中等,集中在跳跃> 点 ⚡中等 极低 ✅ 稳定

各算法生成迷宫的特征及性能对比的详情,请看这里

需要特别强调的是:Eller 算法是基于行扫描的,不支持六边形和圆三角格两种形状。当选择用 Eller 算法生成这两种形状的迷宫时,会退化为 DFS 算法。

示例

var field = new CircularMazeField(17, 100);
var field = generator.Generate(field, MazeAlgorithm.Kruskal);

出入口生成器

为各种形状的迷宫生成随机出入口

public class MazeGateGenerator
{
    // 创建迷宫出入口(同步)
    public MazeGate Generate(MazeField field);
    // 创建迷宫出入口(异步)
    public async Task<MazeGate> GenerateAsync(MazeField field)
}

Note

无论哪种形状的迷宫,出入口都只会出现在处于迷宫边缘的格子上。但不同形状的迷宫又略微有一些差异

迷宫形状 出入口位置
矩形迷宫 矩形的对边
圆形迷宫 同直径的两端
蜂窝迷宫 蜂窝(六边形)的对边
三角形迷宫 不同边
六边形迷宫 六边形的对边
圆三角格迷宫 同直径的两端
阶梯形迷宫 入口在直角点,出口在顶点
自定义迷宫 迷宫边缘

解法生成器

在各种形状的迷宫的出入口之间,计算出有效路径

public class MazeSolutionGenerator
{
    // 根据迷宫和出入口数据,计算迷宫解法
    public MazeSolution Generate(MazeField field, MazeGate gate);
}

示例

var generator = new MazeSolutionGenerator();
var solution = generator.Generate(field, gate);

质量评估器

根据迷宫、出入口、解法,评估迷宫的质量

public class MazeScoreEvaluator
{
    // 评估迷宫质量(同步)
    public static MazeScore Evaluate(MazeField field, MazeGate gate, MazeSolution solution);
    // 评估迷宫质量(异步)
    public static async Task<MazeScore> EvaluateAsync(MazeField field, MazeGate gate, MazeSolution solution)
}

About

基于.Net的随机迷宫生成器,包括迷宫生成器、出入口生成器、解法生成器和质量评估器4个模块

Resources

Stars

4 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages