三套简单的迷宫地图生成方案

article/2025/4/24 14:59:54

地图基础

 

地图的形式很多,这里我使用的地图是以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、最后,给地图加上出口和入口,地图就做完啦!

 

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

 

 

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

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

转载于:https://www.cnblogs.com/damowang/p/7047357.html


http://chatgpt.dhexx.cn/article/A1ls53X4.shtml

相关文章

SenticNet情感词典介绍

在进行情感分析时,一个好的情感词典能够让我们的工作事半功倍,较为出名的情感词典有SentiWordNet,General Inquirer等,这篇博客将介绍另外一个出色情感词典,SenticNet。 简介 当谈论SenticNet时,我们正在…

中文金融领域情感词典构建

2019年10月4日-6日 Python爬虫与文本分析工作坊 & 课题申报高级研修班 这篇文章是公众号关注者郝童鞋今早发给我的,在此谢谢郝童鞋。 文章基于简单算法和人工判断,使用多阶段剔除法,构建了 中文金融情感词典CFSD(ChineseFinan…

《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算

本文主要是学习参考杨秀璋老师的博客,笔记总结。 原文链接 文章目录 书山有路勤为径,学海无涯苦作舟原文链接一.大连理工情感词典二、七种情绪的计算2.1 pandas读取数据2.2 导入大连理工大学中文情感词典2.3 统计七种情绪的分布情况2.4 增加中文分词词典和自定义的停…

中文情感词典的构建

首先,国外英文的情感分析已经取得了很好的效果,得益于英文单词自身分析的便捷性与英文大量的数据集 WordNet。但由于中文的多变性,语义的多重性与数据集的缺乏,使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词…

基于情感词典的网络文本情感倾向分类模型

目录 前言一、模型构建1.归类2.判定3.输出 二、代码实现三、结果展示 前言 文本情感倾向性分析(也称为意见挖掘)是指识别和提取原素材中的主观信息,并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容&#xf…

使用SO-PMI算法构建行业/专业情感词典

文章目录 1. 情感词典内容2. 情感倾向点互信息算法(SO-PMI)算法点互信息算法 PMI情感倾向点互信息算法 SO-PMI 3. 构建情感词典1. 导入项目2. 构建情感种子词3. 使用TF-IDF方便构建情感种子词4. 构建专业词典的效果与使用方法5. 其他说明 1. 情感词典内容…

在微雕中使用的电脑设计

需求是我们要在铜器上复刻很小的凹印,可以选用的技术方案还是很多:激光雕刻,篆刻、钢印。 激光雕刻有利有弊,前期复制是最方便的,激光雕刻有专门的设计软件,可以很轻松的把自己的图案运用到机器上去。制作和时间的成本都非常的低,但是激光对金属的雕刻有一个大大的缺点…

闲人闲谈PS之四十二——顾问的“禁忌之地”—制造能力计划

惯例闲话:上个月有幸成为乐老师乐谈IT系列培训课程的讲师,分享主题是,PS在装备制造和工程行业的应用。虽然培训规模不是很大,但是闲人很有信心,至少在小范围之内,参与培训的听友人来说,PS一直以…

ibm x201 怎么清理内部_ThinkPad X201拆解,联想Thinkpad X201拆机图解

1.jpg (25.79 KB, 下载次数: 2552) 2010-6-1 20:13 上传 ThinkPad X201掌托,没有防滚架,这个掌托就显得很软。电磁屏蔽做得很用心。 2.jpg (39.16 KB, 下载次数: 2556) 2010-6-1 20:13 上传 ThinkPad X201掌托特写,可以看到掌托塑料件是MITSU…

学习opencv:PS滤镜—浮雕

实现浮雕效果的算子有很多&#xff0c;效果大同小异&#xff0c;不同算子的处理结果在细节上会有所差异。事实上&#xff0c;任何一阶差分算子都可用于实现浮雕效果&#xff0c;简单起见&#xff0c;这里使用算子[-1,1]。 代码如下 #include<iostream> #include <…

ps给图片加钢印方法

给图片加一个钢印其实很简单 这样的效果只能类似钢印 简单可以按照下面的方法 准备资料 &#xff1a;一个要加钢印的图片 一个透明印章即可实现 方法&#xff1a;斜面和浮雕 一、打开图片 二、打开透明印章 三、将透明印章移动到图片中 四、进行图层设置 右击印章图层---混合…

PS钢印效果制作

PS制作钢印效果一法 转载教程:严禁做假.... 附件 1.jpg (37.05 KB) 2008-6-10 22:39 2.jpg (33.59 KB) 2008-6-10 22:39 3.jpg (38.57 KB) 2008-6-10 22:39 4.jpg (42.49 KB) 2008-6-10 22:39 5.jpg (39.2 KB) 2008-6-10 22:39 6.jpg (44.63 KB) 2008-6-10 22:39 7.jpg…

Oracle中extract()函数

oracle中extract()函数从oracle 9i中引入的,主要作用于一个date或者interval类型中截取特定的部分 extract()语法如下&#xff1a; extract ( { year | month | day | hour | minute | second | 某一时区 } from { date类型值 | interval类型值} ) 要点一&#xff1a;extract()…

oracle ora-01652:无法通过1024(在表空间SYSTEM中)拓展temp段

1.报错 2.查询拓展表空间 2.1查看表空间使用情况 SELECT UPPER(F.TABLESPACE_NAME) "表空间名",D.TOT_GROOTTE_MB "表空间大小(M)",D.TOT_GROOTTE_MB - F.TOTAL_BYTES "已使用空间(M)",TO_CHAR(ROUND((D.TOT_GROOTTE_MB - F.TOTAL_BYTES) / D.…

hpux oracle10.2.0.4下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS

hpux oracle10.2.0.4 rac 下报ORA-1652 unable to extend temp segment by 128 in tablespace CARDTS hpux 11.31 oracle10.2.0.4 rac ,2 nodes 值得注意的是&#xff0c;报的是不能在CARDTS表空间中扩展temp段。。。 后来查询metalink 文章&#xff0c; Troubleshooting ORA-1…

原创:oracle中单行函数介绍 lt;五gt;

在SQL中有两种函数一种是单行函数&#xff0c;一种是多行函数.在sql与pl/sql中都自带了很多类型的函数,比如有字符、数字、日期、转换和混合型等多种函数用于处理单行数据,因此这些都被称为单行函数.这些函数都可以被用于select、where和oder by等子句中.下面我们就来分析单行函…

EXPDP报错:ORA-60019 creating initial extent of size 14 in tablespace of extent size 8

一、原因概述 和SecureFiles新的LOB架构相关。11g之前叫BasicFiles。在11g如果不特别指定&#xff0c;默认是会创建成BasicFiles LOB。但是在12c之后&#xff0c;LOB列在ASSM管理的表空间。默认都会创建成SecureFiles。 也就是DB_SECUREFILE初始化参数&#xff0c;在11g时&…

oracle 中 /*+ full(表名)*/ 优化详解

文章目录 hint 关键字&#xff1a; /* full(表名)*/可能遇到的问题别名为 "SELxx" hint 关键字&#xff1a; / full(表名)/ 一般来说&#xff0c;sql 优化时&#xff0c;尽量走 index&#xff0c;但不绝对有时候&#xff0c;全表扫描的效率比索引高 索引 和 全表扫…

Docker——Docker 镜像详解

Docker 镜像 Docker镜像是什么Docker镜像加载原理联合文件系统&#xff08;UnionFS&#xff09;镜像加载原理镜像分成理解 Commit镜像镜像的总结 Docker镜像是什么 Docker 容器的运行是基于宿主机的内核&#xff0c;通过linux的namespaces来实现隔离&#xff0c;相对于虚拟机而…

Docker镜像使用详解

目录 基础命令使用进阶 容器和虚拟机具有相似的资源隔离和分配优势&#xff0c;但功能不同&#xff0c;因为容器虚拟化的是操作系统而不是硬件。多个容器可以在同一台机器上运行&#xff0c;并与其他容器共享操作系统内核&#xff0c;每个容器在用户空间中作为独立进程运行。一…