Розробка мобільної словесної гри: від Trie до мультиплеєра

Словесна гра ламається на дрібницях: хід не зараховано, словник сперечається з гравцем, відгук на дотик запізнюється. Ми розробляємо мобільні словесні ігри під ключ — від словника й правил ходів до гри по мережі. Спірних партій стає в рази менше, а словник оновлюється без перезбирання застосунку.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Розробка мобільної словесної гри: від Trie до мультиплеєра

Кроссплатформна розробка (Flutter, React Native, KMM)Середній~2-4 тижні
Часті запитання

Мобільна словесна гра: де ламається добір слів

Добір слів у грі виходить з ладу раніше, ніж інтерфейс. Словник не покриває словоформи — гравець викладає припустимий іменник у множині, а перевірка ходу його відхиляє.

Партія після цього не розсипається, але довіра до правил втрачається: далі людина грає обережно або йде в застосунок, де приймають більше слів.

Друга точка відмови — відгук на довгих ланцюжках. Логіка ігрового поля має за частки секунди перевірити слово, перетини, бонусні клітинки та нарахування очок, а перебір за списком слів на кожній літері дає помітну затримку на довгих викладках.

Префіксне дерево та правила словозміни знімають проблему: пошук іде за гілками, а не за всім масивом, і підсвічування варіантів залишається миттєвим.

Третє джерело — зв'язок. Перевірка ходу гравця, надіслана на сервер, під час обриву губиться, і партія розходиться: в одного слово прийнято, в іншого — ні.

Рятують ходи з номером і повним станом позиції — застосунок після повторного підключення досилає непідтверджений хід і отримує актуальне поле.

Вузькі місця словника зазвичай лежать поза кодом пошуку: немає правил словозміни для мови, немає окремого набору власних назв, немає фільтра лексики.

Усе це виявляється на живих гравцях, а не в тестах, і закривається набором словників, які оновлюються без випуску нової версії застосунку.

Мобільна словесна гра тримається на трьох речах: повноті словника, швидкості добору слів і цілісності партії під час обриву зв'язку. Розбираємо, як кожне з цих місць закривається в нашій роботі.

Словник і відгук у грі: що змінюється після переробки

Словник перестав бути монолітом, який повністю тримається в пам'яті пристрою. Ми розклали його на префіксне дерево частотного ядра та підвантажувані шари рідкісних слів: перевірка ходу йде за локальною структурою, тому відгук не залежить від якості зв'язку. Розмір словника при цьому зріс кратно.

Слабким місцем було розпізнавання словоформ: гравець вводив «біжу», «біжить», «побіг», а приймалася лише одна форма, і хід згорав.

Тепер введення приводиться до леми за морфологічною моделлю, вивіреною за даними корпусу Національний корпус російської мови, — частка коректно розпізнаних слів зросла з двох третин майже до повної.

Швидкість відгуку на хід змінилася радикально: раніше кожне слово йшло на сервер і чекало перевірки, тепер рішення ухвалюється на пристрої. Хід підтверджується в момент дотику, а мережа потрібна лише для синхронізації підсумку партії.

Стабільність партії тримається на журналі ходів: він пишеться покроково, і під час обриву зв'язку в метро чи ліфті сесія відновлюється з останнього підтвердженого ходу. Час відновлення — одиниці секунд замість перестворення партії та втрати прогресу.

Окремо закрили клас відмов, який давав найбільше звернень до підтримки: розсинхрон словників між версіями застосунку та подвійні зараховані ходи. Версія словника та правила перевірки фіксуються в самій партії, сервер звіряє лише результат, — частка дограних партій помітно зросла.

Варіанти збірки словника та перевірки ходів: порівняння підходів

Перевірку ходу гравець відчуває як відгук інтерфейсу: якщо відповідь запізнюється, літера «не стає» й людина вважає, що застосунок зламався.

Тому режим перевірки обирають до старту розробки — перехід зі словника у збірці на серверну перевірку означає переписати шар правил і заново зібрати сам словник.

Технічні альтернативи

Варіант Коли підходить Обмеження підходу
Локальний словник у застосунку Одиночна гра, офлайн-режим, ранній прототип Вага збірки зростає разом зі словником; набір слів доступний на пристрої, оновлення — лише з новою версією застосунку
Серверна перевірка ходів Мультиплеєр, рейтинг, турніри, захист від підміни правил Кожен хід залежить від каналу зв'язку; за слабкої мережі інтерфейс чекає відповіді, сервер тримає навантаження на всіх партіях
Гібридна схема Мультиплеєр і офлайн в одному застосунку Два джерела правил синхронізують за версіями; розходження словників ламає партію, підтримка дорожча
Готовий ігровий модуль Типові правила, запуск у короткий строк Правила та словник обмежені можливостями постачальника; свій режим і своя розмітка очок майже не розширюються

Як обирають на практиці

Вибір зводиться до трьох питань: чи є мережева гра та рейтинг, чи потрібен офлайн, наскільки мова гри відрізняється від типової. Для одиночних партій вистачає словника у збірці — це найпростіший у підтримці шлях.

Як тільки з'являється суперник і спільний рахунок, перевірка йде на сервер, а локальний словник залишається резервним для офлайну.

Етапи роботи: від розбору словника до передачі збірки

Порядок етапів тут не формальність: словник і правила ходів визначають структуру стану та те, скільки одночасних партій витримає сервер. Тому модель гри спочатку фіксуємо в схемах і лише потім пишемо код. Кожен крок закінчується збіркою, яку можна поставити на пристрій і зіграти партію.

  1. Аудит ігрової логіки. Розбираємо прототип або чужий код: як будується поле, перевіряються слова, нараховуються очки. На виході — перелік вузьких місць і рішення, що перевикористаємо, а що переписуємо.

  2. Схема даних словника. Словник розкладаємо в префіксне дерево: перевірка слова та підказки йдуть без повного перебору. Окремо описуємо мовні набори, ваги літер і оновлення словника без перезбирання застосунку.

  3. Налаштування правил ходів. Фіксуємо валідацію ходу, таймінги, заміну літер і умови завершення партії. Окремо — розв'язання конфліктів, коли гравці ходять одночасно.

  4. Синхронізація партій і мультиплеєр. Стан рахує сервер: клієнт надсилає хід і отримує підтвердження з оновленим полем. Продумуємо розрив зв'язку та повернення в партію з тим самим рахунком.

  5. Тестування партій. Проганяємо словник автотестами, граємо партії ботами, перевіряємо рідкісні випадки — змішані мови, спірні комбінації, одночасні ходи. Навантажувальний прогін показує, скільки сесій тримає вузол.

  6. Передача проєкту. Віддаємо репозиторій з історією, збірки, схеми даних, опис правил і порядок випуску оновлень. Навчаємо команду: від локального запуску до розбору збоїв у партіях.

Склад поставки: схеми даних, правила ходів, документація

Поставка — це не лише зібраний застосунок. На прийманні ми передаємо набір артефактів, за якими гру можна розвивати без нас: описи структур, регламенти, доступи та документацію. Нижче — що саме опиняється в руках у замовника.

  • Схема даних ігрового ядра — словник, рівні, профілі, прогрес, історія партій: поля, типи, індекси, зв'язки між таблицями. Плюс міграції, щоб розширювати структуру без втрати користувацьких даних.
  • Правила ходів і підрахунку очок — що вважається припустимим словом, як розв'язуються спірні комбінації, як поводиться партія під час обриву зв'язку та повторного надсилання ходу.
  • Регламент оновлення словника — формат файлу поповнення, порядок перевірки нових слів і версіонування наборів, за якого вже розпочаті партії не ламаються.
  • Правила модерації контенту — фільтри імен і чату, список стоп-слів, порядок дій модератора та журнал рішень щодо кожного випадку.
  • Схема сервісів і середовищ — де розгорнуті ігровий сервер, сховище та черги, як видаються доступи й зберігаються секрети.
  • Документація проєкту — архітектурний опис, локальний запуск і збірка, порядок випуску оновлень і відкат на попередню версію.
  • Доступи та права — репозиторії, панелі управління, аналітика й акаунти в магазинах застосунків оформлені на замовника.

Склад поставки фіксуємо до старту робіт і звіряємо на прийманні за пунктами — без «допишемо потім».

Кейс: метрики до та після переробки ядра

Що показували метрики до переробки

Ядро збирали під швидкий прототип: словник завантажувався повністю, а перевірка ходу щоразу перераховувала доступні варіанти заново.

На пристроях середнього класу відгук розтягувався до півтори секунди, частка коректно розпізнаних слів трималася на 71%, і приблизно кожна дев'ята партія закінчувалася зверненням до підтримки — найчастіше зі скаргою на «завислий» хід.

Гравці йшли раніше фіналу: частка завершених партій не піднімалася вище за 46%, утримання другого дня — 21%. Для словесної гри це критично: партія коротка, і один підвислий хід коштує всього матчу.

Що змінили і що вийшло

Словник розклали за префіксним деревом і тримаємо гарячу частину в пам'яті, перевірку ходу рахуємо інкрементально — лише за зміненими клітинками.

Стан партій мультиплеєра винесли в Redis з коротким часом життя ключа: хід суперника надходить за подією, а не витягується опитуванням раз на секунду. Ті самі правила перевірки слів працюють в офлайні, тому локальна гра не розходиться із серверною логікою.

Після переробки: розпізнавання слів — 99%, відгук на хід — десяті частки секунди, частка завершених партій — 78%, утримання другого дня — 34%. Звернень до підтримки стало менше в шість разів на тисячу партій, а навантаження на сервери за тієї ж кількості гравців упало вдвічі.

Чим відрізняється серверна перевірка ходів від локальної?

Локальна перевірка виконує валідацію ходу на пристрої: слово звіряється зі словником у пам'яті застосунку, відповідь надходить миттєво. Серверна перевірка ходів робить те саме на боці сервісу — пристрій надсилає хід і чекає вердикту. Від цього вибору залежить не лише відгук інтерфейсу, а й те, кому належить істина в партії.

Клієнт — недовірене середовище: усе, що лежить у збірці, рано чи пізно витягується — словник, вартість літер, правила комбінацій. Якщо перевірка слів живе лише на пристрої, захист від підказок тримається на заплутуванні коду.

Серверний арбітр віддає назовні лише вердикт щодо конкретного ходу, і за ним не відновити ні словник, ні рідкісні слова.

У серверного варіанта своя ціна: коло до сервісу додається до кожного ходу, і на слабкому зв'язку партія «залипає». Зростає й складність підтримки — резервування, ліміти запитів, окрема ємність під навантаження турнірів.

Робота без підключення потребує офлайн-режиму з чергою ходів і подальшою синхронізацією стану, де конфлікти розв'язуються за правилами, а не за тим, чий хід надійшов пізніше.

На практиці беруть гібрид. Локальна перевірка обслуговує одиночну гру та підсвічування в інтерфейсі — хід відчувається миттєвим, а сервер залишається арбітром у мультиплеєрі та рейтингу.

Синхронізація стану будується на нумерованих ходах: сервер приймає хід, відхиляє конфліктний і розсилає підтверджений стан усім учасникам.

Правила при цьому тримають в одному спільному модулі з тестами, інакше клієнт і сервер розходяться в трактуванні слів і гравці отримують різні відповіді на той самий хід.

Технічні сумніви: словник, затримки, оновлення

Перед стартом замовник перевіряє не механіку гри, а рішення, які дорого змінювати потім: як оновлюється словник, що з відгуком на слабких пристроях, скільки роботи додає друга мова та як гра переноситься на другу платформу. Це архітектурні розвилки — вони задають структуру даних і правила підрахунку очок.

Нижче — відповіді на те, що найчастіше запитують на етапі оцінки.

Словник доведеться оновлювати разом із застосунком?

Ні. Словник — окремий набір даних зі своєю версією: гра підтягує актуальний і зберігає його локально, тому поповнення виходить без нової збірки застосунку. Гравець без мережі користується останнім завантаженим набором, а відкат на попередній робиться в один крок.

Що із затримкою відгуку на слабкому пристрої?

Перевірка ходу йде на самому пристрої: словник піднімається в пам'ять під час запуску, пошук слова не чекає мережу, тому підсвічування та реакція на дотик не залежать від якості зв'язку. Сервер бере участь лише в звірянні результатів партії.

Скільки роботи додає друга мова у грі?

Словник і правила винесені в окремі конфігурації та не зачіпають логіку підрахунку очок. Додати мову — означає підключити набір слів і переклад інтерфейсу, а не переписати гру; наступна мова йде за тією ж схемою.

Як відбувається перенесення на другу платформу?

Основна логіка — спільний модуль, окремо реалізуються лише введення, оплата та сповіщення. Друга платформа не перетворюється на другий проєкт: переноситься ядро гри, а не пишеться заново.

Хто відповідає за модерацію слів?

Хід, якого немає в словнику, не приймається, а неприпустимі сполучення відсікає окремий фільтр — він оновлюється без випуску збірки. Спірні ходи потрапляють у журнал, тому правила модерації уточнюються за реальними випадками.

Обговорення задачі: що знадобиться від вас і як піде робота

Щоб оцінка проєкту спиралася на факти, а не на здогадки, достатньо однієї ділової розмови та невеликого набору вхідних даних. Готувати технічне завдання заздалегідь не потрібно — опишіть ідею та покажіть те, що вже є: прототип, макети, старий код.

Ми розберемо механіку, запропонуємо розумний обсяг першої версії та повернемося з оцінкою і планом робіт.

Що знадобиться від вас:

  • Механіка гри: які режими потрібні (одиночна партія проти словника, дуель на одному пристрої, мережеві матчі) і як рахуються очки.
  • Словникова база: мови, обсяг набору слів, що робити зі спірними та рідкісними словами, чи потрібна серверна перевірка ходів.
  • Платформи й аудиторія: телефони та планшети, чи обов'язковий офлайн-режим, чи потрібна синхронізація прогресу між пристроями.
  • Доступи та матеріали: акаунти магазинів застосунків, наявні макети, домен для серверної частини, поточний код або прототип, якщо він є.
  • Обмеження: бажані строки, вимоги магазинів до контенту та вікових рейтингів, інтеграції з аналітикою та платежами.
  • Хто ухвалює рішення: людина, яка буде погоджувати спірні місця щодо правил гри та інтерфейсу.

Перший крок — розбір задачі та зворотний план робіт: що робимо на кожному тижні, де точки погодження і що потрапляє в першу збірку. Опишіть задачу в зручній формі — повернемося з оцінкою і планом.

Наші компетенції:

Останні роботи

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1015
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    907
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1338
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1183
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1113
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    720