Кофе
emergency
дневник заведен 08-07-2007
закладки:
цитатник:
дневник:
местожительство:
Москва, Россия
07-08-2009 09:25 В блоге разработки про это потом напишу подробнее
Вот можно что-то в лоб посчитать, нет я на всякий случай привязываю к глобальным значениям, чтобы при правках само считалось правильно.

Ну и выходит, фак мой моск
Итак, вопрос, сколько статей делает в сутки автор с минимумом опыта? (они у нас нифига не спят, так что считаем все сутки)

Дано (всё время в секундах):
author_work_sec - время за которое автор с минимумом опыта делает процент статьи
author_tire_sec - время за которое автор получает пункт усталости
danger_tire - сколько пунктов усталости ему надо получить, чтобы убежать отдыхать
step_of_rest - за сколько секунд отдыха он убивает единицу усталости

Теперь считаем:
1) author_work_sec * 100 = время на написание всей статьи без учёта отдыха
2) step_of_rest * danger_tire = время на то, чтобы устать работать
3) время на написание всей статьи без учёта отдыха / время на то, чтобы устать работать = сколько раз он успевает целиком устать во время работы над статьёй
4) step_of_rest * danger_tire = время на полный отдых
5) количество отдыхов во время написания статьи * время на полный отдых = сколько времени он отдыхает во время написания статьи
6) время на написание всей статьи без учёта отдыха + сколько времени он отдыхает во время написания статьи = реальное время написания статьи
7) 86400 (секунд в сутках) / реальное время написания статьи = сколько статей он пишет в сутки

Сводим всё вместе и переводим в переменные:
86400 / ((author_work_sec * 100) + ((author_work_sec * 100) / (author_tire_sec * danger_tire) * step_of_rest * danger_tire)) = сколько статей он пишет в сутки

danger_tire сокращается

86400 / ((author_work_sec * 100) + ((author_work_sec * 100) / author_tire_sec * step_of_rest))

и ещё чуть подсократим

86400 / (author_work_sec * 100 * (step_of_rest / author_tire_sec + 1))

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

Т.е. записываем это всё в переменную "Statey_v_den".

Statey_v_den = 86400 / (author_work_sec * 100 * (step_of_rest / author_tire_sec + 1))

Теперь у нас есть: author_expa_coefficient означающий, насколько быстрее новичка работает максимально прокачанный автор (сейчас author_expa_coefficient = 2, то есть профессионал пашет в два раза быстрее.)

Теперь есть некий журнал уровня Х. Уровень журнала означает сколько в этот момент в редакции должно быть сотрудников (если их меньше, то на этом уровне отдел кадров постепенно нанимает новых пока не будет Х). Игрок должен стремиться к тому, чтобы четверть сотрудников была авторами (если их меньше - номер сложнее сдать, если больше - то сложности у других трёх профессий, и это в результате тоже мешает сдать номер). Т.е. в идеале X/4 = это то, скока у игрока авторов.
Значит если мы скажем ему сдать Statey_v_den * X/4 = то ему будет для этого достаточно авторов-новичков.
А если Statey_v_den * X/4 * author_expa_coefficient - то для того чтобы сдать номер ему нужны будут целиком прокачанные авторы профессионалы.
То есть нам надо добавить коэффициент сложности номера: Difficulty.
Присобачиваем сложность к формуле:
Сколько статей нужно сдать в номер уровня X
Statey_v_den * X/4 * (1 + (author_expa_coefficient - 1) * Difficulty)
И всё. Теперь ставим Difficulty = 0 для первых номеров и понемногу повышаем до единицы к последним. Под конец игрок вынужден держать всех авторов процессионалами иначе не может пройти дальше.

Теперь можно как угодно ускорять и замедлять авторов, увеличивать скорость работы и время отдыха, можно делать профессионалов более или менее крутыми - всё равно всё будет считаться правильно.

Но это ещё не всё. Difficulty не обязательно указывать вручную. Можно сделать, чтобы он автоматически равномерно повышался. Минимум в игре может быть 5 сотрудников. Максимум 50. То есть у журнала есть 45 уровней. Один уровень добавляет 1/45 от единицы сложности.
Значит вместо Difficulty пишем (Х - 5)*(1/45).
В результате:

86400 / (author_work_sec * 100 * (step_of_rest / author_tire_sec + 1)) * X/4 * (1 + (author_expa_coefficient - 1) * (Х - 5)*(1/45))
Закрыть