2014-01-26 3 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

Существует множество подходов к генерации случайных карт, которые пытаются решить точную проблему, которую вы пытаетесь решить. Нет универсального ответа. Гамедеву было бы отличным местом, чтобы поставить ваш вопрос на более исчерпывающий список возможностей. Я просто отвечу fairly detailed tutorial для одного подхода, о котором я знаю.

Смежные вопросы