оценка ранга на основе нескольких переменных (программирование игр) - PullRequest
1 голос
/ 28 октября 2011

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

Например, у меня есть секция хитпоинтов класса корабля следующим образом:

// section private defense
float baseHull;
float hullMod;
float baseArmor;
float armorMod
float baseSheild;
float ShieldMod;
float miscMod = 1.0; // this can be “rarer ship types, i.e. elites or bosses or stations     or the rich.**

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

рейтинг будет определять вероятность победы в бою, а "XP" - за победу в бою. Сложить их все не получится, потому что корабль с 10-метровым урановым покрытием не обязательно лучше, чем корабль с 1-метровым свинцовым покрытием и щитами. для справки, земляная одежда была бы ранга 1, танк M1A1 был бы похож на 5, а звезда смерти поднялась бы на 40-50.

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

1 Ответ

0 голосов
/ 28 октября 2011

Ну, простой способ объединить эти переменные в общее значение точки попадания был бы:

hitpoints = baseHull * hullMod + baseArmor * armorMod + baseShield * shieldMod;

Затем можно было бы назначить, скажем, значения между 0 и 100 для базовых значений, определяющих, «сколько»корпуса, брони и щита, которые у них есть, и значения от 1 до 10 для модифицирующих значений, которые определяют «насколько сильным» является каждый предмет.

Расчет победителя боя может быть сделан следующим образом, дляпример:

totalPoints = ship1Points + ship2Points;
ship1won = (rand() % totalPoints) < ship1Points;

Где точки кораблей - это некоторые значения, рассчитанные по точкам попадания и значениям атаки кораблей.Таким образом, вы рассчитываете общее количество очков двух боевых кораблей и выбираете случайное число от 0 до общего количества очков.Если ship1points, скажем, 20, а ship2points - 50, корабль 1 имеет возможность выиграть 20 / 70. Чтобы еще больше снизить вероятность (скажем, вы хотите быть более уверенным, что победит более сильный корабль),Вы можете умножить обе точки на константу или возвести их в квадрат перед окончательным вычислением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...