Выложу один из примеров того, как устроен игровой баланс Daily Sensation. Запись довольно сложная. Нужно вникать, так что кладу под кат.
Итак, вопрос, сколько статей делает в сутки автор с минимумом опыта? (они у нас не спят, так что считаем все сутки)
Дано (всё время в секундах):
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))
и ещё чуть подсократим
864 / author_work_sec * (step_of_rest / author_tire_sec + 1)
Теперь добавим коэффициент опытности автора, потому что профессионал пишет статьи быстрее новичка.
Записываем всё, что получилось ранее в переменную "Statey_v_den".
Statey_v_den = 864 / author_work_sec * (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)
Cтавим Difficulty = 0 для первых номеров и понемногу повышаем до единицы к последним.
Теперь можно как угодно ускорять и замедлять авторов, увеличивать скорость работы и время отдыха, можно делать профессионалов более или менее крутыми - всё равно всё будет считаться правильно.
Но это ещё не всё. Difficulty не обязательно указывать вручную. Можно сделать, чтобы он автоматически равномерно повышался. Минимум в игре может быть 5 сотрудников. Максимум 50. То есть у журнала есть 45 уровней. Один уровень добавляет 1/45 от единицы сложности.
Значит вместо Difficulty пишем (Х - 5)*(1/45).
В результате:
864 / author_work_sec * (step_of_rest / author_tire_sec + 1) * X/4 * (1 + (author_expa_coefficient - 1) * (Х - 5)*(1/45))
Это не учитывает кранча, работы редакторов и многих других мелочей, так что во время тестов формулу скорее всего придётся изменить, чтобы она выдавала результаты чуть поменьше, либо чуть побольше. Но это будет изменение всего одной цифры.
Юридическая сторона
[Print]
Гость