ommand

Пикабушник
поставил 64817 плюсов и 368 минусов
отредактировал 0 постов
проголосовал за 2 редактирования
Награды:
5 лет на Пикабу
3321 рейтинг 2 подписчика 6 подписок 5 постов 1 в горячем

Самый серьезный телохранитель из тех, что я видел

Самый серьезный телохранитель из тех, что я видел

Заметки о разработке игры под Android

Добрый вечер, пикабу. Настало и мое время рассказать про то, как мы делали свою игру.


Из имеющегося в распоряжении - 2 студента-программиста, неслабый энтузиазм и устойчивое желание делать игры. Идея сделать игру назревала давно, и вот настало время попробовать свои силы. В качестве первого проекта было решено попробовать разработать несложную в механике и реализации головоломку, основная цель - научиться работать в Android studio, изучить Java и Google API, а так же попробовать опубликоваться в Google Play. Была придумана концепция игры, в которой имеется игровое поле 6х6 клеток, каждой из которых соответствует цифра [1-9] или знак арифметической операции [+,-,*]. Задача игрока - непрерывно проводя пальцем собрать из клеток арифметическое выражение, по значению совпадающее с "целью", к примеру, собрать комбинацию "3+5*2", когда имеется "цель" - "13". Игровой процесс:

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

Итак, была установлена студия, настроена система контроля версий через bitbucket и дело закипело. Двигалось не очень торопливо, в основном из-за того, что разработку приходилось совмещать с учебой и написанием дипломной работы. Первый прототип появился примерно через неделю и был вполне играбелен, хоть и обладал значительным количеством просчетов и упущений. А так же довольно убогим интерфейсом. :D

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

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

В дальнейшем мы основательно поработали над главным меню и цветовой гаммой, в результате получилось что-то такое:

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

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

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

На момент, когда еще не было нормального названия игры, она имела рабочее название - Numerical Project. Однако, когда для дальнейшего тестирования подошло время регистрировать аккаунт разработчика в Play, путем мозгового штурма было выбрано название игры - Plus и название компании (да, нашей мегакорпорации из двух человек) - KeyCode, после чего сразу же сделана анимация сплэш-экрана:

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

Из-за того, что эта заставка была выполнена через анимации преобразований, а не обрабатывалась как самостоятельная цельная анимация, было большой проблемой выровнять все элементы относительно друг друга, с учетом разного разрешения на различных устройствах, которая хоть и была практически решена масштабированием, находились устройства, посылающие подальше наше масштабирование. Под давлением мнения о том, что заставка немного "топорная", она была изменена на более лаконичную:

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

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

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

Так как главная цель разработки - обучение, для большего охвата "новоизученного" было решено внедрить в игру Google Games API, а именно - таблицы рекордов, достижения, мультиплеер (ага, таковой теперь имеется!), а как раз для этого и необходима регистрация аккаунта разработчика.

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

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

Зато задача подключения мультиплеера оказалась уже гораздо серьезнее, ведь изначально придуманая механика не подразумевала наличия соперника. Решение было предложено креативным отделом корпорации - пусть дается одна цель, кто ее быстрее собирает - тот и молодец, того и очки. Сказано - сделано. Большая часть сложностей заключалась в корректной обработке сообщений между игроком-сервером и игроком-клиентом, а также в том, чтобы правильно был найден выход из ситуаций, когда игроки одновременно собирают комбинацию, или когда анимация у одного игрока прерывается действием другого. Много времени ушло на поиск и отладку багов, до сих пор нет полной уверенности, что удалось найти все, однако режим, на наш взгляд, получился вполне играбельный.

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

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

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

В качетсве оптимизации данных моментов выступило введение определенных правил на генерацию поля (абзац для людей с иммунитетом к скучному тексту):

- вероятность появления конкретного знака зависит от количества таких знаков на поле

- если среднее геометрическое чисел вокруг знака умножения превышает определенное значение - либо менять умножение на сложение/вычитание, либо уменьшать цифры. Используется среднее геометрическое, а не арифметическое, потому что, допустим, при равном среднем арифметическом, 8*2 (среднее геометрическое - 4) является более удобной для использования комбинацией, чем 5*5 (среднее геометрическое - 5).


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


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


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


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

Заметки о разработке игры под Android Android, Gamedev, Создание игр, Гифка, Длиннопост

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

Показать полностью 10

Контактные линзы

Контактные линзы

Зачем учить английский

Выучил английский - перешел с rutor и rutracker на ThePirateBay

Человек наконец-то достиг гармонии с самим собой

Человек наконец-то достиг гармонии с самим собой
Отличная работа, все прочитано!