必威体育Betway必威体育官网
当前位置:首页 > IT技术

【转载】一个游戏地图生成的方案

时间:2019-09-27 23:42:12来源:IT技术作者:seo实验室小编阅读:54次「手机版」
 

游戏地图

作者:兔四

链接:https://zhuanlan.zhihu.com/p/26965602

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

这套方案的雏形来自于Eed Blob Games(Red Blob Games),基础的完成图大概是这样子:

然后,本文介绍的这套方案将会在它的基础上做一些拓展,目的是生成一块块带有不同地形的地图,而且每一次生成地图是有足够的随机,同时还会加上一些半岛等丰富的变数。

一、方块生成

首先我们创建一个矩形,这是最基础的地图。

然后随机在矩形内布下若干个点。

从这些点的坐标出发,每个点生成一个多边形,边数在3~6之间。

这三步之后,地图大概是这个样子:

这一步实际上是随机把一个大的矩形切割成若干个方块,接下来的操作则把这些方块当做是最基础的元素来进行地图生成。

二、方块编号

依照下面的规则来给方块编号:

最靠近大矩形边缘的方块命名为1;

剩下的方块里,与1相邻的方块命名为2;

剩下的方块里,与2相邻的方块命名为3;

……

渐渐把矩形内所有方块都命名了一个数字,这个数字可以简单地代表一个方块距离矩形边沿有多远。接下来,会以数字较大的一些方块作为中心,进行地图下一步的生成。

三、水域切割

找到数字较大的方块,假设在第二步里生成了若干个5和6的方块,那就把所有这些方块命名为中心方块。

选择1个中心方块,以它作为起点,依次随机找与它相邻的、数字编号减一的方块,如下图:

如上图,灰色的就是中心方块,蓝色的就是执行上述步骤后选择的方块。

然后随机取中心方块作为起点,继续执行若干次上述的操作:

接着,把所有编号为1的方块全部命名为水域方块:

至此,我们就把整个地图从中心出发,切割出大小不一、方向随机的水域,同时整个地图也会被水域包围,充当地图边缘的作用。

四、随机切割

这一步,我们给地形加一些随机性。

做法很简单,随机在剩余的非水域方块里,把1~3个方块切割出来当做是内陆水域。如果你想整个地图没有岛屿,则只需要保证在切割后不会出现一个四周都是水域的方块即可。切割后如下:

五、地形分布

这时候,我们把整个地图切割成两个部分:

一部分是被切割出去当做是水域;

一部分是大陆,而且会被水域分割成多个部分,会有一块相对中心的区域将它们连接起来。

地形分布一般有两种做法:

一种是直接按方块的数字编号来画等高线,依次分布平原、山丘、高原等地形,这就是文章开头提到的那两张示意图的做法;

另一种则是按照区域来划分地形,比如把大陆分割成草地、沙漠、森林、雪山等地形。

这里讨论第二种做法。

我们从边缘出发,在一个随机区间内取小方块的数量,这里假设是[10,12],把每次取得的方块当成一个集合,称为一个地形。

依次执行上述的步骤,就可以把整个地图分割成多个大块的地形,如图:

每个颜色就代表一个大的地形块,这时候就按照地图的需要来分配具体地形即可。

实际上,如果运算量足够大,可以把方块数量显著提高,可以得到更加平滑的边缘和多变的大小地形块。

相关阅读

生成纯数字的随机数

此随机数为20位随机数,如果想要19位的话可以把substring第二个参数改为4,如果想要21位随机数就把substring第二个参数改为6,以此

离线地图

https://www.cnblogs.com/luxiaoxun/p/4454880.html

微软版Virtual Earth卫星地图教程[from]

from http://hi.baidu.com/wxdt/blog/item/45faad4bc1de20f083025ce2.html2006-11-19 00:09 一谈起“虚拟地球”,恐怕

百度离线地图开发,node实现地图瓦片下载

最近有个Web项目要用离线地图,项目是在内网环境,找了很多资料,踩了很多坑,好在已经实现了,下面把资料整理一下。 首先是百度离线地图开

商代地图

分享到:

栏目导航

推荐阅读

热门阅读