映射RPG创建模拟

时间:2014-01-26 11:20:28

标签: python

我创建了对象,用random选择了哪种类型的地形以及它有哪些天气。这对于一个地方来说没什么问题,但是现在我想让它更大并创建一个地图。我创建了一个包含numpy的矩阵,其中包含几个地形,但我不希望它是随机的,因为在示例中您可以看到在海边有一个湖,它没有意义。 如何创建此地图以使其看起来真实?

例如,我有这种地形类型的矩阵:

[['high mountain' 'high mountain' 'high mountain']
 ['town' 'town' 'forest']
 ['house' 'lake' 'sea']]

这天气:

[['windy' 'sunny' 'cloudy']
 ['sunny' 'light' 'cloudy']
 ['light' 'sunny' 'light']]

可能的地形是:洞穴,废弃的房子,城堡,河流,森林,房子,山,高山,丛林,沙漠,海,湖,镇,城市,乡村。

可能的天气是:多雨,晴天,阴天,暴风雨,多风,光线。

此刻我就是这样创造的:

map_1=numpy.eye(3, dtype=object)
for i in range(3):
    for j in range(3):
        map_1[i,j]=Place()
#Where Place it is the object that randomly generates the terrain and the weather

我想使用我发现here的这个功能:

def weighted_choices(choices, weights):
    import random as rdm
    total = sum(weights)
    treshold = rdm.uniform(0, total)
    for k, weight in enumerate(weights):
        total -= weight
        if total < treshold:
            return choices[k]

在检查了四个边或至少已经创建的边之后,根据设定的权重偏好(我可以设置Psea = 0)创建新地形。

期望的结果应该考虑哪个是将要创建的地形的周围地形的类型,并使用weighted_choices函数协调它所具有的地形和天气类型或其他功能。

[['high mountain' 'high mountain' 'high mountain']
 ['town' 'town' 'forest']
 ['house' 'countryside' 'sea']]

这天气:

[['windy' 'sunny' 'cloudy']
 ['sunny' 'light' 'cloudy']
 ['light' 'sunny' 'light']]

尝试是创建一个随机地图,然后手动检查并替换其他人不喜欢的地形。但我没有找到考虑周围环境的方法。

2 个答案:

答案 0 :(得分:1)

有许多随机地图生成方法可以尝试解决您尝试解决的确切问题。没有普遍的答案。 Gamedev将是一个很好的地方,可以提出更详尽的可能性列表。对于我所知道的一种方法,我只想用fairly detailed tutorial回答。

答案 1 :(得分:1)

您正在寻找相干噪音。您想要随机数,但是您希望它们考虑周围的随机数。例如,如果你想考虑一个地区是多么潮湿/干燥,你可能会在草原旁边有一片森林,在沙漠旁边有一片草地,但森林旁边的荒地不太可能。另一个例子,如果你想考虑天气,你可能在多云地区旁边有阳光充足的地区,在多雨的地区旁边有多云的地区,但是你可能希望阳光充足,多雨的地方很少相邻。

This page解释了相干噪声的产生。当我研究这个主题(用于地图生成)时,我写了我的笔记here