Алгоритм динамического расчета уровня, основанного на баллах опыта? [закрыто]

42

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

Experience   Level
0            1
100          2
175          3
280          4
800          5

... Не существует рифмы или причины, по которой 280 очков соответствуют уровню 4, это просто так.

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

Experience   Level
0            1
100          2
200          3
400          4
800          5
1600         6
3200         7
6400         8

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

У кого-нибудь есть какие-либо указатели или методы, которые они используют, чтобы решить, как выровнять персонажа на основе опыта? Я хочу быть честным в прокачке уровней и опережать игроков, чтобы не беспокоиться о постоянном добавлении новых поисков опыта / уровней.

Джордж
источник
4
Нет, это просто более медленная экспонента (умножение на 10 каждые ~ 3,3 уровня или 100 каждые ~ 6,6 уровня вместо каждого уровня). Геометрия будет выглядеть как 1 [00], 4, 9, 25, 36 и т. Д. Даже 1100 1210 1331 1464 - это экспоненциальный ряд, умноженный на 1,1.
Random832
1
en.wikipedia.org/wiki/Exponential_growth Должен прояснить ситуацию.
aaaaaaaaaaaa
1
@Stephen: @ Random832 является правильным, и «экспоненциальный», и «геометрический» рост означают постоянное соотношение между последовательными / эквидистантными терминами (что означает, что скорость роста пропорциональна текущему значению - в исчислении это утверждается выражением экспоненциальная функция имеет f'(x) = c*f(x)) . Термин «геометрический» используется, когда домен (входной) является дискретным (например, целое число). Формула для примера @ George, выше уровня 1 Experience = 100 * 2^(Level-2), имеет экспоненциальный характер. Формула вашего прогресса выше уровня 1 Experience = 100^(Level-1)также экспоненциальная.
BlueRaja - Дэнни Пфлюгофт

Ответы:

37

Довольно часто используется квадратное отношение.

level = constant * sqrt(XP)

Или приблизительный эквивалент линейно увеличивающегося разрыва уровня.

Level   XP      Difference
1       0       -
2       100     100
3       300     200
4       600     300
5       1000    400

Эти системы работают довольно хорошо, когда усиление XP примерно линейно. Если персонаж высокого уровня может заработать XP быстрее, чем персонаж низкого уровня, то это неправильная система.

AAAAAAAAAAAA
источник
3
Я подозреваю, что для игроков типа Achiever есть большие надежды на увеличение XP, когда их персонаж прогрессирует. Я нахожу ваше решение интересным, и я, вероятно, настрою его лишь слегка, чтобы получить различия, такие как 107-214-321-428, таким образом не давая игроку видеть только круглые числа, а также в надежде, что это может добавить к ощущению игры просто немного более «органический» (я пытаюсь придумать лучшее слово, чем это, но «органический» - это все, что у меня есть на данный момент).
Рэндольф Ричардсон
1
+1 это именно то, что я делал в прошлом, прекрасно работает
BlueRaja - Дэнни Пфлюгофт
3
Уравнения для линейно растущего уровня разрыва. уровень = (sqrt (100 (2 опыта + 25)) + 50) / 100 и опыт = (уровень ^ 2 + уровень) / 2 * 100- (уровень * 100)
C9HDN
3
Отличный ответ, и мне нравится кривая, которую это производит. В итоге я использовал константу 0,04. Для тех, кто интересуется, обратная формула для вычисления XP: XP = уровень ^ 2 / константа.
BradH
3
@BradH На самом деле, похоже, что XP = (уровень / постоянный) ^ 2. В php это может быть представлено как XP = pow (уровень / постоянная, 2) или в более поздних версиях (уровень / постоянная) ** 2
Тейлор Дондич
17

Вы, вероятно, найдете полезными логарифмические функции, так как они могут быть использованы для замедления роста по мере увеличения опыта. Вот две веб-страницы, которые объясняют, как они работают:

  Графики логарифмических функций
  http://www.analyzemath.com/Graphing/GraphLogarithmicFunction.html

  Введение в построение графиков логарифмических функций
  http://www.purplemath.com/modules/graphlog.htm

Вот как это выглядит на графике, который, мы надеемся, будет соответствовать вашим потребностям:

введите описание изображения здесь

Рэндольф Ричардсон
источник
1
@ Джордж Поиграв с коэффициентами, вы можете легко использовать логарифмическую функцию для масштабирования уровня вашего игрока. +1 за использование математики
Стивен
2
Обратите внимание, что это реализация экспоненциального требования XP. level = log(XP) <=> XP = e^level, Требование может оказаться немного крутым для последних уровней, но оно будет работать нормально с подходящим ростом накопления XP.
аааааааааааа
@eBusiness: Хороший вопрос, но это не может быть проблемой, поскольку персонажи более высокого уровня, как правило, зарабатывают больше очков легче и в более короткий промежуток времени (например, атакуя / убивая более сильных монстров с более высокой скоростью попадания). Это одна из причин, почему я думаю, что эта математика может быть хорошо подходит для видеоигр (особенно в контексте MMORPG).
Рэндольф Ричардсон,
2
Я просто нахожу немного странным, что ОП конкретно беспокоится об экспоненциальном росте, а затем принимает ответ, который просто описывает то же самое по-другому. Но я думаю, что это его проблема.
аааааааааааа
1
@eBusiness: Возможно, мой ответ прояснил кое-что об экспоненциальном росте, который ранее не был ясен? Есть много разных способов применения математики, и я не уверен, что даже самый лучший учитель математики мог бы знать их всех (ну, может быть, второй лучший учитель математики в любом случае).
Рэндольф Ричардсон
9

Вот несколько способов, которые я использовал до сих пор. Они отсортированы по скорости роста (просто умножьте каждое уравнение на постоянное значение):

  1. exp = level (эта игра может показаться странной, но в некоторых играх награда exp изменяется в зависимости от уровня игрока, например, на приграничных землях)

  2. exp = level * log 10 (level)

    1   0
    2   0.6
    3   1.4
    4   2.4
    5   3.5
    6   4.6
  3. exp = level ^ const_value: для моего примера я установил значение const равным 3/2

    1   1
    2   2.8
    3   5.1
    4   8
    5   11.2
    6   14.7
Ali1S232
источник
4

Я думаю, это зависит от того, насколько легко игрок может получить опыт. Если игрок может получить 200 очков опыта на уровне 1 за 20 минут, а затем получить 200 очков опыта на уровне 2 за 2 минуты, то вам необходимо экспоненциально увеличить масштаб своего опыта.

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

wangburger
источник
4

Часто точки, необходимые для получения уровня, основаны на кривой. Во многих ролевых играх, где есть также много других характеристик и атрибутов вашего персонажа, которые увеличиваются с вашим уровнем, они также будут на своих кривых.

Взгляните на RPGMaker, чтобы увидеть, как они работают. В частности, посмотрите на кривые параметров на скриншотах раздела «Добавьте некоторую уникальность путем настройки стартового оборудования» документа « Создание главного персонажа» .

По сути, у вас может быть кривая того, сколько XP требуется для повышения уровня, тогда разные кривые того, сколько HP, MP, выносливости, силы и т. Д. Получено на каждом уровне.

введите описание изображения здесь

Адам Харт
источник
2

Учитывать время

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

Я предлагаю подумать о том, сколько времени игрок должен потратить, а затем адаптировать уровень к этому.

Вилли Козел
источник
-3

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

Лукаш Баран
источник
3
Ответы должны быть более конкретизированы, чем просто предложение. Попробуйте связать некоторые преимущества этой стратегии с наличием динамической системы, подобной той, о которой вы просили.
MichaelHouse
Также обратите внимание, что дополнительная информация должна быть опубликована оригинальным автором ; если у других пользователей есть что добавить, они должны рассмотреть возможность размещения отдельного ответа.
Гнемлок