Алгоритм инструмента для теории статистики корабля на основе игры (League of Legends)

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, а также в каждую мс получалось так плохо (довольно тяжелый процессор, и я хотел бы положить в него случайное число, чтобы я мог суммировать итерацию 1k, что невозможно)

  2. Во-вторых, я подумал, что я должен просто сделать for от 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 на 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: это правда. чем короче бой, тем менее точной будет оценка на основе ДПС.
Джимми
Тот факт, что в игре есть оглушения и другие дебаффы, делает такой инструмент очень трудным для достижения, потому что разные игроки могут иметь разные результаты по степени убийства. В любом случае хороший ответ.
Гримшоу