资源描述:
《瑙器污'动卜》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、⋯口⋯一智实用第慧密集⋯⋯,⋯⋯沪摘要介,。绍了一种随机生成二维迷宫的方法并用编程实现关,键词迷宫,,、、、玩过游戏的朋友一定遇到过各种各样的迷宫,迷宫后点就从迷宫的起点开始移动上下左右方向、、、,、道路错综复杂,千变,,分别由数值表示每走一步的方向由随机数万化如《仙剑奇侠传》那么这些迷宫、、。,,是怎样生成的呢生成迷宫的算法又是什么呢下面就给出一决定如果有路可走即前进方向的块的数值为零,二,。个随机生成二维迷宫的方法,并用编程实现。则前进到新的块并令将赋值给新块如果四周均,。一处,、已无路可走四周无数值为零的变量则退回到一随机生成迷宫的方法。一。一,寻找四
2、周的变量还有没有路可走代表来时的路,迷宫的本质就是一幅地图因此程序的核心问题就是如何如找到,则。二,一,并且退回先前位置,继续找路前进,否生成。,生成地图的框架,即定。,,一幅二维地图步骤如下首先则便结束算法如果点已经到达终点同样会结束算,,义地图的大小得到地图的外围边界其次在图中生成一条法。图表示了,由图中的阴一条按此算法随机生成的通路,,连接起点和终点的通路保证玩家可以走出迷宫然后保证影方块表示,方块为起点,,方块为终点,,,地图的强连通性在图中尽可能多地生成一些围墙构成多条,数值相差为的方块连,按数值递增的顺序,从编通“”,,。死路用于迷惑玩家最后用连
3、线的方法画出迷宫下号为的方块到编号为的方块,恰好。生成一条通路。面分别介绍各步骤的实现方法生成地图的框架普通的地图都是按块来划分的,定义一个平面地图的大小其实只需定义一个二维数组即可,比如说定义一个的地图,那,么就得定义一个【【的数组数组的数据表示地图中的块,,所再加上地图的边界以一个声的地图由’,如图。个块构成所示为图中每个块圈随机生成的通路斌一个数值,表示块与块之间是否连通。外围的块赋值为保证地图的强连通性,,,。表示地图的边界中间的块赋值为表示初始状态当生成一条由起点到终点的随机路线后,地图上仍有封闭,“”,,‘二占二孟二几己一一。。一一。的区域为了尽
4、可能多地生成一些死路用于迷惑玩家一一。,,日一︸﹄一︵一肠甘︵一工需要生成强连通图强连通图的概念是在一个有向图中一’对于的任意两个不同的顶点和,都存在从到以及一。因此,需,从到的路径要遍历地图上所有未赋值的点一,,一··。一一一随机地为这些点赋值生成更多的路线注意赋值应大于口以,以便区分上一步得到的那些表示通路的块,如图所圈地圈模块设尔。生成一条连接起点和终点的通路如图所示,编号为的块表,示迷宫的起点编号为的块表示迷宫的终点,即玩家需要从地图的右下方走到左上方。设起点的,,,,,坐标是终点的坐标是表示一个在图中移动的点,,的初始值等于起点坐标,即二,二,代表
5、点,移动的步数,初始值为,然图生成强连通路污‘瑙器动卜沪二⋯⋯实用第一智慧密集示右、下、、上。生,左方向和垂直方向的围墙赋值成迷宫后把表示迷宫的图形二二一二,《》《存储为类型的文件画文件是徽软公二二一二《”《司,开发的一种犯位扩展图元文件格式扩展名为,,,得到新点《拟该点是随机产生的不一定是连通点。·本程序用到的操作文件的函数有二,,,叮,《【【联】二,,,,。当》走不通时继续找可以连通的点关于这些函数的用法请参考《》在此不再详述实现王的代码如下门二众二《二一《二二《《》一二一娜二一切二目,切是起点坐你标,更新移动点的坐标增加步数的值二『《‘尸,二民,‘将狱
6、值于新位,》得到文件的句柄,’’保存迷宫的圈形,一,如果没有连通点则退回到处寻找日二,恻泛初始化水平方向的圈幼四周的变份还有没有路可走切四勺一,初始化垂直方向的圈墙《且二二《二】【】二《二二一《二二众《二一二《日二,功四川,迷宫的边缘要画线表示有圈墙一《【】【众】》《,,气泊,尹》》筑二众【《,,,,《,,,》《二一,引处也无路可走便结束算法《,,,》日二,,,,,,咭以上几句画出迷宫的外围·甄下面的二重循环根据数组表示的迷宫中各块的连通函数,,用于初始化迷宫中的围情况画出迷宫内部的围墙代码如下《二,协白爪二《日七二一二一,二妇二‘千二】》二妇阴川,,一,·
7、为二维数组分配内存《,,》二》功四日】一】》切四日一】二川城,妇‘,·数组初始值为表示尚无围墙】一】川妇‘《二一二】小】川函数,用于初始化迷宫,为迷宫中水平娜