我目前正在开发一个基于文本的僵尸RPG模拟器,其中将有一个随机生成的城市来探索和做事。我原本打算用2D阵列保存城市,但后来我意识到如果我愿意这样做,我的数组将占用数字存储的千兆字节数据。在做了一些研究后,我发现了一种叫做perlin噪音的东西,这是一种基于单个种子生成几乎无限且随机的地形的算法,我很好奇我是否可以做一些与我的城市相似的事情。任何想法的家伙?
我意识到我没有给你们很多关于我需要的信息。 我想要生成的城市应该用一个坐标网格来表示,每个坐标都是一个单独的坐标 在地图上建设。然而,建筑物应以特定方式安排。如果它是一个金融区,那么办公楼和应该更频繁地产卵。如果是住宅区,则应更频繁地生成公寓楼和自助洗衣店等建筑物。如果它是公园,那么就不应该生成任何建筑物。
此外,一些建筑物应占据比其他建筑物更多的坐标,例如商场等。
也应该生成整个城市的高速公路,但如果它使代码太复杂,这并不重要,因为这是一个简单的学习项目。
答案 0 :(得分:1)
Perlin噪声主要通过组合几个“图像”(例如参见这里:http://devmag.org.za/2009/04/25/perlin-noise/)来实现,其中一些具有较低频率而另一些具有较高频率。因此,您可以使用较低频率的某个坐标处的值来确定您所在城市的区域类型。比如说,最低频率的图像像素小于0.5,而第二低的图像像素也可以说你在城市的财务部分。然后,更高的频率(变化更大)确定建筑物或物体的类型(树,......)。
但是,您必须尝试使用参数才能使其更加逼真。
我知道这是一个基本答案,但请随意评论此程序。
道路可能无法使用Perlin噪音本身生成,但是例如通过一些算法进行一些后处理(比如你是在金融区,你可以编写一个规则,如果左边有一个建筑物某个瓷砖和右边的瓷砖本身没有建筑物,你应该引入一条路。
答案 1 :(得分:1)
您可以像本教程中一样使用随机点和放松:http://www-cs-students.stanford.edu/~amitp/game-programming/polygon-map-generation/。它还使用delaunay三角剖分和双voronoi图和噪声边缘。