背景
辞职了,准备在找工作的间隙做一个沙盒类型的游戏,需要实现一个随机地图生成器,用于生成游戏中的地图。
前置知识
噪声算法
一篇文章搞懂柏林噪声算法,附代码讲解
柏林噪声算法可以生成一个连续的起伏地形,并且可以控制起伏的频率和幅度,从而生成不同类型的地图。
除了用噪声的值表示高度外,还可以代表其他的规则来实现地图群落的分布,比如用噪声的值表示树木的密度,表示温度高低从而决定环境是雪地还是沙地等
泊松采样
神采飞样:泊松盘采样
泊松盘采样可以在一个区域内随机生成点,并且保证点之间的距离不会太近,也不会太远,从而生成合理的群落,比如树林。
流程梳理
- 生物群落
- 树木规则
- 河流规则
- 后期处理
- 资源放置
困难的部分
- 资源点的散布情况
- 显示中的物体不是完全随机的散步在地图上的,树木往往会聚集在一起,山脉和河流是连续的,算法需要生成合理并且是玩法需要的地图。
总结
配合噪声算法和泊松采样就可以根据gameplayer的需求生成合理的地图,并且可以控制地图的难度和玩法。
比如利用噪声算法作为气温的规则,这样就可以确定草地和树林的范围,在这个范围内使用一次泊松确定树林位置,在通过第二次泊松确定树木的位置,这样就可以生成一个合理的树林。