Разработка игры: Умник! Играй с друзьями

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

Чаще всего игры в социальных представлены как Flash контейнер или через iframe. Если раньше большая часть игр была на Flash, то благодаря технологиям которые сегодня дает веб уже можно писать многопользовательские и анимационные игры.

Вот и в один из вечеров я решил попробовать написать свою игру и посмотреть на каких технологиях это можно сделать. Моя игра Вконтакте http://vk.com/app4533532. А дальше небольшое описание.

Я уже давно хотел попробовать возможности node.js и WebSockets поэтому игру было решено писать только многопользовательскую. Хотя первоначально, я думал попробовать использовать php, но так как уже давно на нем не программирую, то отбросил эту идею. Плюс про асинхронность node.js и сокетов слышал очень много хорошего.

banner

Идея игры, как и название, пришли в голову достаточно быстро «Умник! Играй с друзьями«. Игра представляет собой аналог игры «Кто хочет стать миллионером?» или «О, счастливчик», только у меня один игрок соперничает с другим. Цель игры-ответить на большее количество вопросов чем ваш соперник. Само собой подсказки мне пришлось придумать другие, а не как в ТВ шоу.

Для игры были выбраны следующие технологии. Как я уже писал node.js + библиотека socket.io которая позволяет использовать различные типы подключения для сокетных соединений. Это была серверная сторона, то есть логика которая отвечает за игровой процесс. Кроме того я использовал Silex фреймворк на php для создания API. Почему я все не сделал на node.js? Ответ прост. Есть запросы по типу получения рейтинга, входа в игру, процесс оплаты в игре, которые проще сделать на php, да и обновление php проще. Если же обновлять код на node.js, то придется перезапустить игру и все клиенты отключатся от игры. Поэтому неигровые процессы я вынес на плечи php.

В качестве Базы Данных сначала хотел использовать Mongo, но потом все же решил, что MySQL хватит. Все данные у меня структурированы, да и с этой БД я уже давно работаю. Для связи node.js с MySQL была использована библиотека node-mysql.

Для клиентской части я использую marionette, require.js, backbone, jquery. Для сборки проекта grunt.js  и less препроцессор.

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

screen-2

На создание игры ушло примерно 1 месяц свободного времени. Первые вопросы доставались из старых игр найденых на просторах Интернета. Где-то пришлось находить алгоритм которыми некоторые разработчики шифровали вопросы. Впрочем, как оказалось, многие из них были с неверными ответами, с грамматическими ошибками. На все это жаловались пользователи.

После добавления игры в Вконтакте — отправил ее на модерацию. Первая попытка модерация была через минут 30 после отправки. Отказали в размещении. Для игры необходимо было 2 человека минимум. К сожалению проверяющий человек был один и отклонил игру по причине «Всегда идет поиск соперника». Это был мой первый косяк после которого я понял, что надо сразу писать ботов для игры. Даже многие, кто заходил в игру по ссылкам в твитере сразу же уходили т.к. никого не было.

После написания ботов отправил игру на модерацию второй раз. В этот раз пришлось ждать аж 4 дня. Даже накатал письмо в поддержку. После этого игру разместили в каталоге. Но все равно игроков было мало. Почти всегда все играли с ботами. Но! у «Вконтакте» есть интересная фишка. Они могут за бесплатно разместить игру в блоке «Новые». Игр достаточно много, поэтому мой релиз в этом блоке был 20го октября. До 20го числа в игре было всего около 100 человек…Но проснувшись утром 20го числа…я был в шоке. В онлайне было 300 человек. Мой сервер с 1.5Гб ОЗУ просто не справлялся с такой нагрузкой. Игра постоянно перезагружалась. Честно — я не был готов к такой нагрузке.

Пользователи жаловались. Валились ошибки. В этот же день было исправлено множество ошибок. Каким-то образом в одну игру вместо двух человек попадало трое. Я долго не мог понять почему. Оказалось, что я забыл повесить индекс на одно из полей в БД. Из-за этого одновременно 2 пользователя находили открытую игру и подключались к ней до того момента когда ее статус в БД менялся с «open» на «playing». В последствии пришлось еще сильнее оптимизировать это «узкое» место.

После исправления багов пришлось закупать новый сервер уже с 4гб озу. Хорошо, что он был по той же цене, что и мой текущий сервер купленный в прошлом году. На 3 день после запуска, в ночь я перенес все файлы. К сожаления перенос DNS был не настолько быстрым и я потерял большое количество игроков. Это видно из следующего графика:

График посещаемости Умника

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

Первым, что пришлось сделать — возможность добавления новых вопросов пользователями. Вторым — отмечать какие вопросы с ошибками или нет. Это реализовал с помощью «лайков» и «дислайков» вопросов. В целом — теперь с ошибками находить вопросы проще.

Помимо игры пришлось развивать группу — в этом месте игроки сообщали о багах и неверных вопросах. Так же там идет продвижение игры: конкурсы, вопросы и т.п.

Помимо игры запустил магазин сувениров http://umnikclub.printdirect.ru/. Насколько это будет приносить прибыль-пока не ясно. Можно будет понять только через месяц-другой.

Какие еще планы по игре? 1. Запуск в одноклассниках (жду оформления ИП. Без юр. лица не запускают игру) 2. Попробовать возможности фейсбук. 3. Портирование на мобильные платформы.

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

Какие выводы я сделал для себя?

1. Для игры нужна хорошая и правильная монетизация. У меня вышла не очень. Подсказки особо никто не покупает.

2. Необходимо иметь мощное железо, иначе наплыв игроков уложит игру. Итог-потеря игроков.

3. Открытие юр.лица и оформление договоров. Без этого «голоса» из контакта и «Ок» из Одноклассников уже не выведишь.

4. Развивать группу надо сразу же вместе с приложением. Я упустил немного этот шаг. Ссылка на группу должна быть в приложении. И лучше — на видном месте.

5. Тестирование на «узкие» места. Без них можно получить много «загадочных» багов.

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

Сейчас игру установило около 60 000 человек. В среднем в онлайн бывает 100-150 человек. Сервак себя чувствует прекрасно. Игра находится на 684 месте в рейтинге самых популярных приложений. В игре иногда появляются небольшие баги-стараюсь их находить.

Всем удачной игры! Если у вас есть какие-то вопросы-задавайте в комментариях.