AlexSpl » 20 фев 2011, 13:44
Раздел 17. Формула расчёта количества очков.
Согласно руководству Heroes of Might and Magic: The Official Strategy Guide, выложенному Miner'ом, формула расчёта количества очков, получаемых за прохождение сценария, отличается от той, что представлена в Разделе 17.
Points = max(0, floor(200 - N1 - N2 - N3 - N4)),
Score = floor(MapRating * Points), где
Points - количество очков, получаемых за прохождение сценария;
Score - итоговый счёт;
MapRating - рейтинг карты сценария, показываемый при старте;
N1 = max(1, min(N, 60));
N2 = 1/2 * max(0, min(N - 60, 60));
N3 = 1/4 * max(0, min(N - 120, 240));
N4 = 1/8 * max(0, N - 360);
N - количество дней, затраченных на прохождение карты;
floor() - округление вниз.
Иными словами, за каждый день, проведённый на карте:
1) с 1-го по 60-й: отнимается 1 единица базового рейтинга;
2) с 61-го по 120-й: отнимается пол-единицы (1/2) базового рейтинга;
3) со 121-го по 360-й: отнимается четверть единицы (1/4) базового рейтинга;
4) начиная с 361-го: отнимается одна восьмая единицы (1/8) базового рейтинга.
Пример 1. Сколько очков заработает игрок, пройдя карту с рейтингом 150% за 400 дней, и каков будет итоговый счёт?
N1 = max(1, min(400, 60)) = 60;
N2 = 1/2 * max(0, min(400 - 60, 60)) = 1/2 * 60 = 30;
N3 = 1/4 * max(0, min(400 - 120, 240)) = 1/4 * 240 = 60;
N4 = 1/8 * max(0, min(400 - 360)) = 1/8 * 40 = 5.
Итого,
Points = max(0, floor(200 - 60 - 30 - 60 - 5)) = 45,
Score = floor(150% * 45) = 67.
Пример 2. Рассчитать очки и итоговый счёт за прохождение карты с рейтингом 60% за 60, 61, 62 и 63 дня.
Опуская промежуточные вычисления, получим:
1) 60 дней: Очки = floor(200 - 60) = 140, Счёт = floor(0,6 * 140) = 84.
2) 61 день: Очки = floor(200 - 60,5) = 139, Счёт = floor(0,6 * 139) = 83.
3) 62 дня: Очки = floor(200 - 61) = 139, Счёт = floor(0,6 * 139) = 83.
4) 63 дня: Очки = floor(200 - 61,5) = 138, Счёт = floor(0,6 * 138) = 82.
Здесь я хочу подчеркнуть, что при расчётах выполняется два округления вниз! Т.е., например, для 63 дней без правильного округления получается неверный результат:
floor(0,6 * (200 - 61,5)) = floor(0,6 * 138,5) = floor(83,1) = 83! Правильный результат здесь - 82.
Вот оно как всё на самом деле!
Хотя формула в Справочнике верна (под Очками там подразумевается Счёт), если находиться на карте не более 60 дней.