Псевдослучайный для процедурной генерации

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

Процедурное островное поколение

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

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

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

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

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

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

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

введите описание изображения здесь

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

введите описание изображения здесь

Я хотел бы иметь такие же ветви. Вы знаете название алгоритма для этого? Я прочитал это:
Экспоненциальное распределение Но это не очень разговорчиво для меня …

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

0

Решение

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

1

Другие решения

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

0

По вопросам рекламы [email protected]