В гродненской компании IntexSoft придумали, как превратить любимый во многих айтишных офисах настольный футбол в технологическую забаву.
Как и в любой ИТ-конторе, в рабочих перерывах народ занимается чем-нибудь совершенно посторонним. У нас наибольшей популярностью пользуется настольный футбол, к которому иногда не пробиться из-за избытка желающих.
Тогда мы решили облегчить «футболистам» жизнь, да и самим себе тоже. Кто играл, тот поймет, что крайне сложно точно подобрать себе напарника или противника соответствующего уровня, в конце концов — банально дождаться своей очереди. Также хотелось добавить побольше интересных фишек, типа получения «ачивок» или ведения рейтинга игроков...
Собрав команду из пяти добровольцев, мы приступили к эксперименту.
Отследить кажды гол
Первым шагом, с которого мы начали осуществлять задумку, был «апгрейд» футбольного стола. Его идея очень проста: необходимо отслеживать каждый забитый гол. Реализацию проекта ускорили два лазера и два фоторезистора, которые мы разместили в воротах, контроллер Arduino и, конечно же, энтузиазм наших участников.
Как же это работает?
При попадании мяча в область между лазером и фоторезистором изменяется сопротивление фоторезистора, которое приводит к изменению напряжения в сети, которое фиксирует контроллер Arduino. Принципиальная схема изображена ниже:
Простота системы не исключила появления проблем. Во-первых, в помещении с футбольным столом постоянно изменяется освещение (дневной/электрический свет). Такие перебои вызывают ложно-положительные срабатывания датчиков. Во-вторых, все компоненты системы нужно было прочно зафиксировать, поскольку вибрации при игре могли привести к их повреждению.
Первую проблему мы устранили перекалибровкой фоторезистора при каждом старте игры.
Вторая нестыковка разрешилась проще — c помощью суперклея, синей изоленты и отвёртки. Поэтому через полчаса все компоненты стола были надежно зафиксированы и готовы к дальнейшим манипуляциям.
Наша команда добровольцев приступила к отшлифовке требований к программной составляющей проекта. Запуск коллективного брэйнсторминга породил ряд идей. Вот самые интересные:
- Режим игры можно представить как 1x1 и 2x2.
- Распределить уровни игроков.
- Получать «ачивки» во время и по итогу игры.
- Вести личные и командные рейты.
- Звуковое сопровождение игры.
Дизайн
Далее взялись за дизайн проекта, от логотипа до мелких деталей приложения. Вот что получилось.
Программная составляющая
Разработку программной составляющей проекта мы разделили на три этапа.
1. Клиентская сторона — Angular.js, Bootstrap.
Реализацию клиентской стороны мы проводили следующим образом:
- Сделали основные страницы приложения и натянули на них дизайн.
- Реализовали коммуникацию с сервером через Rest API и Socket.io.
2. Серверная сторона — Node.js, Socket.io, MongoDB.
Серверная сторона разрабатывалась вот так:
- Сгенерировали структуру проекта.
- Разработали модель данных.
- Наладили связь между клиентом и сервером.
- «Заимплементили» логику по расчёту стастистики.
- «Заимплементили» логику по получению «ачивок».
3. Связь между Arduino и сервером.
Мы написали прослойку между Arduino и сервером, что помогло собрать отдельные части проекта в единое целое.
На стороне Arduino так.
На серверной стороне был реализован следующий контроллер.
Принцип работы следующий: слушаем порт, к которому подключён Arduino, и при получении команды «эмитим» то или иное событие. Для запуска и остановки Arduino у нас есть две специальные функции — start and stop, при запуске которых в порт пишется соответствующая команда, которая будет обработана Arduino.
В контроллере игры мы ловим событие и выполняем магию, известную лишь только разработчикам. Вот пример использования.
Кроме того контроллер игры «эмитит» различные события: старт игры, её завершение, получение «ачивок».
Финишная прямая
Далее мы дорабатывали «апгрейд» стола.
Насущными оставались только две задачи: закончить программную часть проекта и связать все компоненты системы вместе.
Мы «заимплементили»:
- Подсчёт статистики.
- Подсчёт и получение «ачивок» игроком.
- Сохранение статистики и «ачивок» в базе.
- Нарисовали дизайн для всех «ачивок».
И вот наступил долгожданный тот момент, когда последние строчки кода допилены, а последний шуруп закручен — можно играть!
Итог
В результате мы имеем прототип технологичного настольного футбола, который самостоятельно регистрирует и считает забитые голы, ведёт рейтинг игроков на удалённом компьютере.
Надеемся, что на этом наши эксперименты не закончатся, и мы продолжим удивлять вас, и себя.
Удачи всем!
Релоцировались? Теперь вы можете комментировать без верификации аккаунта.