经验分享:三套简单的迷宫地图生成方案

转自:http://www.gameres.com/754927.html

概述:文章基于一种基础的地图,来讨论三套不同的地图生成方案。

文章不会出现跟代码相关的内容,会以较为通俗的语句和不少简单的示意图来表示迷宫的生成方案。其中不少方法来自于游戏界前辈,我根据自己的基础地图做了不少修正(毕竟迷宫和地图的形式多种多样,适合自己游戏的才是最好的)。

根据方案生成地图之后,还可以加上一些静态分布来丰富地图表现,大家就自行发挥啦!

地图基础

地图的形式很多,这里我使用的地图是以tile块为单位分割的地图,地图上的tile块形式很多,但主要分成三种:

A:陆地,可以在上面分布一些角色啦物件啦;

B:过渡,根据物理框可以在上面移动,不过一般不会分布物件;

C:水域,不可移动的区域,可以理解成为迷宫的“墙”;

在后文的迷宫生成方案里,会以水域作为分割,主要围绕陆地的分布来设计迷宫,过渡的地块根据游戏实际需要再去生成。如果你不希望地图用水域来分割,那只需要把水域改成传统的墙壁即可。

本文用来展示的地图,面积都比较小,方便表达迷宫的生成规则。在实际游戏制作时,按需求去铺量就行。

方案一:主路扭曲型

1、首先,按照下图的间隔规则来生成基础的大地图,1为陆地,0为水域。

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

3、把上一步“终”的格子作为新的一个“起”格子,不停循环第二步的过程,直到找不到周围有黄色的1。

4、这时候,原路往回走(即不停去找前一个格子),直到找到一个格子,这个格子周围有黄色的1,那么从这个格子开始重复前两个步骤。

5、接下来就是不停重复上面的步骤,找到就联通,找不到就往回走。

6、填充完整个地图之后,迷宫就算是制作完成了,根据需求加上终点即可。

总结一下,这种方案生成的迷宫会有一条明显的主路,即一条特别长、贯穿大部分区域的路线,同时,迷宫的路线一般比较扭曲。

方案二:自然分岔型

这个方案的雏形来自于随机prim算法,具体步骤如下:

1、跟方案一一样,生成一个基础地图。格子先用黄色1和灰色0来表示,暂时不区分水陆。

2、随机取一个地图边缘的黄色1,把它标记为红色1,即变成陆地。然后把它旁边的灰色0标记成蓝色0,表示“待定”。(注意的是,大地图四周的灰色0固定不变,作为地图边缘而存在)

3、敲黑板了!!这里是重点!!!

随机选一个蓝色的0(这一步很重要,会使这个方案明显区别于上一个方案),然后看红色1隔着这个蓝色0对面的格子,是否是黄色的1:

  • 如果是,则把对面的黄色1标记成红色1,即变成陆地,然后把蓝色0变成红色的0,即也变成陆地;
  • 如果不是,就把这个蓝色的0变成灰色的0。

最后,把新创建的红色1周围的灰色0,标记成蓝色0。

4、继续重复上面的步骤

5、对比上图和下图,这里取一个蓝色0生成一个红色1之后,新生成的红色1旁边,有两个蓝色0的两边都是红色1了,那么就根据第三步的规则,在稍后取到这些蓝色0时,就会把他们变成灰色0。

6、继续重复上述步骤,直到整个地图没有蓝色0了,地图就生成完毕。

总结一下,对比方案一,这套方案不会出现明显的主路,迷宫相对比较自然,但迷宫的分岔路会比较多,所以迷宫可能会更复杂,即玩家需要做选择的次数可能比较多。

方案三:块状分割型

上述两个方案有个共同的特点,就是道路永远都是1个格子宽,如果游戏需要给地图创造一些小型地块或者更宽的道路,需要在迷宫生成之后再用各种分布的规则来丰富迷宫。

而第三个方案则以小型地块作为出发点来设计迷宫,这套方案的雏形来自于国外大神Bob Nystrom,有兴趣的可以去查看他个人主页。

1、首先,在大地图(还是之前那个大地图)上生成若干小型地形,保证边长是奇数且不重合就好(示意图全部使用了正方形,实际上可以做成长方形让地图更加自然)。注意顶点要在黄色1格子上即可,这里我用橙色1来表示这些小型地块。

2、然后,根据之前方案一的迷宫生成方案,在非小型地块的区域里,用迷宫来填充。这一步完成之后,迷宫和小型地形是分隔开来的。

3、在橙色1的小型地形周围,随机取点以连接黄色1,连接点的数量可以根据需要来确定,建议是不要吝啬连接点的个数,因为这种地图之下,分岔路远比前两种方案要少。

4、接下来是简化地图,目的是去掉一些死胡同,因为这种方案的核心在于小型地块,没有必要让玩家在迷宫的路上绕。方法是把一些3边都是灰色0的黄色1去掉即可,具体数量也根据游戏需求来制定,我这里只去掉了一部分。

5、最后,给地图加上出口和入口,地图就做完啦!

总结一下,这种方案比前两种多了小型地块,这一点比较适合设计玩家的阶段性反馈。同时地图的分岔路明显减少,玩家在这种方案下的选择次数会明显降低。另外,由于这个方案的步骤相对多且独立,所以对于设计者来讲会比较容易控制地图的结构。

相关阅读:

Rooms and Mazes: A Procedural Dungeon Generator:http://journal.stuffwithstuff.com/2014/12/21/rooms-and-mazes/

迷宫生成网页:http://www.mazegenerator.net/

时间: 2024-10-12 07:47:44

经验分享:三套简单的迷宫地图生成方案的相关文章

分享一套简单的CodeSmith三层模板

Model: <%@ Template Language="C#" TargetLanguage="C#" %> <%@ Assembly Name="SchemaExplorer" %> <%@ Import Namespace="SchemaExplorer" %> <%@ Property Name="SourceTable" Type="Schem

总结ThinkPHP使用技巧经验分享(三)

add方法返回主键(id)的值在往数据表中添加数据时调用add方法,默认返回值就是刚添加的id值,就不用再去查询了. save方法返回值的判断在修改数据时,如果修改成功返回的是被修改的记录数0,1,2,3......注意:以下几种情况返回 false,所以判断更新失败应使用 if(false === $this->save())(1)更新的数据为空(2)_before_update()方法返回false(3)没有任何更新条件(没有定义where()里的条件,或者保存的数据里没有主键的值) 查询后

运维经验分享(七)-- Linux Shell之ChatterServer服务控制脚本第三次优化

运维经验分享作为一个专题,目前共7篇文章 <运维经验分享(一)-- Linux Shell之ChatterServer服务控制脚本> <运维经验分享(二)-- Linux Shell之ChatterServer服务控制脚本二次优化> <运维经验分享(三)-- 解决Ubuntu下crontab不能正确执行Shell脚本的问题(一)> <运维经验分享(四)--关于 java进程管理的服务控制脚本编程思路分析> <运维经验分享(五)-- 改进的java进程管

短视频自媒体实操经验分享,原来赚钱就这么简单!

从去年开始,由一条.二更等短视频自媒体开始崛起,短视频的红利期到来了.大家想通过做短视频搬运工想赚钱,要懂得讨好平台和读者.了解平台的游戏规则和网民内心的真实需求,只有这样才能获得平台更多的推荐和网民的喜爱. 以今日头条为例,视频的播放量主要通过系统推荐来获得,它的智能推荐系统(俗称人工智能)就是把合适的新闻推荐给对他感兴趣的人群.头条每天的内容几百万,不可能靠小编来干预推荐,都是智能机器人根据网友的互动数据来决定推荐的大小. 智能机器人怎么能知道网民的兴趣爱好,靠的就是大量网民的行为数据. 比

NSX 虚拟网络故障分析经验分享

今天的题目是关于NSX的虚拟网络故障分析,问题排查定位的经验分享,严格地说,不属于终端用户计算的范畴,但是终端用户计算以及软件定义的网络已经结合得越来越密不可分,有越来越多的用户开始使用NSX搭建EUC产品的专有网络环境,例如给VDI的计算资源池分配专有的网络空间,参见之前的博客利用NSX搭建专有子网. 笔者最近也搭建了一套基于NSX虚拟网络的EUC实验环境,通过使用NSX提供的logical network的能力,可以随心所欲的构建自己的网络,互联互通,网络微分段,分布式防火墙,完全不必麻烦公

前端技术学习经验分享(第一天---布置学习环境)

我相信有很多朋友因为学习而烦恼,有一定计算机语言基础的同学还好,通过各种渠道,比如视频,书籍,笔记的方法可以自学,提升自己的能力,但如果是零基础的同学想要入行,自学就变的难如登天了,大学毕业以后因为各种私事,公事,杂七杂八的事总能扰的我们心神不宁,没办法平心静气的学习一门与自己毫不相关的一门新知识.最后不得已而参加了培训机构... 下面我会总结培训的优势与劣势,并于大家分享我自学的经历. 先说上培训的几点好处吧: 第一.培训可以认识10--50个同学,相熟的成为朋友的可以有3--5个,这是我们很

类似快手、抖音手机直播程序搭建经验分享

类似快手.抖音手机直播程序搭建经验分享-呆萌手机直播程序搭建系统管理后台视频上步骤直播行业近年来的发展是有目共睹的,如今通过手机直播源码可以快速搭建部署一套功能丰富的直播系统.很多直播平台运营商在自己的直播系统上线运营之前都会先进行下系统的测试,有时会面临手头的主播资源不足的尴尬境地.此时,可以通过在直播系统管理后台上传其他直播平台的直播录制视频的方式来进行测试.那么具体的操作方式是怎样的呢?本篇就为大家详细分享视频上传经验.一.呆萌手机直播程序搭建视频录制1.????推荐使用UC浏览器,电脑安

【经验分享】响应式网站项目实操过程中的那些事儿

本次网站改版升级是我来到新公司的第一个项目,需求之初并没有提及要做响应式,在首次评审时领导和研发均认为响应式处理与我们网站相对契合,就这样我开始了我职场生涯中第一个响应式网站设计.下面就跟大家分享响应式网站设计中的那些事儿. 因为本人之前并没有接触过响应式设计,在项目开始前便恶补了一些响应式的基础知识.理论性资料网上众多,为了使各位对响应式有初步印象和认知,我在这里只做简单描述,各位若想要更全面深入的了解可自行百度. 1什么叫响应式设计,为什么要做响应式设计 (1)页面的设计和开发应当根据用户行

使用latex撰写博士,硕士学位论文(浙大博士经验分享)

使用latex撰写博士,硕士学位论文(浙大博士经验分享) 浙大博士:  个人感觉,还是要用latex来写.因为之前发过几篇word排版的中文论文,在参考文献的引用.文字格式调整上,实在是难受.如果坚持用word,请一定用endnote结合word来管理参考文献,否则100多个参考文献的调整一定会浪费你很多时间的. latex不难,就几个简单功能,稍微适应一下就好. 言归正传,我们开始: 1. 模板请采用http://zjuthesistex.googlecode.com/files/rookie