Pygame简单深度优先算法生成迷宫

学习路径计算之前需要一个场景,网上查了下迷宫生成方法花了点时间写了个简单的迷宫生成器
基本原理十分简单:
使用2维矩阵表示迷宫,每一个节点有四面墙,使用深度搜索,随机顺序向四个方向移动,,如果遇到已到节点则停止该方向,没有走过则把两个节点之间的墙消除掉。这样可以保证每一个节点都可以覆盖到而且每一个节点都会有一条路通向出口。

简单的算法有一个很明显的缺点:每一个节点只有一条固定的路,不会有多条路通向某个节点。


深度搜索使用递归十分简洁,不赘述。
具体实现比较容易受坑的地方是如何简洁实现上下左右随机移动,消除墙壁,并且不用一千个if:
首先是方向表示,这里使用了一个列表:
directions = [[0,-1],[1,0],[0,1],[-1,0]]
分别表示上右下左
对[0,1,2,3]使用random.shuffle()函数,然后对这个列表进行遍历可以实现随机获取上下左右矢量
每一个节点有四面墙壁,使用[0,0,0,0]表达,序列方向与上面direction相同。
在消除一个节点之间的墙壁的时候需要消除上一个墙壁对立面的节点
还是对方向进行操作direction[i]表达了方向矢量,在这里加号是右移,右移一位的时候是顺时针旋转45度,向左移1位则是旋转逆时针45度
数字i右移2位并投影到0-3上则可以实现方向对调。
简单来说就是进行右移并除余
每次搜索的时候如果遇到之前已访问节点则退出函数,函数中记录已覆盖节点,如果达到节点总数则直接退出
运行效果如下:
可以看到递归深度优先的算法的特点:在一条路走到最后之后会返回到上一个节点

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值