[Algorithm]Maze Prim算法与A*寻路算法(中)

本文主要讲解Maze Prim算法的实现过程,包括算法的基本思路、关键步骤以及C#代码实现。通过随机选择节点并打通相邻墙来创建迷宫,详细介绍了如何初始化迷宫、更新节点状态以及核心的RandomPrim算法。同时,文章提供源码下载链接以供参考。
摘要由CSDN通过智能技术生成

附上全文连接:
[Algorithm]Maze Prim算法与A*寻路算法(上)
[Algorithm]Maze Prim算法与A*寻路算法(中)
[Algorithm]Maze Prim算法与A*寻路算法(下)

文章中的所有源码下载链接附在“[Algorithm]Maze Prim算法与A*寻路算法(上) ”文章中。

上一篇中大致讲了下内容,接下来将要讲的是Maze Prim算法。
先附上一段Wiki的讲解:https://en.wikipedia.org/wiki/Maze_generation_algorithm#Randomized_Prim.27s_algorithm

其实算法是思路很简单就是不断的找墙拆墙的过程。大致流程如下:
1. 让迷宫所有节点均为墙,即没有路可走。
2. 选择一个偶数列和偶数行的节点设置为通路,然后把它的邻节点(邻墙)(上下左右,不要斜对角的=。=)存入邻节点列表中。
3. 如果邻节点列表中有数据,则执行以下循环。
——1. 从列表中随机选择一个邻节点,如果它相对与对应通路节点的对面节点不是通路的话,则执行以下循环。
————1.把该节点和对面节点设置为通路。
————2.把对面节点的邻节点加入列表。
——2.如果对面的节点已经是通路,则将其移除列表。

程序的大致流程如上,接下来就源码讲解,因为C# 控制台的版本可以直接运行,则以这个工程讲解。
“MazeCSharpTest”工程中只用看“Program.cs”即可,所有实现均在这个文件中。

需要定义节点类型枚举“WallType”和节点信息类“WallInfo”。

public enum WallType
{
  None = 0,

  Up = 1,
  Down = 2,
  Left = 4,
  Right = 8,

  UpDown = 3,
  LeftRight = 12,

  LeftUp = 5,
  LeftDown = 6,
  RightUp = 9,
  RightDown = 10,

  LeftUpRight = 13,
  UpRightDown = 11,
  RigthDownLeft = 14,
  DownLeftUp = 7,

  LeftUpRightDown = 15
}

public class WallInfo
{
    public int x = -1;
    public int y = -1;

    /// <summary>
    /// 是否有墙
    /// </summary>
    public bool hasWall = true;

    /// <summary>
    /// 是否是寻路路径点
    /// </summary>
    public bool isFindRoad = false;

    /// <summary>
    /// 墙的类型
    /// </summary>
    public WallType type = WallType.None;

    /// <summary>
    /// 状态
    /// </summary>
    public int flag = 0;

    public void Set(int x, int y, bool hasWall = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值