Разработка мобильной word-игры
Словесные игры — жанр, где основная техническая сложность лежит не в графике и не в физике, а в работе со словарями и алгоритмах поиска слов. Неправильная реализация словарной базы — и игра работает некорректно на 15% устройств из-за кодировок, или тормозит при проверке слова из 8 букв.
Словарная база: хранение и поиск
Для русскоязычных word-игр словарь — от 100 000 до 500 000 слов. Хранить как список строк в List<string> и делать .Contains() — O(n) поиск, 500ms на слабом Android. Неприемлемо.
Правильная структура: Trie (префиксное дерево). Поиск слова — O(k) где k — длина слова, обычно 3–15ms на любом устройстве. Дополнительно Trie позволяет находить все слова с заданным префиксом — нужно для подсказок и автодополнения.
Компактная реализация в Unity через Dictionary<char, TrieNode>. Сериализация в бинарный формат (MessagePack или собственный) — загрузка словаря 300K слов из бинаря занимает 200–400ms vs 2–3 секунды из JSON.
На Android — StreamingAssets с асинхронной загрузкой через UnityWebRequest.Get (обязательно, так как прямой File.Read не работает из APK). На iOS — стандартный Resources.Load или Addressables.
Кодировки и Unicode
Кириллица в Unity — UTF-16 строки, всё работает корректно. Проблемы начинаются при работе с символами: е (е) и ё (ё) — разные символы, но игроки часто путают. Нужна нормализация: при вводе е → проверяем оба варианта в словаре. Также: заглавные буквы через char.ToLower() с CultureInfo.GetCultureInfo("ru-RU") — не ToLower() без аргументов.
UI ввода букв
Для scramble- и crossword-type игр — кастомная клавиатура из Button компонентов на Canvas, не системная. Это даёт полный контроль над layout'ом, haptics (Handheld.Vibrate() на Android, UIImpactFeedbackGenerator через iOS plugin), анимацией нажатий.
Drag-to-select для Wordsearch и анаграмм — IPointerDownHandler, IDragHandler с перебором GraphicRaycaster.Raycast по точкам между предыдущей и текущей позицией пальца каждый IDragHandler.OnDrag вызов.
Сроки: word-игра с одним режимом и словарём из 100K слов — 6–10 недель. С несколькими режимами, ежедневными заданиями, мультиплеером — 3–5 месяцев.







