Форум HeroesWorld-а - Показать сообщение отдельно - [ПРОГРАММА] Создание генератора случайных карт для вторых героев
Показать сообщение отдельно
#23
Старый 01.10.2009, 21:32
  #23
^
Ty3o-ny3o
 
Аватар для Ty3o-ny3o
📖
Регистрация: 23.02.2009
Адрес: Киев
Сообщения: 110
Регистрация: 23.02.2009
Адрес: Киев
Сообщения: 110
По умолчанию
Re: [ПРОГРАММА] Герои Меча и Магии II Золотая серия: Моды, программерская деятельность

Lux in tenebris, а как ты заставил работать эту прогу? У меня сразу же в Виндовс выкидывает.

Работы над генератором медленно, но ведутся. Думаю, это всёже лучше, чем ничего. Скринов созданных карт пока не кладу, ибо всё это еще очень будет далеко по уровню даже от обычного генератора, а не то что от продвинутого, который многие ждут. Я не заморачиваюсь по поводу тестов, т.к. больше времени уделяю сейчас алгоритму (де)генерации. Приблизительный план создания карт и типичные проблемы стандартного рандомизатора, если кому интересен процесс, выкладываю ниже. (Извините, не нашел, как убрать у вас тут текст по кат...)


------
Замки
------

1) в зависимости от указания игрока, где должен находиться его замок, определяется участок (9 квадратов:
северо-запад, север, северо-восток
запад, центр, восток
юго-запад, юг, юго-восток)
2) если установлен Рандом - программа выбирает случайный квадрат, а в нём позицию, не слишком близкую к краю земли, всегда с некоторым запасом по сторонам.
3) следующие за 1ым замки не должны:
- находиться ближе чем на n позиций друг к другу. Вражеские замки распологаются на максимально допустимой или около того дистанции, во избежания "детского мата".
4) Если карта маленькая или много замков и они стоят близко друг к другу, генератор помечает их как "открытые", которые требуется потом "закрыть" ландшафтом (горы, деревья...). так подход к замку тоже будет занимать некоторое время.


Варианты(шаблоны) расстановки замков:

если замков(изначально занятых игроками) 2 - они ставятся в противоположных квадратах(северо-запад и юго-восток, например) или просто сторонах(север и юг, неважно где именно).
3 игрока и 3 замка - варианты, имеющие длиннейший путь друг к другу. Замки 2ух из 3ёх игроков не должны распологаться слишком близко друг к другу, хотя и симметрии тоже не будет.
4 игрока могут распологаться таким образом, что одна пара может быть близко друг к другу. Вообще строгого разброса нет. Рандомные позиции.

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



-----
Земля
-----

1) Земля в окрестностях замков ставится согласно опций, выставленных игроками. Если её нет - рандом.

2) Сначала просматриваются шаблоны. По наличию воды на карте (суша или островная система) устанавливается группа подходящих по типу шаблонов. С сушей всё понятно, острова берутся по шаблонам + догенерируются переходы между сушей и расширяются/сужается пространство островов.

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

4) Догенерация земли и островов подчиняется правилам:

- не ставить одиночных, отдельных от других клеток (остров в 9 клеток по 3 в ряд - это несерьёзно).
- следить чтобы вся земля была задействована, обеспечить переходы, отсутствие "мертвых", бессмысленных зон и длинных узких мостов.
- острова, состоящие из меньшего, чем n числа клеток не имеют смысла.

Такой остров может быть соединен с основным континентом с помощью "моста".
- делать переходы из земли типа Dirt для связи "чистых" типов местности и Beach только для побережья.


-----
Пути и дороги
-----

1) Транспортная сеть (явные и неявные дороги: асфальт, пути, проходы, тропы и т.д.) создается на основе большого ассортимента шаблонов, которые перетасовываются между собой для выведения конечного смешанного результата.

2) При этом:

- Каждый замок (по желанию; кроме нейтральных) получает выход на главную (явную) дорогу.
- из шаблонов заимствуются не отдельные клетки-позиции дороги, достаточно большие участки. (для избежания несостыковок). Все элементы такого "пазла" связываются между собой догенерированными переходами.

3) 2ой вариант построения транспортной сети состоит в выведении дороги "на лету", т.е. анализируя маршрут пути следования по ближайшим к центральной 8-ми клеткам. Откинут как не гарантирующий гармонии и целостности карты.


-----
Ландшафт
-----

1) На карту ставятся отдельные, взятые из библиотечных шаблонов мелкие участки ландшафта (лес из нескольких деревьев, каменная гряда, другие ансамбли...) в соответсвии с близлежайшими окрестностями (принцип анализа соседних участков на совместимость природы).

2) При этом:

- элементы ландшафта(ЭЛ) ставятся ЦЕЛИКОМ в зависимости от принятой транспортной системы, чтобы обеспечить нормальную проходимость земель.
- ЭЛ должны создавать удобные нычки и быть максимально задействованы в игре. Т.е. если это лес, то пусть где-то в нём будет стоять лесопилка, если скалы ничего не делают - пусть под ними будет рудник или форт или любой другой объект и т.п..


----------
И еще пару огрехов, допускаемых стандартным генератором (мелочь, а
неприятно):
----------

1) Ресурсы и, что еще хуже, артефакты легко достаются из-за спины монстров. Думаю, этим все пользовались, но это не совсем правильно.

Видимое решение: ставить связку "монстр +сокровище" сокровищем в недоступную без прохождения битвы с монстром зону. Опять-таки пытаться анилизировать ландшафт и "подгонять" к нему весь клад.
При этом, если монстр стоит в начале перехода, за которым находиться ресурс и (возможно) чужой замок - закрывать переход с двух сторон одинаковыми по силе монстрами. По-моему справедливо.

2) Временная недоступность шахт первой необходимости. Пожалуй, проблема номер 1, сводящая начало игры к тупому поиску ресурсов с войсками первых уровней.
Видимое решение: анализировать примыкаемую к замку территорию на подходящее для расположение рудника или лесопилки место. При этом, путь к ним не должен вызывать сильных затруднений (хотя, зависит от уровня сложности). Охрана шахты, в случае, если последняя находится совсем близко к замку, символическая. Дальше - халява, т.е. без охраны на средний уровень сложности.

3) Один-два активных элементов на карту (строения, артефакты, монстры, ресурсы и т.п.) иногда находятся в мертвых зонах, куда либо невозможно добраться, либо же нет в том никакого смысла.
Гарантированного решения пока не знаю. Скорей всего как-то нализировать ландшафт и всё касательно того места, на которое намериваемся поставить элемент.

4) Неравномерное распределение встречных ресурсов и монстров. Отсутствие в твоём районе достаточного кол-ва начальных ресурсов или какой-нибудь шахты. Отсутствие шахт со специфичными, нужными для отстройки твоего типа города ресурсами. Неравномерное распределние шахт по карте, когда у одного замка их пруд пруди, а у остальных очень мало.
__________________
Heroes II-III

Элементально, Ватсон...
Heroes II-III

Элементально, Ватсон...
Ty3o-ny3o вне форума
Ответить с цитированием