Я программирую игру на основе плиток, и у меня есть несколько базовых плиток (трава, грязь и т. Д.), Но я не могу понять, как сделать хорошее генерирование случайных карт, потому что когда я делаю действительно случайный выбор, если плитка должна быть трава / грязь, я получаю это:
Я понимаю, почему это происходит, но я хочу создать несколько случайных непрерывных областей травы или грязи. Что-то, что будет иметь больше смысла, как это:
Ответы:
То, что вы могли бы сделать, это случайно сгенерировать карту Вороного, например:
center points
(см. Черные точки) и случайным образом решаете, являются ли они травой или грязью.center point
грязи или траве.Если то, что вы сделали ранее, это «подбросить монету» для каждой плитки (шума), генерирование диаграммы Вороного даст гораздо лучший результат.
Вы можете улучшить это, разделив
center points
наislands
с помощью алгоритма, который:centers points
и обозначает их какleaders
.источник
center points
. Затем решите, являются ли они травой или грязью. Теперь переберите массив и решите, находится ли каждая плитка ближе к точке грязи или траве. Возможно, скажите мне, какая часть сложная?Вы можете использовать перлин-шум, который обычно используется для генерации карты высот. Перлинский шум в играх
Тогда вы можете использовать высоты в качестве советника, насколько высока вероятность появления травы / грязи в одном регионе карты.
Пример (значения шума Перлина от 0 до 256): если значение превышает 200, вероятность того, что трава будет размещена, составляет 80% (грязь 20%). Если значение составляет от 100 до 200, вероятность размещения травы составляет 50% (грязь также составляет 50%). Если значение меньше 100, вероятность размещения травы составляет 20% (грязь 80%).
источник
http://gamedevelopment.tutsplus.com/tutorials/generate-random-cave-levels-using-cellular-automata--gamedev-9664
вот моя версия метода клеточных автоматов, начните с заполнения сетки случайным образом, затем выполните эти правила клеточных автоматов несколько раз
и это в конечном итоге выглядит как пещера
индекс может быть преобразован в позицию x & y и обратно с этим кодом
я просто возвращаю список bools, потому что я использую этот список для многих вещей: пещеры, деревья, цветы, трава, туман, вода, вы можете даже комбинировать несколько списков здесь, сначала я удаляю все меньшие пещеры, затем объединяю два случайных списка
источник
Выберите точку на карте. Поместите желаемый тип плитки с базовым значением, таким как 40. Следите за тем, где вы разместили свою новую желаемую плитку. Добавьте отправную точку в список.
Для каждой точки в этом списке вы посещаете всех соседей. Пока у вас осталось достаточно энергии (начиная с 40), добавьте желаемую плитку и добавьте ее в список для посещения. Дайте новой плитке меньше мощности, определенной вами. Самый простой = случайное понижение. После того, как вы посетили плитку из списка, удалите ее. Начните сначала, посетив любые не посещенные, но созданные плитки.
источник