Я делаю игру с процедурной картой, и я хотел бы применить этот способ:
Процедурное островное поколение
Это легко реализовать, и результаты — это то, что я ищу.
Единственная часть, с которой я застрял, — это часть 3, когда мне приходится ходить по кругу и случайным образом менять воду на землю, с большей вероятностью превращения воды в землю, когда она касается большого количества земли.
Я пытался сделать так:
if (rand() % 10 < 3 + countAdjacentTile(x, y, LAND))
функция countAdjacentTile просто подсчитывает количество плиток, помеченных как третий параметр вокруг плитки, указанной с помощью координат x и y.
Таким образом, у плитки воды все еще есть шанс превратиться в плитку земли, если вокруг нее нет земли, а шансы выше, если вокруг есть земля.
Но это дает мне это:
в то время как это дает это по ссылке, которую я дал ранее:
Я хотел бы иметь такие же ветви. Вы знаете название алгоритма для этого? Я прочитал это:
Экспоненциальное распределение Но это не очень разговорчиво для меня …
Спасибо за чтение до сих пор.
Как работает countAdjacentTile ()? Считает ли он плитки по диагонали или только 4 соседей? Если вы считаете диагонали, попробуйте не делать этого. Также попробуйте настроить константы — это 10 и 3, трудно сказать, какие значения будут хороши без этого кода, просто проверьте некоторые комбинации и выберите лучший результат.
Возможно, вы захотите написать функцию, определяющую плотность на основе расстояния до центра острова. Затем используйте это значение плотности для взвешивания порога, определяющего, является ли элемент землей или водой.