Реалізація системи рівнів та XP для геймификації мобільного додатка
Система рівнів та опыту — одна з найбільш надійних механік утримання, тому що створює постійний прогрес без стелі. Користувач завжди знає: «я на рівні 12 з можливих, можу йти далі». Ключова інженерна задача — правильно підібрати криву прогресії та зробити перехід на новий рівень емоційно значимою подією.
Крива прогресії XP
Погана реалізація: кожний рівень вимагає однакову кількість XP. Користувач прокачується занадто швидко, рівні обесцінюються.
Правильна реалізація — експоненціальна крива з вирівнюванням на високих рівнях:
xp_for_level(n) = base_xp * (n ^ growth_factor)
Типові параметри: base_xp = 100, growth_factor = 1.5. Рівень 1 → 2: 100 XP. Рівень 5 → 6: 557 XP. Рівень 10 → 11: 3162 XP. Цифри підбираються під конкретний продукт — важливо, щоб перші 5 рівнів проходилися за першу тиждень, а рівні 10–20 давали ощущення довгострокового прогресу.
Храним таблицю level_thresholds(level, xp_required) — не вичисляємо динамічно, а пишемо один раз. Змінити формулу після запуску майже неможливо без скидання прогресу всіх користувачів.
Начисленне XP
Дія користувача → XP. Список дій та їх «вагу» — бізнес-рішення, але типова схема:
| Дія | XP |
|---|---|
| Щоденний вхід | 10 |
| Завершення основної дії | 25–50 |
| Стрик 7 днів | 100 (бонус) |
| Перша дія типу X | 75 (one-time) |
| Досягнення розблоковано | за значенням досягнення |
Клієнт відправляє подію → бекенд начисляє XP атомарно (UPDATE users SET xp = xp + :amount WHERE id = :user_id RETURNING xp, level) → перевіряє, потрібен ли levelup → повертає LevelUpResult з новим рівнем та даними анімації.
Level up на клієнті
Це момент, ради якого будується вся механіка. Не економ на анімації.
На iOS: CAEmitterLayer з kastомними частинками, Lottie для анімації значка нового рівня, UIViewPropertyAnimator для плавного оновлення прогрессбара. Sound feedback — AVAudioPlayer з коротким победним звуком (але з перевіркою системного режиму без звука!).
На Flutter: AnimationController + TweenAnimationBuilder для XP-бара, lottie package для анімації. HapticFeedback.heavyImpact() в момент level up — важлива деталь.
Оверлей level up показуємо поверх поточного екрана, не в окремому екрані. Користувач натиснув кнопку, отримав XP, бачить анімацію прямо тут — потім продовжує дію.
XP-бар в інтерфейсі
Постійно видимий прогрессбар XP у шапці або в профілі — нагадує про прогрес при кожному заході. Анімоване заповнення при начисленні XP: навіть +10 XP мають візуально «долитися» в бар, а не стрибнути. Затримка анімації 300–500 мс після дії — невелике очікування посилює anticipation.
Рівні як розблокування контенту
Рівні без смислу — декорація. Кожні 5 рівнів: нова тема оформлення, новий аватарний фрейм, доступ до експеріментальної функції, звання в профілі. Це утримує цикл «прокачайся, отримай щось реальне».
Орієнтири за термінами
Базова система з начисленням XP, рівнями та анімацією level up — 2–3 дні (клієнт) + 3–5 днів (бекенд). Розширена з kastомними анімаціями, розблокуванням контенту, інтеграцією з досягненнями та лідербордом — 2–3 тижні. Вартість розраховується індивідуально.







