Всем привет, меня зовут Андрей, я разработчик.
В силу своей увлеченностью спортом, часть моих проектов — плотно связаны с организацией судейства спортивных соревнований: по лыжным гонкам, по ориентированию, а сейчас еще с городскими играми и квестами. На Geektimes я уже писал статью про нашу систему спортивного хронометража для лыжных гонок (и вероятно после этой зимы материала и нововведений хватит еще на одну статью), а сегодня хотел бы рассказать о программном обеспечении, которое мы сами используем для проведения городских игр разных форматов.

Данная статья больше всего подходит под категорию "Я пиарюсь" (но как я выяснил, когда написал весь текст — кармы для публикации там — у меня не хватает), ведь наша система для проведения этих самых городских игр распространяется за деньги (организатор игры платит за подписку), и именно по этой причине я довольно долго не решался ее написать (нелюбовь к пиару и рекламе). Именно поэтому я сконцентрируюсь на технической части проекта, расскажу как появился проект, о возможностях движка, которые мы смогли в него вложить, о проблемах, которые удалось и не удалось решить, и минимизирую пиар. Возможно заряжу других людей на создание собственных проектов, которые можно монетизировать. К критике отношусь положительно. [Под катом много скриншотов].

Что за игры такие?


Думаю все уже прекрасно знают, что такое городские квесты. На фоне роста популярности квеструмов, растет и популярность городских квестов. Мероприятие представляет из себя сюжетную игру, в которой участники должны передвигаться по городу на авто, пешком, на вело, на роликах (нужное подчеркнуть), разгадывать загадки, ребусы, шифры и выполнять творческих задачи. Все действо можно растягиваться от 40 минут до месяца (жесткие парни, сражались за 12 кг. золота, наматывая тысячи километров по всей России). Такие игры стали очень популярны благодаря проектам "Dozor" и "Encounter", но у них на мой взгляд своя аудитория: много игр носят довольно экстремальный характер, но далекое не все участники хотят и не все готовы исследовать забросы (заброшенные территории заводов, больниц и пр.), не всем интересно искать коды, написанные фломастером на животе у крысы. Но они безусловно заварили "большую квестовую движуху" по всей России.

С 2005 года мы проводили много соревнований по спортивному ориентированию. Несмотря на низкую популярность в России — это невероятно технологичный вид спорта: системы электронной отметки, слежка за спортсменами в реальном времени с помощью GPS и квадрокоптеров, радио-КП, а также системы для подготовки спортивных карт (с помощью лазерного сканирования местности). Для программиста — огромное поле для творчества. Единственный минус Спортивного ориентирования — маленькие бюджеты у спортсменов и мало самих спортсменов (сравниваю с лыжниками, которых много и которые готовы за 50 километровый марафон заплатить 1500-2500 рублей). В 2012 году нам наскучило проводить одно лишь спортивное ориентирование да лыжные гонки. Нужны были смежные ниши, в которые мы могли легко влиться, получить «новую кровь» (точнее новых постоянных участников на наши спортивные мероприятия). И мы выбрали городские квесты, поскольку процесс организации соревнований по спортивному ориентированию и процесс организации городского квеста очень похожи. Мы решили провести пробный автоквест. Нужно было выбрать аудиторию.

В процессе исследований (слишком громное слово в данном контексте) оказалось, что есть большой большой сегмент людей, которые хотят играть в подобные Dozor-у квесты, но только в режиме «безопасной экскурсии» по городу. Соблюдая ПДД, если речь идет об Автоквестах. Соблюдая законы, не нарушая частных владений и не фотографируясь в костюмах шахидов на фоне Дома правительства.

Что нужно для городской игры


Каждый, кто захочет провести подобное мероприятие должен примерно понимать, через что ему предстоит пройти.
Для себя мы составили такой список (он отсортирован по важности, вверху самое важное):
  1. Написан отличный сценарий игры, подготовлены сложные, но решаемые задания на интеллект, скорость и творчество. Так, чтобы каждый участник игры мог себя реализовать.
  2. Выбрано удачное время и день для игры и собрана адекватная и достаточно большая аудитория участников.
  3. Выбрано место старта, финиша и afterparty (где есть чай, проектор, музыка, где люди могут расслабиться и пообщаться).
  4. Для игры применяется игровой движок, который расширяет функционал игры и дает организатору возможность следить за ходом игры и провести ее без сбоев.
  5. В дополнение к пункту (1) — большим плюсом для Вас будет наличие Агентских заданий на точках.
  6. На игре используется дополнительные реквизит


За неделю мы сделали смастерили сайт с приемом заявок, написали сценарий игры, собрали реквизит, дали рекламу в социальных сетях и сделали почтовую рассылку по нашим постоянным участникам. По чистой случайности мне даже позвонили с телеканала RTVI и попросились снять репортаж. Оставалось сделать движок.

Движок


И вот наконец я подобрался к тому, о чем хотел рассказать.

Версия 1.0

Движок первоначально представлял из себя 2 php файла написанные лично мною за 6 часов за день до игры и базу SQLite, в которой хранились вопросы и ответы участников. Как Вы можете догадаться выглядел он жутко. Отчасти из-за того, что все делалось в последний момент, отчасти из-за того что код писался глубокой ночью. Ни о какой адаптации под мобильные устройства и речи быть не могло.
Основной функционал для участника: прочитать вопрос, загрузить с телефона фотографию и написать текстовый ответ.
Функционал для организатора: посмотреть фото, ответ и поставить балл. Посмотреть итоговую таблицу результатов.
Но на удивление, никто не жаловался. Движок работал хорошо и на тот момент функционал выполнял.
Мы провели несколько игр и столкнулись с небольшим кризисом жанра: писать сценарии самостоятельно было очень сложно, а хорошего сценариста найти не смогли. Началась зима и начался лыжный сезон и квесты были оставлены до лета.
В начале весны мне позвонил Игорь, один из участников наших игр, сказал что хочет подхватить нашу идею и проводить свои квесты, и преложил купить движок. Я согласился.

Версия 2.0

Версия 2.0 началась летом 2014. Новый движок был назван «Квестник». Домен был куплен сильно заранее, в предчувствии квестового бума и очень пригодился. Изначально мы хотели, чтобы с помощью движка можно было проводить игры самых разных форматов.
Основная идея такая: все задания, вопросы и загадки мы объединили под общим словом «блок».
Каждый блок содержит в себе некую информацию, которая подразумевает какое-то действие от участника.
Например: решить ребус, разгадать локацию, приехать туда и выполнить творческое задание.

Каждый блок имеет свои правила отображения:
  1. Отображение после правильного ответа на другой блок
  2. Отображение по расписанию (например с 2:20 до 2:45 ночи)
  3. Отображение блока в определенной гео-точке


Каждый блок может иметь следующие вариант ответа:
  1. Необходимо сделать фотографию и приложить ее в качестве подтверждения выполнения задания.
  2. Необходимо написать текстовый ответ (например найденный код)
  3. Приложить координаты гео-точки в которой находится участник.
  4. Любые комбинации из перечисленных выше


Каждый блок может быть оценен определенным количеством баллов.
Участник набравший больше всех баллов за наименьшее время побеждает.

Каждый блок может быть проверен двумя способами:
  1. Правила автоматической проверка ответа (можно создать сколько угодно правил для проверки текстового ответа и координат гео-точки)
  2. Ручная оценка в режиме жюри (когда организатор сам выставляет баллы)


Благодаря такому набору возможностей мы можем создавать разные неожиданные варианты заданий:
  • Задание, которое будет доступно в определенной точке города (скажем возле памятника Кириллу и Мефодию) в период с 1:30 до 1:45. Это означает, что участник должен разгадать загаданную ранее локацию и успеть приехать к памятнику в указанный промежуток времени.
  • Задание на поиск точки: участник приезжает в определенную гео-точку (как он считает, верную) и в качестве ответа прикладывает свои координаты. Робот проверяет ответ и если участник попал в радиус 100 метров — ставит ему 10 баллов, если в радиус 200 метров — 5 баллов и так далее.
  • Участник ищет шифры, и как только найдет его и введет в поле ответа в движке — получит доступ к следующему вопросу.
  • Участник вводит текстовый ответ и прикладывает фотографию. Тут же он зарабатывает 1 балл за правильный ответ, и получает доступ к следующему вопросу. Через некоторое время организатор проверяет его фото ответ и ставит дополнительные баллы.


Всех участников можно разделить на группы, чтобы в рамках одного мероприятия, они проходили разные маршруты.

Звучит довольно сложно, но после первой игры, все становится прозрачно и организаторы смело начинают использовать автопроверку и геопривязанные вопросы.
Движок состоит из двух частей: игровой, для участников, где все довольно просто (зашел, выбрал блок, ответил, поехал дальше) и организаторской (для организаторов), где происходит создание и «судейство» игры. Далее будет много скриншотов с описанием, что на них.

Администраторская часть


Демо


Можно настроить отображение таймера обратного отсчета и таблицы результатов, а так же стилизовать движок под свое мероприятие


Группа со списком блоков. Для каждой группы можно настроить время игры


Настройка автопроверки ответов


Настройка правил показа блока


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


Страница Жюри — сюда падают все ответы участников, можно выставлять баллы за правильные ответы

Игровая часть


Демо


Список блоков


Запрос на разрешение использовать службу геолокации


Блок с простым текстовым ответом


Блок, в ответе надо приложить фотографию


Блок — гео-вопрос


Блок заблокирован

Основные проблемы


1) Плохой интернет во время игры. Я знал об этой проблеме, но она казалась такой далекой, что я не спешил ее решать.
Многие игры проходят в зонах плохого покрытия мобильного интернета. Особенно если речь идет про Челябинск, Бийск, Красноярск.
Движок грузился долго, даже учитывая архитектуру, по которой через API подгружались только данные в формате JSON. О загрузке фотографий — я вообще молчу.
Решение. Для загрузки фотографий с мобильных устройств я стал их первоначально уменьшать прямо на веб-странице с помощью плагина jquery.canvasResize.js и отправлять на сервер уже уменьшенные их варианты (правда в base64, что добавляло им веса). Так же пришлось заморочиться с кешированием: чтобы веб-интерфейс не загружался каждый раз, а хранился в кеше устройства (можно почитать здесь про кеширование). Далее — настроить сжатие на сервере и наконец ужать скрипты до минимума. Результат оказался отличный — жалобы на скорость загрузки прекратились.

2) Нагрузки на сервер. Для проведения крупной пиар акции одна малоизвестная компания решила провести квест на пару тысяч человек. При расчетах на бумаге и тестировании выяснилось, что движок столько «не потянет». Для решения пришлось отказаться от SQLite который использовался по привычке, запилить все на MySQL, и перенести все на автомасштабируемый виртуальный сервер (который подключает дополнительные ресурсы при росте нагрузки).

3) Желание организаторов «иметь движок у себя». Многие организаторы обращались с вопросом: можно ли разместить движок на их сервере. Распространять исходный код движка было нельзя.
Немного исхитрившись с настройками веб-сервера мы даем возможность использовать свое доменное имя для игры, нужно лишь настроить NS запись.

4) Ценообразование. Некоторые организаторы проводят квесты на корпоративах и зарабатывают 100 000 руб с мероприятия. Некоторые другие организаторы — проводят игры за 100 рублей с команды и зарабатывают 2000 рублей. Мы берем со всех по 1000 рублей за использование движка на одну и игру и это оставляет легкий диссонанс. Эта проблема до сих пор не решена. И вообще проблема с ценообразованием — довольна сложная. Если у кого есть опыт — подскажите, как ее с ней разобраться.

5) Зоопарк из мобильных устройств разных сортов. Люди в Москве и в регионах играют с очень разными мобильными устройствами. В Москве это преимущественно iPhone и Samsung последних, предпоследних моделей; в регионах все печально. Некоторые совсем старенькие смартфоны с трудом загружают движок, даже после работ над кешированием и минификацией html/js.

6) Плановые работы на хостинге. Такая проблема возникала несколько раз. Связана она вот с чем. Мы арендуем VPS для наших проектов у одного из Питерских хостинг провайдеров. Обновления они проводят планово и предупреждают об этом заранее. И чаще всего обновления бывают в 2 часа ночи — а для Квеста который начался в полночь — это самый разгар игры. Сервер может уйти в reboot на 1 минуту, а уже начинаются недовольные звонки участников.

Для кого и чего сделан движок


  1. В первую очередь для органиазаторов открытых игр. Игр должно быть больше, особенно сейчас, в кризис, чтобы люди могли отдыхать экономнее и не у телевизора
  2. Для организации игр на собственных праздниках, днях рождениях
  3. Для ведущих корпоративов и свадеб — чтобы дешево предложить клиентам что-то более новое чем корпоративное бухалово на новый год или обматывание туалетной бумагой на свадьбе
  4. Для владельцев Антикафе, Кафе — как дополнительный способ привлекать клиентов
  5. Для крупных пиар акций в формате квестов


Планы:
  • Практически готово мобильное приложение (созданное по «методу» PhoneGap).
  • Покупка подсказок за баллы и подсказки по времения для блоков
  • Рассылка участникам Email/SMS/Telegram с результатами
  • Система сообщений между организатором и участником
  • Генератор шифров и ребусов
  • Оптимизация работы для проведения больших квестов (1000+ человек)

На последок хочу сказать: проект работает и приносит чуть-чуть денег. При правильном подходе к ценообразованию и рекламе — может приносить больше. Так что если Вы программист/разработчик (все любят по разному) и хотите сделать собственный SAAS проект — ничего не бойтесь, выбирайте узкую нишу и в бой.

Всем спасибо. Буду рад услышать в комментариях обратную связь.

Комментарии (0)