От египетского отдыха до собственного приложения: история создания Darts Score Keeper
Предыстория: как всё начиналось
Всё началось с обычного отпуска в Египте. Как и многие туристы, мы проводили время в отеле, участвуя в различных развлечениях. Одним из самых запоминающихся стал турнир по дартсу, который организовывал аниматор.
Игра захватывала, но был один существенный недостаток — постоянная путаница с подсчётом очков. Нужно было помнить:
- У кого сколько очков осталось
- Кто сейчас ходит
- Правильно ли посчитали сумму бросков
- Не «перебрал» ли игрок
В основном всей этой головной болью занимался аниматор, который вручную вёл учёт на бумаге. И тогда пришла мысль: «Почему бы не сделать удобное приложение для подсчёта очков в дартс?»
Так появилась идея Darts Score Keeper — приложения, которое упростит игру как для аниматоров, так и для всех любителей дартса.
Разработка: от идеи к реальности
Этап 1: Проектирование
Первым делом нужно было понять, какой функционал необходим:
- Поддержка популярных режимов (301, 501, 701)
- Возможность добавлять несколько игроков
- Быстрый ввод очков
- Автоматический подсчёт
- Определение победителя
Этап 2: Выбор технологий
Для разработки было решено использовать:
- Kotlin — современный язык для Android
- Jetpack Compose — декларативный UI-фреймворк
- Material Design 3 — для красивого и современного интерфейса
Этап 3: Реализация основных функций
Скриншоты приложения
📱 Экран выбора режима игры
Описание: Главный экран приложения, где пользователь выбирает режим игры (301, 501 или 701 очков). Здесь же можно переключить язык интерфейса (русский/английский) и ознакомиться с правилами.
Особенности:
- Простой и понятный интерфейс
- Кнопка информации с правилами игры
- Выбор языка одним кликом
👥 Ввод имён игроков
Описание: На этом экране происходит добавление и редактирование имён игроков. Можно:
- Добавлять неограниченное количество участников
- Менять порядок игроков (перемещать вверх/вниз)
- Удалять лишних игроков
- Редактировать имена прямо в списке
Техническое решение: Используется LazyColumn для эффективной работы с большими списками.
🎯 Игровой процесс
Описание: Основной экран игры отображает:
- Текущий режим игры
- Таблицу с очками всех игроков (активный игрок выделен цветом)
- Три поля для ввода отдельных бросков
- Автоматический подсчёт суммы
- Информацию о текущем ходе
Умный подсчёт: Приложение автоматически суммирует три броска и проверяет, не превышает ли сумма 180 очков.
⚡ Быстрый ввод очков
Описание: Одна из ключевых фишек приложения — система быстрого ввода, имитирующая реальную мишень для дартса:
- Сектора мишени (20, 1, 18, 4, 13, 6, 10, 15 и т.д.)
- Кнопки удвоения (x2) и утроения (x3)
- Быстрый доступ к 25 и 50 очкам (внешний и внутренний круг)
- История ввода — можно отменить последний бросок
- Автоматический подсчёт с учётом множителей
Цветовая схема повторяет реальную мишень:
- Чёрные и белые сектора
- Зелёные кнопки для удвоения
- Красные кнопки для утроения
🏆 Определение победителя
Описание: Когда игрок точно доводит свой счёт до нуля, приложение автоматически определяет победителя и показывает соответствующее уведомление.
Правила проверки:
- Очки должны быть ровно 0
- Последний бросок должен быть в «дабл» (удвоение)
- Нельзя «уйти в минус»
Проблемы, с которыми пришлось столкнуться
1. Конфликт интерфейсов
Проблема: При размещении кнопки информации («i») внутри поля выбора режима, она конфликтовала с выпадающим списком — при нажатии на «i» открывался и список режимов.
Решение: Использовали Box с наложением элементов. Кнопка информации была визуально размещена внутри поля, но программно отделена от логики выпадающего меню.
2. Сохранение языка
Проблема: При выборе языка приложение перезапускалось (recreate()), что приводило к потере состояния и возврату к русскому языку.
Решение: Отказались от автоматического перезапуска Activity. Вместо этого язык сохраняется в SharedPreferences и применяется динамически через LaunchedEffect:
3. Адаптация под разные экраны
Проблема: На устройствах с высоким соотношением сторон (например, Samsung S25 Ultra) нижние элементы перекрывались системной панелью навигации.
Решение: Добавили модификаторы navigationBarsPadding() и imePadding() для учёта системных элементов:
4. Быстрый ввод с историей
Проблема: Нужно было реализовать возможность отмены последнего ввода в быстром режиме.
Решение: Создали список history, который хранит все введённые значения. При отмене просто вычитаем последнее значение из суммы:
Дополнительные возможности
🌍 Двуязычность
Приложение поддерживает русский и английский языки. Переключение происходит мгновенно без перезапуска приложения. Выбранный язык сохраняется между сессиями.
💾 Сохранение данных
Имена игроков сохраняются между играми. Не нужно вводить их заново каждый раз.
🎨 Современный дизайн
Использован Material Design 3 с тёмной темой, что делает приложение приятным для глаз и соответствующим современным стандартам.
📱 Адаптивность
Интерфейс корректно отображается на устройствах с разным размером экрана и соотношением сторон.
Где скачать?
Приложение Darts Score Кeeper уже доступно для скачивания!
📲 RuStore (официальный магазин)
Ссылка: https://www.rustore.ru/catalog/app/com.example.dartsapp
💾 Прямая ссылка (для тех, кто не хочет скачивать с RuStore)
Яндекс Диск: https://disk.yandex.ru/d/hvwZaA9qUCB5ng
Заключение
Создание Darts Score Кeeper было интересным путешествием от простой идеи до полноценного приложения. Теперь не нужно мучиться с подсчётом очков — всё сделает приложение!
Приложение будет полезно:
- ✅ Аниматорам в отелях и развлекательных центрах
- ✅ Любителям дартса для домашних турниров
- ✅ Тем, кто хочет играть без головной боли с подсчётом
Скачивайте, играйте, наслаждайтесь! 🎯
Если у вас есть вопросы или предложения по улучшению приложения — пишите в комментариях!