Game development
Development for Android
January 2015 12

История еще одной игры на Libgdx+Box2d

From Sandbox
Идеей написать игру я загорелся еще в 2011 году. В августе 2011 года, не имея опыта разработки на PHP, обложившись книгами и этими вашими интернетами, по ночам писал небольшую браузерную космическую стратегию в реальном времени. Этакий клон OGame. Разумеется, со своими дамами и преферансом. Но проекту этому не суждено было родиться, в декабре 2011-го Родина-мать вдруг попросила отдать долг.

Вернувшись в декабре 2012 года, первым делом устроился в местную крупную IT-компанию. Нужно было максимально быстро вновь войти в рабочий ритм. К весне я уже не мог спокойно спать — мечтал писать игры. Второй попыткой было написать простенькую TD на Unity. Что-то даже получилось — пушки стреляли, мобы двигались. Но постоянно мучил страх, что не смогу довести дело до конца. Так оно и получилось. Семья, работа — свободного времени не было совсем. И только осенью 2014 года твердо решил — я сделаю игру и точка. Не буду спать, не буду есть, но сделаю. Этакий вызов на «слабо». Что из этого получилось читайте дальше.

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


В 2013 году мне подарили планшет. Именно тогда я узнал, что есть такое чудо, как Google Play. Когда же впервые там оказался — восторгу не было предела. Глаза разбегались от количества предложений. Спустя какое-то время в голове стали появляться какие-то наброски будущей игры. Хотелось что-то простое, но интересное. Я с детства любил играть в Чапаева. Именно на этой игре я и остановился.

Так как боевых знаний по Java и Android'у у меня не было, были заказаны на Озоне книги «Разработка игр под Android», «Программирование игр под Android», «Android для программистов. Создаем приложения» и «Философия Java». После прочтения уверенности в силах прибавилось. Вооружившись блокнотом (как советовали в книгах), я выдал два наброска:
и раз

и два

На этом муза меня покинула. Художник из меня, как вы сами могли заметить, никакой. Но на выручку пришел друг со старой работы — великий мастер Фотошопа. Посмотрев на мои шедевры, он выдал
первую версию дизайна





Я был в диком восторге. Просто не верилось, что вот-вот и появится игра. Тогда же были показаны эти макеты другу-программисту, с которым мы давным давно учились в одном классе. И вот нас горящих уже двое. Но радоваться пришлось не долго, установив IntelliJ IDEA, мы поняли, что не знаем, что делать дальше. Начался довольно продолжительный период поиска информации — как и на чем написать игру. В итоге мы наткнулись на Libgdx. Бегло пробежались по документации — оно. Именно то, что нужно.

Но тут как гром среди ясного неба к нам приходит идея привязать к игре еще и исторические факты. Поскольку пишем Чапаева, то и оформление должно быть соответствующим. Значит должны быть Красные и Белые (эти цвета были и в первой версии дизайна, но там они случайно). Должна быть символика того времени. Должна быть тактическая карта (она, кстати, тоже есть в первой версии и именно она подтолкнула нас на историческую привязку). Должен быть рейтинг. Должно быть pvp. Должен быть хитрый AI.

На выручку (уже в который раз) приходит наш дизайнер и выдает
совершенно другую концепцию
Заставка:



Главный экран:



Рейтинги:



Настройки:



Подготовка к бою:



Экран боя:



Экран в выбором типа управления (в дальнейшем мы его убрали, но он появится во 2-й версии):



Пауза:



Бой окончен!




От макетов к коду


Писалось все в свободное от всего время. Надо признаться, что основная работа занимала и занимает бОльшую часть суток. Плюсом семья и домашняя суета. В итоге мы были рады, если получалось поработать над игрой хотя бы 2-3 часа. Но иногда случалось чудо и мы ударными темпами, практически по-стахановски, ночами создавали экраны игры один за одним. На самом деле это оказалось проще, чем мы ожидали. И уже через пару недель у нас был рабочий прототип, который мы запускали на наших девайсах. Пришло время писать сам игровой мир с физикой. Конечно же, воодушевленные мы бросили все силы на свой велосипед. Но чем дольше мы его писали и шлифовали, то понимали — мы проваливаемся в бесконечный цикл. Написали что-то новое — протестили, нашли ошибки — поправили. И так до бесконечности. Иногда отваливалось то, что работало еще вчера. Так продолжаться долго не могло, и мы отправились на поиски физического движка. К нашему великому удивлению, мы нашли то, что работало в Angry birds, а именно Box2d. Сейчас причины того восторга как-то непонятны. Сейчас это все очевидно, но тогда мы радовались как дети.

Но тут нас подстерегало еще одно препятствие. Box2d очень хорошо подходит для платформеров (на хабре достаточно статей с примерами). У нас же игра с видом сверху. Выключаем гравитацию и допускаем очень серьезную ошибку, а именно выбираем неправильный масштаб игрового мира, он получается у нас ОЧЕНЬ большим. В итоге шашка двигается очень медленно. В дальнейшем, когда мы исправили эту ошибку, оказалось, что при пересчете на физические величины шашка двигалась со скоростью близкой к скорости света.

Подходил к концу второй месяц разработки. Опыт накапливался. Игра становилась все интереснее. Но очень многое мы еще не реализовали. В итоге решили временно отказаться от сетевой игры и вынести pvp-режим во вторую версию игры. Взамен прикручиваем локальный рейтинг. Используем SQLite и просто считаем статистику по играм по AI и каждому игроку(когда два человека играют на одном устройстве).

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

Игру мы перевели на английский и немецкий.

Итог


30 декабря настало время «Ч». Потратив неделю на тестирование и исправление ошибок, мы довели дело до конца. Сейчас игра в Маркете набирает скачивания и рейтинги. На написание всей игры ушло 2 месяца. Писали вдвоем. Всего же в команде 3 человека.

Графики выкладывать пока не имеет смысла, так как игра всего два дня в продакшене, но на рекламе уже заработали почти 3$. Это не достижение. Это просто факт.

Что мы вынесли для себя

Быть может таким новичкам как мы пригодятся некоторые советы.

1. Изучайте конкурентов. Ищите, анализируйте, читайте отзывы.
2. Начинайте собирать ошибки еще на этапе тестирования, это очень экономит время. Мы в своем проекте используем Crashlytics.
3. Проектирование. Проектирование. И еще раз проектирование.
4. Прототипируйте. Возьмите бумагу. Нарисуйте, нарежьте. Попробуйте поиграть в бумажную версию. Очень многие моменты будут решаться именно на этом этапе.
5. Продумывайте способы монетизации на этапах из пунктов 3 и 4. Так как у нас нечего продавать (по крайней мере сейчас), мы обошлись только показом рекламы.
6. Лучшее — враг хорошего. Никогда не наступит момент «Ну вот! Наконец-то все готово!». Умейте расставлять приоритеты задачам. Если реализация новой фичи занимает больше недели и без нее играть вполне комфортно — снижайте приоритет. Переводите задачу на следующую итерацию развития. Лучше выпустить версию, в которую можно играть, чем потонуть в море «хотелок». Не усложняйте, будьте проще.
7. Не стесняйтесь показывать промежуточные версии друзьям, коллегам, знакомым. У них свежий взгляд. У них не предвзятое отношение к продукту. Выслушивайте критику. Не обижайтесь, если критика жесткая. Все люди разные. Не бросайтесь реализовывать то, что по мнению некоторых людей будет бомбой. Возьмите на карандаш. Кто знает, может быть это реально будет бомба.
8. Я всегда носил с собой блокнот. Идеи приходили иногда совсем неожиданно. Старайтесь все записывать. Куда более легче и правильнее (имхо, конечно же) выбрать несколько стоящих идей из кучи набросков.
9. Никогда! Слышите? Никогда не останавливайтесь. Не бойтесь неудач. Неудачи — это прекрасно. Это показатель того, что вы двигаетесь. Это опыт. Его не купишь.
10. Верьте в себя. Даже если никто больше в вас или в идею не верит (да, бывает и такое). Это ваша идея. И вы обязаны ее довести до конца.

На этом у меня все. Спасибо за внимание.

Update
На момент выхода статьи мы имеем 1,5к уникальных установок из маркета и чуть меньше 4к тысяч пользователей всего.

В своей категории мы попали в топ-4
+20
26.1k 127
Comments 15