Песочница проектов. BALDIX

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

Идея сама по себе очень простая. Я скрестил популярные головоломки Тетрис и Балда в надежде, что из этого получится что-то интересное. Думаю, видео сможет рассказать вам про игру лучше, чем я:

iOS App Store: http://apple.co/1eMDUge

Android Google Play: http://bit.ly/1He9TMT

Как все начиналось

А теперь, когда вы познакомились с игрой, я расскажу, как она появилась. Bcе началось с того, что в начале апреля 2015 загнулся мой очередной стартап, и я начал искать работу. После нескольких попыток найти подходящий вариант мне удалось пройти телефонное интервью на позицию программиста в одну зарубежную компанию. Меня пригласили на очное собеседование, и стало понятно, что мне предстоит провести 3 недели дома, в Москве, в ожидании, пока мне не оформят визу. Хотелось успеть сделать за это время что-то полезное. Я подумывал найти себе интересное обучение или попробовать влиться в какой-нибудь Open Source проект, да в конце концов, просто устроить себе диванный отдых, но по воле случая я начал писать мобильную игру.

Мысль о том, что до боли простые (в плане реализации) казуалки вроде 2048 или Flappy Bird принесли своим создателям огромные деньги, периодически провоцировала в моей голове удары гонга. Я часто видел, как люди залипают в мобильниках над очередной головоломкой, но повода задуматься о том, что я тоже хочу такое сделать, жизнь не подбрасывала. Не подбрасывала до тех пор, пока за очередным приятельским ужином мой друг Илья не начал отвлекаться от разговора со мной на какую-то тыкалку в своем телефоне. Оказалось, он начал осваивать разработку под Android и написал свой первый прототип игры на Unity. Слово за слово, я увлекся его проектом, и вот уже мы сидим, обсуждаем, что бы там можно было еще улучшить в его игре. Знаете, иногда бывает так, что если мысленный поток начал двигаться в каком-то направлении, его уже не остановить?  Пока я ехал домой после ужина из кафе, мой мозг скрупулезно перебирал в голове все известные ему головоломки, расчленял их мысленно на кусочки и пытался выудить из них ингредиенты успеха. В итоге сработал старый добрый инженерный подход: все новое — это рекомбинация чего-то старого. Так и я решил превратить Тетрис в словесную игру. К вечеру следующего дня у меня было написано консольное приложение на Java, которое выплевывало рандомные буквы, а я пытался играть в тогда еще не существующий Baldix на бумажке.

К утру следующего дня я выработал основную идею:

  1. На поле размером 5х5 будут волнами падать буквы.
  2. Собрал из букв слово — и буквы исчезают, провоцируя новую волну.
  3. Проигрываешь, когда заполнится экран.

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

BALDIX_2

Осваиваем технологию

Я сразу решил сделать игру кроссплатформенной. Проект явно был рассчитан скорее на приобретение опыта, нежели прибыли. Хотелось опробовать как можно больше новых для меня вещей. Сначала я попробовал Unity: установил среду разработки, начал вникать, проходить какие-то туториалы. Через пару часов пришло осознание, что я стреляю из пушки по воробьям. Куча возможностей по работе с графикой: 3D, камеры, эффекты. У меня на все это не было времени. Мне нужны были падающие квадратики с буквами. Все.

Я начал искать другое решение и наткнулся на libGDX. Тоже куча возможностей: физический движок, ненужная мне библиотека GUI компонентов. И тем не менее, это Java, которую я хорошо знаю, и это Open Source, и квадратики легко рисуются… Я погрузился в изучение libGDX и решил дальше не искать. Так и мучаюсь с ним до сих пор 🙂

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

Если соберетесь осваивать libGDX, советую принять во внимание один важный момент. Для работы на iOS этот движок использует виртуальную Java машину RoboVM. Она пакуется в ваше приложение вместе со всем остальным кодом, и размер вашего .ipa файла растет, как на дрожжах. В Baldix-е папка со всей графикой и звуками занимает 1.2MB, а установочный файл игры получается 52MB.

Дело тут не только в самой виртуальной машине. Мало того, что она сама занимает кучу места, так это еще не все. Вы ведь хотите встраивать в игру сторонние SDK: интеграцию с фейсбуком, вконтакте, рекламу. Над нативными библиотеками для RoboVM пишутся специальные обертки. Называются они RoboVM bindings. Для фейсбука, например, такая обертка весит 38MB, для AdMob — 19MB. И так ваше приложение разрастается до фантастических размеров. Стоит об этом подумать заранее, учитывая, что Apple разрешает закачивать приложения больше 100Mb только по WiFi.

BALDIX_3

Оттачиваем геймплей

На освоение libGDX вкупе с приобретением лицензий разработчика в Google Play и App Store ушло 2 дня. Еще 3 дня я потратил на разработку первого прототипа. И вот к концу первой недели работы у меня на руках была первая сборка, которую можно было тестить.

Моя игра была максимально простой визуально. Мне хотелось, чтобы это касалось не только графики, но и геймплея. Я помню, как проводил аналогии между бритвой Оккама и игрой.

В первой версии игры после набора слова из букв нужно было нажать на кнопку «готово», чтобы они исчезли. Я решил выбросить лишнее нажатие и удалять буквы по таймеру. Я долго подбирал время, за которое буквы должны исчезнуть, и впоследствии собрал кучу гневных отзывов от игроков по этому поводу. В итоге, не без помощи обратной связи и множества экспериментов, оптимальное время было найдено — 2.4 секунды.

Мне хотелось добавить в игру элемент, который бы заставлял концентрироваться игрока на приложении. Чувство концентрации повышает для человека важность того, чем он занимается в данный момент. Я пронаблюдал этот феномен на примере игры Flappy Bird и попытался сделать аналогичный шаг, добавив в приложение таймер. На данный момент мне сложно сказать, было ли это хорошей идеей. Многие игроки просят добавить в игру режим игры без таймера, и, возможно, он появится в одном из ближайших обновлений.

Тут подправил, там подкрутил, подобрал цвета, вставил звуки, запрогал игровое меню и оглянуться не успел, как пролетела вторая неделя. Пора было выкладывать приложение в игровые маркеты. Я понятия не имел, как это делать, но я справился. О том, что случилось после запуска, как я пытался раскручивать приложение и что из этого вышло, я напишу в следующей статье. Если вам интересны другие подробности внутренней кухни создания Baldix, заходите на огонек в группы в социальных сетях:

https://vk.com/club93721898

https://www.facebook.com/groups/baldix/

Пишите отзывы. Всем буду рад.

 

P.S. Кто хочет принять участие в «Песочнице проектов» и опубликовать статью о своём проекте, участвуйте: http://tproger.ru/about/sandbox/.

Сергей Кюне, создатель игры «BALDIX»