Получить ограничения из реальной жизни
Часто ответ о том, как найти правильный алгоритм, начинается с рассмотрения того, как это происходит в реальной жизни. Вы смотрели на это? Сверху головы я могу думать о следующем:
- Есть дороги, чтобы соединить здания и другие достопримечательности
- Здания размещаются вдоль существующих дорог, если это возможно
- Если дороги нет, здание помещается в пустое место и соединяется с соседней дорогой через собственную дорогу.
- Здания размещаются рядом с другими зданиями, которые представляют интерес для их жителей: люди переезжают жить на свои рабочие места, в магазины продуктов питания и одежды и т. Д.
- Здания размещаются рядом с ресурсами, необходимыми для их предполагаемого использования. Например, лесопилка находится рядом с лесами или даже на лесной поляне. людям нужна вода и еда (растения, животные), чтобы где-то жить.
- Здания размещаются вдали от других зданий, которые наносят ущерб их предполагаемому использованию или могут нанести им ущерб. Например, магазин красок пахнет ужасно, поэтому обычно не находится в жилом районе. Точно так же таверны и рестораны очень шумные, поэтому жители не хотят жить на них, а нуждаются в покупателях, поэтому должны быть рядом с жилыми районами.
- В некоторых странах действуют законы о зонировании, которые также влияют на размещение зданий. Обычно это более формализованный способ предвидеть, какие типы зданий могут быть вредными друг для друга, или какие ресурсы являются уникальными для данного района (например, высококачественная почва предназначена для полей, а не для строительства парковок на них).
- Здания предназначены для жителей, в них отражается их личный стиль и предпочтения. Например, если население бедное, они гораздо чаще разделяют землю (небоскребы, жилые дома), если они более обеспечены, они могут получить презервативы, если они богаты, они получат отдельную виллу. Если определенным группам не нравятся другие группы, они будут менее склонны к совместному проживанию. Если есть сходство между определенными группами, они могут перемещаться в аналогичные области.
Примените их к вашей топографии
Если у вас есть эти ограничения, вы можете попытаться построить алгоритм вокруг него. Например, создайте свою топографию и распределите необходимые ресурсы по всей карте (возможно, следите за размещением небольших месторождений наиболее важных ресурсов в стартовой зоне, а затем более крупных месторождений дальше и друг от друга). Это, конечно, когда в игру вступают нужды и механизмы вашей игры, но вы, вероятно, также добавите случайный элемент.
Затем постройте предприятия (и их жилые дома) рядом с теми ресурсами, которые их используют. Например, карьер рядом с большой горой. Затем добавьте необходимую им инфраструктуру. Например, торговый пост с почтовым отделением и таверной, где они могут вести бизнес и продавать свой продукт, кузница для предоставления инструментов и т. Д.
Чтобы решить, что и куда делится, разбейте карту на плитки, где вы рассчитываете число для каждой плитки, насколько это желательно для определенной цели, используя весовую функцию. Поместите здания в наиболее желательные плитки для этого типа здания. Добавьте правила типа «один торговый пост может обрабатывать 50 предприятий или 100 домов», что увеличивает вероятность добавления другого торгового поста, если город достигает определенного размера.
Получив это, вы должны получить несколько приличных карт. Если вы заметили, что все карты заканчиваются как неестественные фигуры, добавьте штрафы к своим весовым функциям для этих фигур, например, «если моя улица заканчивается рядом с другой улицей, -100 желательность» или «если моя улица пересекает себя, -100 желательность "и т. д. Вы всегда можете добавить случайный элемент, чтобы придать этому более причудливый вид, или добавить другую механику, например," если к перекрестку подключено более N зданий, то превратите его в перекресток с круговым движением ".
Вы можете даже использовать эти ограничения, чтобы придать разным картам разные ощущения, например, чтобы у определенной страны было больше гор в топографии, или чтобы определенная культура строила больше извилистых дорог, а другая предпочитала прямые дороги и т. Д. Все, просто изменив одну из своих весовые функции.
Упростить
Конечно, этот подход слишком сложен для игр, которые не являются торговыми симуляторами, но в любом случае решите эту проблему и посмотрите, какие типы зданий имеют смысл для вашей игры, и исключите ненужные. Затем придумайте упрощенные правила, такие как «размещать города рядом с рекой, горой или хорошей почвой. 1 здание на 100 ресурсов, предприятия на основе типа ресурса, 10 жилых зданий на каждый полный набор продуктов питания / крафта ... или просто» 1 м реки / 1 м 2 почвы может поддерживать 10 жилых зданий ... все, что имеет смысл для игры. Тем не менее, как только вы узнаете, сколько у вас территории (например, нет зданий на крутых склонах гор) и сколько зданий эта территория может поддерживать, просто разместите наборы зданий в этой области, пока она не заполнится (например, 1 бизнес-здание, 10 жилых домов , 3 инфраструктуры, или что угодно) и соединить их с дорогами