Алгоритм динамічного обчислення рівня на основі балів досвіду? [зачинено]


41

Однією з проблем, які я завжди мав у розробці ігор, є вирішення питання, як реалізувати точки досвіду, пов'язані з досягненням рівня. Здається, не існує шаблону для отримання рівня в багатьох іграх, в які я грав, тому я припускаю, що у них є статична таблиця словників, яка містить точки досвіду порівняно з рівнем. напр

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.
Випадково832

1
en.wikipedia.org/wiki/Exponential_growth Слід очистити речі.
aaaaaaaaaaaa

1
@Stephen: @ Random832 є правильним, і "експоненціальне", і "геометричне" зростання посилаються на постійне співвідношення між послідовними / рівновіддаленими членами (це означає, що швидкість зростання пропорційна поточному значенню - в обчисленні це висловлюється вимовою експоненціальна функція має f'(x) = c*f(x)) . Термін "геометричний" використовується, коли домен (вхід) дискретний (наприклад, ціле число). Формула прикладу @ Джорджа вище рівня 1 є Experience = 100 * 2^(Level-2), яка є експоненціальною. Формула вашого прогресування, що знаходиться вище рівня 1 Experience = 100^(Level-1), також є експоненціальною.
BlueRaja - Danny Pflughoeft

Відповіді:


36

Досить поширене використання квадратного відношення.

level = constant * sqrt(XP)

Або приблизний еквівалент лінійно зростаючого проміжку рівня.

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

Ці системи працюють досить добре, коли посилення XP приблизно лінійне. Якщо персонаж високого рівня може заробити XP швидше, ніж персонаж низького рівня, то це не є правильною системою.


3
Для гравців типу Achiever, я підозрюю, є великі сподівання на збільшення виграшу XP, коли їхній характер прогресує. Я вважаю ваше рішення цікавим, і, напевно, я його змінюю лише злегка, щоб створити відмінності на зразок 107-214-321-428, тим самим перешкоджаючи гравцеві бачити лише круглі цифри, а також сподіваюся, що це може додати, щоб ця гра відчувала просто трохи "органічніше" (я намагаюся придумати краще слово, ніж це, але "органічне" - це все, що я маю на даний момент).
Рандольф Річардсон

1
+1 це саме те, що я робив у минулому, чудово працює
BlueRaja - Danny Pflughoeft

3
Рівняння для лінійно зростаючого рівня зазору. level = (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
@George Граючи разом з коефіцієнтами, ви можете легко використовувати логарифмічну функцію для масштабування рівня гравця. +1 за використання математики
Стівен

2
Зауважте, що це реалізація експоненціальної вимоги XP. level = log(XP) <=> XP = e^level. Вимога може виявитися трохи крутою для останніх рівнів, але це буде нормально з відповідним зростанням накопичення XP.
aaaaaaaaaaaa

@eBusiness: Добре, але це не може бути проблемою, оскільки персонажі вищого рівня, як правило, заробляють більше очок легше і за коротший час (наприклад, атакуючи / вбиваючи більш потужних монстрів з більшою швидкістю удару). Це одна з причин, чому я думаю, що ця математика може бути добре підходить до відеоігор (особливо в контексті MMORPG).
Рендольф Річардсон

2
Мені просто дивно, що ОП конкретно переживає експоненціальне зростання, а потім приймаю відповідь, що описує те саме саме по-іншому. Але я здогадуюсь, це його проблема.
ааааааааааа

1
@eBusiness: Можливо, моя відповідь уточнила щось про експоненціальне зростання, яке раніше не було зрозумілим? Існує багато різних способів застосування математики, і я не впевнений, що навіть найкращий вчитель математики міг їх усіх знати (ну, можливо, другий найкращий вчитель математики в будь-якому випадку).
Рендольф Річардсон

9

Це деякі способи, якими я користувався до цих пір. Вони сортуються за темпами зростання (просто множимо кожне рівняння на постійне значення):

  1. exp = рівень (цей може здатися дивним, але для деяких ігор, які винагороджують зміни exp відповідно до рівня гравця, як-от прикордонні, до яких може підходити)

  2. exp = рівень * журнал 10 (рівень)

    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
    

4

Я думаю, це залежить від того, наскільки легко гравець може отримати досвід. Якщо гравець може отримати 200 xp при lvl 1 за 20 хвилин, а потім отримати 200 xp при lvl 2 за 2 хвилини, то вам потрібно масштабувати свій xp в експоненціальному масштабі.

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


4

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

Погляньте на RPGMaker, щоб побачити, як вони роблять справи. Зокрема, подивіться криві параметрів на знімках екрана розділу "Додати деяку унікальність за допомогою налаштування пускового обладнання" розділу " Створення документа головного символу" .

В основному у вас може бути крива того, скільки XP потрібно для вирівнювання, то різні криві на те, скільки HP, MP, витривалість, міцність і т. Д. Набувається на кожному рівні.

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


2

Розглянемо час

Спочатку потрібно розібратися, як швидкість набуття досвіду масштабується з рівнем. Тоді ви можете налаштувати вирівнювання за необхідним часом . Якщо кожен додатковий рівень дозволяє вам набути досвіду вдвічі швидше, і вам потрібно вдвічі більше досвіду для рівня, то для кожного рівня буде потрібно однакова кількість часу.

Моя пропозиція - подумати про те, скільки часу повинен провести гравець, а потім пристосувати вирівнювання до цього.


-3

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


3
Відповіді мають бути трохи більш чіткими, ніж просто проста пропозиція. Спробуйте пов’язати деякі переваги цієї стратегії над тим, щоб мати таку динамічну систему, як потрібна.
MichaelHouse

Також зауважте, що додаткову інформацію повинен розміщувати оригінал автора ; якщо інші користувачі мають більше додати, вони повинні розглянути можливість окремої відповіді.
Gnemlock
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.