pygame迷宫生成

本文介绍了如何使用pygame库和深度优先搜索算法设计一个Python迷宫游戏。游戏包括随机生成迷宫、玩家及系统(基于A*算法)行走模式,以及友好的图形界面。深度遍历算法确保生成的迷宫具有主路和扭曲路线,同时提供详细的设计过程和关键代码实现。

一.预习内容:


项目分析
       一个完整的迷宫,需要能够实现产生不同路径供玩家游戏,同时需要能够记录玩家所走过的路,避免由于迷宫的范围太大而导致无法走到最后的结尾。迷宫本身也应该自带友好的交互功能,可以让玩家可以根据提示获得愉快的游戏体验。

实验目标
1.随机生成一个迷宫,并且求解迷宫。
2.要求游戏支持玩家走迷宫,和系统走迷宫路径两种模式。玩家走迷宫,通过键盘方向键控制,并在行走路径上留下痕迹;系统走迷宫路径要求基于A*算法实现,输出走迷宫的最优路径并显示。
3.设计交互友好的游戏图形界面。
 

二.算法设计


深度遍历算法生成迷宫路径
1、整体思路
     1)利用深度遍历的思想。访问到一个节点时,搜索这个节点没有被访问过的相邻节点,选择一个继续做同样的操作,直到没有邻节点为止再回溯到上一个访问的节点,并选择另外的邻节点。
     2)这种方案生成的迷宫会有一条明显的主路,这条主路特别长,贯穿大部分区域的路线,同时,迷宫的路线一般比较扭曲。这种采用深度优先算法(递归回溯算法)生成的迷宫称之为“主路扭曲型”迷宫

2、设计过程
(1)把数组地图初始化为如下结构。选择一个靠近边缘的1作为起点,在它的周围随机找另一个黄色的1(这里的“周围”指的是上下左右4个方向)。找到就把他们联通,并且把两个1之间的0(灰色墙)也变成通路,这里用红色来表示。


(2)选择一个靠近边缘的1作为起点,在它的周围随机找另一个黄色的1(这里的“周围”指的是上下左右4个方向)。找到就把他们联通,并且把两个1之间的0(灰色墙)也变成通路,这里用红色来表示。

 

 (3)把上一步”终点”的格子作为新的一个“起点”格子,不断循环第2步的过程……
直到,找不到周围有黄色的1,就回溯,回到之前的位置,看看周围是否有黄色的1,如果有,就按照2步骤,不断将黄色1变联通,接下来就是不停地重复上面的步骤,找到就联通,找不到就往回走。


(4)遍历完所有的点即可生成一个迷宫,然后再选择出口与入口,一个完整的迷宫就形成了。

1.整体框架结构

通过二维数组生成迷宫坐标,参考教程使用深度优先算法的递归回溯算法完成对迷宫的随机生成,不断随机访问每一个相邻格子,记录访问路径,最后将网格按访问路径擦除,玩家按照访问路径实现迷宫中的行走。

2.关键代码

(1)递归回溯算法

递归回溯是一个深度优先算法,如果当前单元有相邻的未访问过的迷宫单元,就一直向前搜索,直到当前单元没有未访问过的迷宫单元,才返回查找之前搜索路径上未访问的迷宫单元,所以用堆栈来维护已访问过的迷宫单位。

算法主循环,重复下面步骤2直到堆栈为空:

1 随机选择一个迷宫单元作为起点,加入堆栈并标记为已访问

2 当堆栈非空时,从栈顶获取一个迷宫单元(不用出栈),进行循环

如果当前迷宫单元有未被访问过的相邻迷宫单元

随机选择一个未访问的相邻迷宫单元

去掉当前迷宫单元与相邻迷宫单元之间的墙

标记相邻迷宫单元为已访问,并将它加入堆栈

否则,当前迷宫单元没有未访问的相邻迷宫单元

则栈顶的迷宫单元出栈

(2)墙体绘制

(3)玩家设计

 此处设计了两个玩家,为对抗方式,先到达对方生成点者获胜(自己的出口)

迷宫运行界面如下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值