Алгоритм інструменту теоретичної статистики на основі гри (ліга легенд)


10

Я хотів би створити тренажер (в основному для тестування) для гри (League of Legends).

Основи гри:

у вас є герой, який має деякі статистичні дані:

  • Точка здоров'я
  • Пошкодження атаки
  • Швидкість атаки
  • Броня
  • Проникнення броні
  • Швидкість руху

Герой може мати 4 навички (ви отримуєте по одній точці навичок на кожному рівні) (Вони активуються вручну, більшість часу мають відмову, пошкодження, співвідношення масштабів сили нападу / атаки та рівень майстерності) + пасивний навик

Ви можете вбивати ворожих героїв або нейтральних монстрів, у них однакова статистика:

  • Точка здоров'я
  • Пошкодження атаки
  • Швидкість атаки
  • Броня

Що я хотів би зробити:

Створіть інструмент для перевірки, чи певний предмет, або певне збільшення статистики пришвидшить вашу вбивчу силу / швидкість.

карта: http://evtron.com/Evtron-Alpha/wp-content/uploads/2011/02/Summoners-Rift.jpg

Приклади статистики:

  • Hp: 420
  • Оголошення: 55
  • Швидкість атаки: 0,613 (атаки / с -> кожна атака за 1 / 0,613 с)
  • проникнення броні: 25

Характер автоматично атакує супротивника 1 / швидкістю атаки та завдає шкоди при пошкодженні атаки (існує формула для обчислення шкоди, але це не важливо на цій фазі, я думаю, щойно вони мертві, переходячи до наступного з переміщенням швидкості ( на карті можна побачити табори, жовті черепи)

Я думав про алгоритм:

  1. Я думав, що якщо я просто зароблю з i = 0 до i = 30000 (рахуючи мс), тож я можу просто перевірити ворожий hp та мою hp, а також у кожну мс виявився такий поганий (досить процесор важкий, і мені б хотілося помістити в нього випадкові випадки, тому я повинен мати можливість підбити підсумок 1 к ітерації, що неможливо)

  2. По-друге, я думав, що я повинен просто зробити для від i = 1 до 30, і перевіряти кожну секунду, і перевіряти, що сталося в останню секунду, але деякі нейтральні монстри знаходяться у великому таборі (до 4 монстрів), і таким чином код ставав складнішим і складнішим.

  3. Я буду створювати теми для кожного гравця / монстрів, і як тільки вони закінчать шукати, коли вони померли, і зменшу к.с. гравця.

Моє запитання, чи це правильний шлях?

TLDR: Я хотів би створити інструмент для створення аналізу (повторити 1 к і обчислити середнє значення) про гру, яка збільшить статистику, зробить героя швидше нейтральними монстрами.

Я вважаю за краще Java, але атм я застряг у алгоритмі.


@Karoly S: Так, це моє погано, .com -> .eu

Я працюю над цим:

Я перевіряю час, що залишився на кожному об'єкті (вміння гравця, автоматична атака, помилки), і завжди вибираю найкоротший час, зберігаю last_time та додаю час до часу, під час наступного раунду я обчислюю час за (time- останнього разу)

Якщо в об’єкта залишився час 0, він зробить все, що потрібно зробити.

Я не знаю, ефективний спосіб це чи ні, але це найкраще, що я міг зробити.


1
Можливо, вам пощастить попросити у розділі / розробці ігор / сайті Stack Exchange, спробуйте домогтися мода, щоб перемістити його, хоча ймовірніше, що вони все одно будуть. Симулятор джунглінгу був би цікавим, я подумаю і подивіться, що я придумаю.
Karoly S

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

Абсолютно, це те, про що я думав, хоча і не майже це глибоко, але мені було б цікаво. Моїм початковим підходом було б побачити, чи можлива ефективна, хоча і простіша версія вашого №2. Я хотів би обговорити це з вами в більшій мірі. І так, ваша здогадка була б правильною :)
Karoly S

Звучить для мене круто, я залишу тему відкритою, можливо, хтось уже має уявлення про неї. мій електронний лист (etheld at gwelican dot com)

Звучить добре, я подумаю над цим і надішлю вам трохи пізніше сьогодні.
Karoly S

Відповіді:


1

Альтернативи моделюванню кадрів за кадром:

Ви можете отримати певне розумне наближення для моделювання за такою формулою, як

rawDamage = <some function of strength?)
Damage = rawDamage - enemyArmorReduction
DPS = (attackSpeed * Damage) * enemyArmorMod
myRemainingHP = myDPS / theirHP  - theirDPS / myHP

Ви також можете підтримувати чергу черги на переміщення, щоб симулювати за ходом, а не за тик:

// my aspd = 4 attacks per second, his aspd = 3 attacks per second
0.0s : start battle
0.25s: I attack
0.33s: He attacks
0.50s: I attack again
...
1.00s: I attack
1.00s: He attacks
...

Черга переміщення буде більш точною, оскільки вона правильно стосується того, що пошкодження дискретні, а не безперервні. Наприклад, якщо я завдаю 50 збитків за 0 секунд, а ще 50 за 1 секунду, мій DPS був би 50, але я б убив ціль 100 HP за 1 секунду.

@hammar: це правда. чим коротший бій, тим менш точним буде оцінка на основі ДПС.
Джиммі

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