2013-12-19 3 views
0

Я сделать игру с процедурной картой, и я хотел бы применить этот способ делать:псевдослучайный для процедурной генерации

Procedural Island Generation

Это легко осуществить, и результаты, что я Я ищу.

Единственная часть, за которую я застрял, - это часть 3, когда мне приходится крутиться в кругах и беспорядочно менять воду на землю, с более высоким шансом перебросить воду в землю, когда она касается большого количества земли ,

Я пытался сделать так:

if (rand() % 10 < 3 + countAdjacentTile(x, y, LAND)) 

функция countAdjacentTile просто подсчитывает количество плиток, помеченных в качестве третьего параметра вокруг плитки, указанного с координатами х и у.

Итак, есть еще шанс, что водная черепица превратится в плитку земли, если вокруг нее нет земли, и шансы выше, если вокруг есть земля.

Но это дает мне это:

enter image description here

в то время как она дает это на ссылке, которую я дал ранее:

enter image description here

Я хотел бы иметь такие же ветви , Вы знаете имя алгоритма для этого? Я читал это: Exponential Distribution Но для меня это не очень разговорчив ...

Спасибо за чтение.

+0

Вы дважды проверили, что функция 'countAdjacentTile' возвращает то, что вы ожидаете? – benjymous

+0

Да, у меня хорошие значения возврата. – tho

+0

Если вы используете компилятор C++ 11, вы можете использовать один из более новых случайных генераторов из заголовка 'random'. «Ранд» не самый лучший, и смешивание его с модом имеет тенденцию ухудшать его. –

ответ

1

Как работает countAdjacentTile()? Учитывает ли он плитки по диагонали или только 4 соседа? Если вы считаете диагоналями, попробуйте не делать этого. Также попробуйте настроить константы - 10 и 3, трудно сказать, какие значения будут хорошими без этого кода, просто проверьте некоторые комбинации и выберите лучший результат.

+0

Сделал это, я сыграл с вероятностью найти что-то великолепное с разными семенами :). – tho

0

Возможно, вы захотите написать функцию, дающую плотность, основанную на расстоянии до центра острова. Затем используйте это значение плотности для взвешивания порога, определяющего, является ли элемент землей или водой.

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