Расчет стоимости юнита в игре - PullRequest
1 голос
/ 30 ноября 2010

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

Например, в блоке B есть 2 лазера, 2 тяжелых лазера и 1 ракетная пусковая установка, без ионного бластера, без тяжелого иона, без ядерных ракет, 5 единиц здоровья, 2 щита и 40 ловкости.

Я прошел через 20 различных алгоритмов, пытаясь заставить MS Excel сбалансировать все эти факторы, чтобы дать кораблю оценку.Мой текущий алгоритм отлично работает для некоторых меньших юнитов, но он становится очень неуравновешенным с большими юнитами

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

damage = weapon1*damage1 + weapon2*damage2 + ...

Значение урона умножается на здоровье + 2 * щит + 2 * ловкость.Ловкость и щит умножаются, чтобы дать им вес над здоровьем (юнит не может потерять здоровье, если его нельзя поразить).Я также вычесть стоимость единицы.Таким образом, мое текущее уравнение для одного из моих юнитов выглядит так:

value = damage*(health + 2*shield + 2*agility) - 3*cost

Вот несколько примеров:

  • 1-й блок - 1 лазер, 1 здоровье, 93 ловкости и затраты 1Общая оценка 233.
  • Блок 2 - 2 лазера, ракетная установка и 3 единицы здоровья, но только 76 ловкости.Счет 200.
  • 3-й блок - 6 лазеров, 30 единиц здоровья и 15 щитов, 37 ловкости - 585 баллов.

Я хочу, чтобы баллы блока 3 были выше, нооценки для блоков 1 и 2 довольно хорошие.Кто-нибудь может предложить лучшее уравнение, которое сгладит значения?

Ответы [ 2 ]

1 голос
/ 24 декабря 2010

Эта проблема похожа на мой пример балансировки облака (с открытым исходным кодом, Java). Просто замените Компьютер единицей, а Процесс - оружием.

1 голос
/ 30 ноября 2010

Я думаю, что алгоритм генетического программирования - это хороший подход к решению проблемы, которую вы описываете. Генетическое программирование развивает вычисления алгоритма через итерацию, чтобы минимизировать функцию стоимости. Это делается путем создания набора «мутаций» для применения к алгоритму, например, ваша идея уменьшить стоимость единицы, так как 3R может быть одной из мутаций. Функция стоимости будет чем-то, что увеличивается / уменьшается относительно концепции баланса. Мутации будут оцениваться в свете этой функции стоимости.

См. Книгу Программирование Коллективного разума для кода Python для решения задач такого типа.

...