2014-01-26 107 views
0

我创建的对象,与random选择哪种类型的地形是哪里,它有哪些天气。这对一个地方来说很好,但现在我想把它做大并创建一张地图。我创建了一个包含多个地形的numpy矩阵,但我不希望它是随机的,因为您可以在示例中看到,在海边有一个湖,它没有任何意义。 如何创建此地图使其看起来真实?地图RPG创建模拟

比如我有一个类型的地形这个矩阵:

[['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']] 

我已经试过创建随机地图,然后手动检查并替换我不喜欢别人的地形。但我没有找到一种方法来考虑周围环境。

+3

这个问题似乎是脱离主题,因为它属于http://gamedev.stackexchange.com – jonrsharpe

+0

@jonrsharpe我已经在那里检查它,它不适合那里。我问我怎么编程,所以我觉得它适合这里。但是,如果我没有收到答案,我会在那里尝试 – Llopis

+1

为了使这个问题更适合这里,请提供以下内容:准确地说出你想要发生的事情,以及正在发生的事情(如果错误,提供追溯,如果意外产出提供投入,预期产出,实际产出)。 “不是很有效”是不够的信息。如果你的代码有效,但需要改进,你可以尝试http://codereview.stackexchange.com – jonrsharpe

回答

1

您要找的相干噪声。你想要随机数字,但你希望他们考虑周围的随机数字。例如,如果你想考虑一个地区的湿度/干燥程度,你可能在草地旁边有一片森林,在沙漠旁边有一片草地,但森林不太可能会濒临绝境。另一个例子,如果你想考虑天气,你可能会在多云地区旁边的阳光明媚的地区和多雨地区旁边的多云地区,但你可能希望阳光明媚,下雨很少。

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

+0

很好的解释,尽管我没有详细阅读它。我希望我能理解并应用。应用噪声纠正随机生成地图还是在生成地图之前更好?如果已经在你的文章中回答了这个问题,请省略;)谢谢 – Llopis

+1

当你有随机数生成地图的某些属性/高度或湿度等地图时,我发现它很好,然后使用这些属性生成地图。即使地图不是,属性也可以是数字。例如,您可以生成一个高度,一个数字,带有连贯的噪音,然后您可以选择高度范围为海,乡,山,山。先噪声,然后映射,这些“大”的功能。但是,您也可以先制作地图,然后为“小”特征(如岩石和树木)添加噪点,等等。 – amitp

1

随机地图生成有很多方法可以尝试并解决您尝试解决的确切问题。没有普遍的答案。 Gamedev将会是一个很好的地方,可以将您的问题提供给更详尽的可能性列表。我会简单地回答一个fairly detailed tutorial我知道的一种方法。