不同的游戏生成地图的方式有所不同,在此只是记录几种不同的生成地图的方式和思路

地牢型地图

参考游戏:

- 死亡细胞

- 传说法师

- 元气骑士

游戏地图变化(原来游戏地图是这样生成的)(1)

大部分的roguelike类游戏的关卡设计都是使用这种类型的地图生成方式,通过事先设计好的几类模板地图构成小房间,随机构成各类具有相似结构的房间。这样的探索可以给玩家初次的新鲜感,但是作为roguelike游戏,反复的游玩后,重复的关卡设计很容易使玩家疲倦

关于这种地图的实现思路是:

1. 在有限的网格中放置好关键房间

2. 用柏林噪音随机漫步生成联通路线

3. 根据路径的开口方向放置随机的房间

横板随机地图

参考游戏:

- 泰拉瑞亚

- 缺氧

横板的地图生成比较好想,一维噪音用于生成地表,然后根据深度在噪音图的规划下嵌入不同的其他方块,再根据需求加入不同的特殊建筑就好

只是生成这样一个二维的地图可以说是相当简单的生成方式了,但是为了做到某些效果而不断调整生成地图的参数也是一件复杂的工作

平面随机地图

参考游戏:

- 饥荒

游戏地图变化(原来游戏地图是这样生成的)(2)

饥荒的地图比较于泰拉瑞亚、缺氧这种地图还要简单,一个平面内只需要一块大陆保证联通就好了,柏林噪音到这里用不上了,不过或许可以使用分形方式生成的噪音,关于如何生成一块连通的二值化的图像咱还得再了解一下

三维地图

参考游戏:

- MC

这类地图生成是最复杂的,但也是最简单的

MC作为一款开源模板式的游戏,它的源代码中有它完整的地形生成方式,想要研究的话有着大量的资料和教程、文档可供参阅

一般来说,这样的地图首先采用柏林噪音生成高度图,根据高度初步生成海洋和雪山,再使用三维噪音在地底生成不连通洞穴,后续的就是各种复杂的修饰了,嵌入矿物、划分生物群系之类的

如果有足够的精力学习JAVA和MC的源码及文档的话,MC必定是一个值得学习的开源程序

游戏地图变化(原来游戏地图是这样生成的)(3)

几点地图生成中值得注意的问题

- 一般来说,随机生成的地图都会有一个对应的种子,而游戏使用这些种子作为依据生成伪随机数,进而生成噪声、创建地图。但是程序中一般不会使用系统相关的随机数生成,而是使用自行编写的随机数生成器,目的是为了使得不同的电脑、系统上只要游戏程序相同就能使用一个种子生成相同地图

- 就生成地图而言,初期进行地图生成的编写时,可以使用数据可视化工具直接生成柏林噪音灰度图的三维图像,对地形的随机生成方式进行调整,比如说使用Qt的可视化工具(真相是C#对于咱来说还是太不熟悉,很多高级特性运用不熟练,Qt使用C 编写,只要把重心放到Qt相关框架的学习上就好)

- 游戏编程永远和数学离不开关系,柏林噪音的实现原理和多元微积分、插值这些内容分不开,所以尽快完成基本的数学知识的学习很必要

,