Game development
Development for Android
January 10 2012

Мой опыт разработки и продвижения. Игра «Балда»

From sandbox
Несколько дней назад состоялся очередной релиз моей реализации игры «Балда» под Android. Для меня это небольшая success story, потому что это мой первый проект, разработку которого я смог довести до конца и предоставить пользователям в Android Market. В этом посте мне хотелось бы рассказать о разработке приложения, его продвижении к вершине. Конкретные цифры и графики — под катом.

О приложении


Сама идея написать именно эту игру под Android появилась у меня чуть ли не 2 года назад, с моего знакомства с Android SDK и началом разработки под него. Эта игра в слова мне нравилась, но вот существующие реализации — нет.
Из-за лени и прочих форс-мажоров я откладывал это дело до осени этого года. Первая версия игры вышла в середине октября, и, как ни странно, была довольно-таки тепло встречена немногочисленными пользователями. Спустя три месяца проект все еще жив, на теперешний момент находится на 31-ом месте в топе своей категории в русском маркете и имеет более 10 тысяч активных установок.

Создание приложения


Анализ

Само собой такие игры под Android уже были в маркете, и поэтому начал я с анализа приложений-конкурентов.
В маркете на тот момент их нашлось аж три:
  • «Балда» от Дмитрия Чистякова — пожалуй, лучшая из всех на тот момент;
  • «Балда» от Wind Apps;
  • «Смешарики. Балда» от Marmelad Media.

Первая была самой популярной, судя по количеству установок, но, похоже, заброшенной — последнее обновление было в июле 2010 года.
Существовала и существует еще одна версия, распространяемая только под смартфоны LG — Word Game Balda, поэтому в маркете конкуренции не представляет.
Так как такие игры уже были, и не одна, то решение было очевидным — нужно сделать лучше, чем у других.

Разработка


Мозг

Разработку игры я начал с реализации «мозга» — алгоритма поиска слов. Для поиска слов использовался метод ветвей и границ — прибавляя букву за буквой алгоритм проверял, есть ли в словаре слова, которые начинаются с такой подстроки.
Написав полный перебор и оттестировав его на десктопной машине я перенес этот код в Android приложение. И сразу же был неприятно удивлен тем, что поиск слова, который занимал 100 миллисекунд на Core 2 Duo с частотой в 2.3 ГГц стал занимать десятки секунд на ARM5 с частотой в 600 МГц(на тестовом HTC Wildfire).
Очевидно, что бутылочным горлышком была проверка наличия слова в словаре, которое начинается с определенной подстроки, что и подтвердил профайлер.
Чтобы не искать такие вхождения я стал хранить слова в виде хитрой мапы, где ключом было начало слова, а значением — список из всевозможных его окончаний. Поиск стал работать гораздо быстрее, но инициализация такой структуры стала занимать существенное время — загрузка приложения занимала около 40 секунд. Поэтому было решено переписать все это дело с использованием NDK. К сожалению, точных цифр привести не могу, т.к. первоначальной версии не сохранилось и алгоритм претерпел множество других изменений и оптимизаций, но реализация на C на том же HTC Wildfire инициализирует словарь меньше, чем за 5 секунд и находит слово в течение ~50 мс.
Эти цифры были лучше, чем у других реализаций в маркете и такие же, как у Word Game Balda, т.к. они так так же использовали нативную реализацию алгоритма поиска.
Ну и конечно же у игры была киллер-фича — это настраиваемый размер игрового поля, от 4 от 7 клеток, чего не было у конкурентов.

Интерфейс

Изначально интерфейс разрабатывался мной же, поэтому выглядел очень просто. Почему-то я решил сделать игру как бы нарисованную на тетрадном листке в клетку, поэтому совершенно необходимым мне показалось добавить анимацию перехода между экранами в виде перелистывания страницы.
В результате поисков я нашел две рабочих open source реализации — одна была честным перелистыванием на OpenGL от человека с ником harism, а вторая скорее симулировала перелистывание, рисуя на канвасе движущийся белый многоугольник с тенью. С OpenGL я не дружу, поэтому решил выбрать второй вариант(особенно если учесть, что пользователь вряд ли заметит разницу между ними за 0.5 секунды).
С этого момента началась одна неприятная вещь — т.к. для такой анимации нужно фактически знать как будет выглядеть следующая страница, то пришлось отказаться от разных Activity для разных экранов.
Все экраны лежат в одном FrameLayout вместе с компонентом, который рисует анимацию перелистывания.
При перелистывании происходит следующее:
// pageCurlView - компонент, рисующий анимацию перелистывания
pageCurlView.bringToFront();
pageCurlView.setVisibility(View.VISIBLE);

// получаем битмапку текущей странички		
current.buildDrawingCache();
Bitmap page1 = current.getDrawingCache();

// получаем битмапку странички, на которую хотим перейти
next.buildDrawingCache();
Bitmap page2 = next.getDrawingCache();

// отдаем их компоненту для отрисовки		
pageCurlView.animate(page2, page1, direction);

Другого выхода я не нашел — для Activity такие хитрые анимации прикрутить нельзя.
Первоначально получившийся вариант выглядел так:



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



Это буйство красок очень не понравилось пользователям, поэтому я решил наконец найти человека, который сделал бы что-то поприличнее. Разместив объявления на нескольких фрилансерских сайтах я в течение нескольких недель подбирал дизайнера. Как оказалось большинство дизайнеров разрабатывают дизайн для сайтов — с мобильными платформами работали единицы, и, как правило, только с iOS. Хотят они за несколько экранов солидные суммы, от 500$ и выше. Про nine-patch никто не слышал в помине, а то что я хочу в результате увидеть нарезку из png файлов, а не просто psd-файл удивляло практически всех. Поэтому я решил выбрать просто того, кто просил наименьшую сумму — 200$. Это были первые и единственные деньги, потраченные на разработку(если не считать регистрацию в маркете — 15$). После работы дизайнера изменилось немногое, но игра стала выглядеть лучше(и главное — появился клевый сплеш-скрин):



Реклама, статистика, ошибки

Монетизировать приложение я решил через рекламу. В качестве поставщика рекламы я выбрал AdMob. Встроить AdMob SDK очень просто, никаких сложностей я не заметил.
Для сбора ошибок я использовал BugSence. Подключается он очень быстро и просто, и я считаю что это просто незаменимая штука — из более чем сотни ошибок только о 7 штуках сознательные пользователи отправили отчет в Android Market.
Для сбора статистики об использовании я использовал Flurry — не могу сказать, что мне это принесло хоть какую-то пользу, но зато смотреть на их красивые цветные графики очень интересно.
Так же полезным при проведении рекламных компаний может оказаться отслеживание реферальных ссылок. Для этого нужно зарегистрировать простой BroadcastReceiver и сохранять в нем полученную ссылку:

AndroidManifest.xml
        <receiver
            android:name=".ReferrerReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>


ReferrerReceiver.java
public class ReferrerReceiver extends BroadcastReceiver {
	private final static String TAG = ReferrerReceiver.class.getSimpleName();
	private final static String REFERRER = "referrer";
	
	@Override
	public void onReceive(Context context, Intent intent) {
		Bundle extras = intent.getExtras();
		String referrerString = extras.getString(REFERRER);
		Settings.getInstance(context).setInstallReferrer(referrerString);
		Log.d(TAG, "Referrer is: " + referrerString);
	}

}


После этого при старте приложения я просто логировал соответствующее событие в Flurry. Это впоследствии помогло узнать сколько установок я получил после рекламной кампании.

Продвижение


Так как игра у меня получилась бесплатная, то помимо маркета я разместил apk-файл на нескольких форумах. Какие-то признаки жизни ветка игры подает только на 4pda. Благодаря отзывам и советам пользователей с 4pda игра приобрела несколько фич и в ней было исправлено несколько серьезных багов. В целом отзывы на форуме были куда содержательнее и полезнее, чем отзывы на маркете. После публикации игры стали появляться ее обзоры на разных блогах и сайтах, что дало определенный приток пользователей.
В самом начале со мной связались представители Ubi Nuri с просьбой адаптировать игру для их суровых корейских реалий, но я решил с ними не связываться, потому что 97% пользователей у приложения — русскоязычные, и вряд ли такая игра будет популярна в Корее.

Самым важным моментом в продвижении приложения мне кажется было добавление диалога при выходе с просьбой проголосовать за игру в маркете. После публикации версии с этим диалогом посыпались пятерки, рейтинг пошел вверх и приложение начало подниматься в топе категории. Сейчас у приложения 207 оценок и средний рейтинг 4.8, что очень даже неплохо.

Заработанные деньги в AdMob можно тратить там же — за 100$ можно купить рекламы на 120$. Я проводил две небольшие рекламные кампании по 120$ 28.12.2011 и 04.01.2012. Вот график рейтинга приложения в топе категории, две красные точки — это рекламные кампании:

После рекламы приложение начинает подниматься в общем рейтинге.

Несмотря на обещание AdMob'а тратить деньги, выделенные на рекламу, равномерно в течение дня они расходуются в течение 2-3 часов.

За 240$ я получил 4800 кликов и 469 установок. Таким образом получилось, что одна установка стоит около 50 центов. За эти же 50 центов можно купить гарантированные установки у Flurry, но минимальная сумма, с которой работает Flurry — 400$.

Сразу после обновления и последней кампании резко увеличилось количество пользователей. На этом графике общее количество сессий(красные точки — рекламные кампании):


Лучше всего эффект от рекламы заметен на графике новых пользователей:


После последнего обновления и рекламы увеличился доход в AdMob — с 15-20$ в сутки до 40-50$(график за последние 30 дней):


Всего с 12 октября 2011 года на реклама AdMob приложение заработало 1095$(из них 700$ — за последние 30 дней), из которых 200$ было потрачено на рекламу.

Что дальше?


На сегодняшний день количество пользователей растет, реклама приносит кое-какой доход и я надеюсь, что у игры светлое будущее. Прочитав на хабре давнюю историю о продаже прав на издательство инди-игры Ubi Nuri я тоже решил двигаться в этом направлении. Поскольку игра популярна только в русском маркете я выбрал несколько ведущих российских разработчиков и издателей мобильных игр(Alawar, Game Insight, Herocraft и Joybits) и отправил им письма счастья. К сожалению, никакого ответа ни от кого из них я не получил, видимо письма пропустили или просто проигнорировали.

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

Видео:


UPDATE

Приведу небольшую наглядную иллюстрацию хабраэффекта.

Статистика по новым пользователям из Flurry(красная точка — публикация статьи):


Статистика из Admob(красная точка — публикация статьи):


За 4 дня с момента публикации количество оценок в маркете выросло с 209 до 371 и приложение поднялось до 28-го места в топе категории.
И еще одна цифра, которая показалась мне интересной — на текущий момент пользователи провели в приложении суммарно 7 лет и 2 месяца.
+75
16.9k 265
Comments 49
Top of the day