The Dynasty. Генерирующие генерации генераторы.

Привет, Пикабу! Я продолжаю разрабатывать стратегию в которой игрок берет на себя управление династией.


В этом посте расскажу о том, как работает генератор городов над которым я трудился последние 5 дней. Я не очень-то продуктивен, да :)

Что должно быть у каждого города? Название! Проще всего составить оригинальное название города составив его из заранее заготовленных частей.

Например: Mosc+ow, Lon+don, Par+is.

The Dynasty. Генерирующие генерации генераторы. Unity, Инди, Indie, Gamedev, Perlin noise, Генерация, Стратегия, Гифка, Длиннопост

В общем-то результатом я остался доволен.


Теперь нужно сгенерировать города. Сказано сделано.

Цель: добиться городов выглядящих а-ля Цивилизация.

За час набросал скрипт который в случайном месте генерировал центр города - Ратушу, а потом "наращивал" вокруг него дома. В случайных местах. Если новое строение "соприкасалось" с существующими, то в этом месте появлялся дом.

Результат был так себе.

Ковальски, варианты. А в вариантах которые я нагуглил мне было лень разбираться. Пришлось немного подумать самому. В форме чего должен быть город? Ну, острова. Окей, гугл, как сгенерировать случайный остров?


Самым простым вариантом было:

Шаг 1. Сгенерировать Шум Перлина со значениями от 0 (черный цвет) до 1 (белый цвет).

Шаг 2. Создать градиентный круг исходящий из центра карты. В последствии заменил один большой круг на четыре маленьких, фигура стала больше напоминать квадрат со скругленными углами.

Шаг 3. Вычесть значения полученные на первом шаге из значений полученных на втором, присвоить значения которые стали меньше нуля нулю.


Иллюстрация для наглядности.

The Dynasty. Генерирующие генерации генераторы. Unity, Инди, Indie, Gamedev, Perlin noise, Генерация, Стратегия, Гифка, Длиннопост

Вуаля! У нас есть остров! Гхм, да, я помню, что нужен был город.


Дело за малым, заполнить значения, что не равны нулю здания. Место для Ратуши выбираем случайным образом, зная ширину и длину можно легко узнать, вся ли ратуша находится в пределах "острова". Генерируем дома. Перед генерацией каждого здания проверяем, чтобы здания не пересекалось с другими.


Вот в общем то и все, что хотел рассказать.
Результат:

The Dynasty. Генерирующие генерации генераторы. Unity, Инди, Indie, Gamedev, Perlin noise, Генерация, Стратегия, Гифка, Длиннопост

Да, кстати, завел паблик Вконтакте, в котором можно следить за новостями об игре.
Ссылка: https://vk.com/thedynastygame


Спасибо за внимание!

Лига Разработчиков Видеоигр

6.6K постов22.1K подписчиков

Добавить пост

Правила сообщества

ОБЩИЕ ПРАВИЛА:

- Уважайте чужой труд и используйте конструктивную критику

- Не занимайтесь саморекламой, пишите качественные и интересные посты

- Никакой политики


СТОИТ ПУБЛИКОВАТЬ:

- Посты о Вашей игре с историей её разработки и описанием полученного опыта

- Обучающие материалы, туториалы

- Интервью с опытными разработчиками

- Анонсы бесплатных мероприятий для разработчиков и истории их посещения;
- Ваши работы, если Вы художник/композитор и хотите поделиться ими на безвозмездной основе

НЕ СТОИТ ПУБЛИКОВАТЬ:

- Посты, содержащие только вопрос или просьбу помочь
- Посты, содержащие только идею игры

- Посты, единственная цель которых - набор команды для разработки игры

- Посты, не относящиеся к тематике сообщества

Подобные посты по решению администрации могут быть перемещены из сообщества в общую ленту.

ЗАПРЕЩЕНО:

- Публиковать бессодержательные посты с рекламой Вашего проекта (см. следующий пункт), а также все прочие посты, содержащие рекламу/рекламные интеграции

- Выдавать чужой труд за свой

Подобные посты будут перемещены из сообщества в общую ленту, а их авторы по решению администрации могут быть внесены в игнор-лист сообщества.


О РАЗМЕЩЕНИИ ССЫЛОК:

Ссылка на сторонний ресурс, связанный с игрой, допускается только при следующих условиях:

- Пост должен быть содержательным и интересным для пользователей, нести пользу для сообщества

- Ссылка должна размещаться непосредственно в начале или конце поста и только один раз

- Cсылка размещается в формате: "Страница игры в Steam: URL"

3
Автор поста оценил этот комментарий

Как продолжение идеи, могу предложить (в случае больших городов) использовать фрактальный шум (картинка 1), для создания более детализированных границ. Можно поэксперементировать с "cellular noise" (картинка 2), а также использовать, к примеру, муравьиный алгоритм для прокладывания дорог и диаграммы Вороного (картинка 3), для разделения городов на регионы по богатости/застроенности.

Иллюстрация к комментарию
Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку
2
Автор поста оценил этот комментарий
5 дней? Нормальная такая продуктивность для разработки после основной работы
раскрыть ветку
1
Автор поста оценил этот комментарий

Это как crusader kings что ли

раскрыть ветку
2
Автор поста оценил этот комментарий
Только к домам нет дорог - люди же должны ездить? И площадь перед ратушей всегда должна быть.
Еще можно сделать несколько вариантов частей домов и рэндомно собирать из них дома.
раскрыть ветку
Автор поста оценил этот комментарий

Да уж, недавно я подписался на Лигу Разработчиков Видеоигр и вот такие посты очень вдохновляют. Сам мечтаю разрабатывать игры, вот учу С++ пока. Надеюсь в будущем смогу что-то делать. Автору спасибо за вдохновение.

раскрыть ветку