norlin
@norlin

Каким образом сделать распределение ресурса в игровом мире?

Добрый день!

Для игровой механики (massive multi-player) мне нужно сделать распределение ресурса в мире игры (грубо говоря, в игровом "воздухе", без жёсткой привязки к конкретным "шахтам").

Условия распределения:
- более-менее равномерное
- возможны места повышенной или пониженной "плотности"
- возможен сбор "ресурса" с последующим постепенным восстановлением

Пока что моих знаний хватило только на реализацию самого распределения через гауссову функцию с коэффициентами и несколькими положительными пиками в местах "повышенной плотности" ресурса.

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

Другой вариант: тупо генерировать дискретные элементы по всему миру, которые будут исчезать при "сборе". Тут среди минусов – разве что необходимость обработки огромного кол-ва этих элементов – на вскидку, будет очень ресурсоёмко с т.з. производительности.

Возможно, есть какие-то другие пути решения? (наверняка проблема не уникальная, как в игрострое, так и в математике в принципе)

Или, может быть, хотя бы подскажете, в какую сторону копать?
  • Вопрос задан
  • 348 просмотров
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Зоны (например квадраты или гексы), для каждой определить максимальную плотность ресурса, текущую плотность и скорость восстановления. При движении в пределах зоны перс собирает ресурс, при этом плотность ресурса в зоне (и, соответственно, скорость сбора) падает.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
maaGames
@maaGames
Погроммирую программы
Если не "шахматы", то "взвешенный граф". С его помощью очень легко сделать распределение ресурсов по типу "чем дальше переться, тем больше лежит". Т.е. в каждом узле графа хранятся координаты области, в которой лежит ресурс и количество ресурсов. Весь массив координат триангулируется, чтобы получить сетку, рёбра которой хранят расстояние между соединёнными узлами.
Во-первых, с её помощью легко сделать равномерное распределение ресурсов (чем узлы ближе, тем в каждом из них меньше ресурсов). Во-вторых, этот граф можно использовать для приблизительного поиска пути.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы