Фруктовое безумие
TypeScript · Яндекс.Игры · 2026 · Геймдизайн и разработка
Активный кликер под Яндекс.Игры: комбо, криты, престиж, оффлайн-доход. Ноль рантайм-зависимостей, один билд на телефон и десктоп.
Задача
Нужен был каркас, с которого можно быстро собирать кликеры под площадку: чтобы SDK, сейвы, реклама и покупки были решены один раз, а от игры к игре менялись только баланс и ассеты.
Что сделано
- Десять механик: комбо до x3, криты, «фруктовое безумие» x10, золотые сферы, генераторы пассивного дохода, престиж, оффлайн-доход, ачивки, персонажи и скины
- Прослойка Platform: игра не дёргает Яндекс напрямую — SDK подхватывается, если есть на странице, иначе всё работает в голом браузере
- Облачные сейвы с локальной копией и разбором конфликта по свежести — прогресс не пропадает у анонима и при обрыве сети
- Rewarded-ролики, межстраничная реклама и покупки с ценами из каталога площадки, а не зашитыми в код
- Русский и английский; ключ перевода — сама русская строка, поэтому забытый перевод видно на экране, а не по пустому идентификатору
- Пайплайн ассетов: графика в WebP, звук в Opus/AAC через sharp и ffmpeg
- Один билд на мобилку и десктоп — переключение чисто на CSS, точка перелома 900px
Результат
Весь баланс живёт в одном src/balance.ts, чисел больше нигде нет. В сборке ноль сторонних рантайм-зависимостей: TypeScript и Vite нужны только на этапе сборки.
Стек
TypeScript, Vite, Яндекс.Игры SDK, sharp, ffmpeg
Играть — демо
Код на GitHub
Все кейсы · На главную