ommand

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

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

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

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

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

Так как главная цель разработки - обучение, для большего охвата "новоизученного" было решено внедрить в игру Google Games API, а именно - таблицы рекордов, достижения, мультиплеер (ага, таковой теперь имеется!), а как раз для этого и необходима регистрация аккаунта разработчика.
Самым простым делом оказалось подключение таблиц рекордов, что выполняется в несколько строк кода, достижения - чуть сложнее, требуется добавить обработку выполнения определенных условий.
Зато задача подключения мультиплеера оказалась уже гораздо серьезнее, ведь изначально придуманая механика не подразумевала наличия соперника. Решение было предложено креативным отделом корпорации - пусть дается одна цель, кто ее быстрее собирает - тот и молодец, того и очки. Сказано - сделано. Большая часть сложностей заключалась в корректной обработке сообщений между игроком-сервером и игроком-клиентом, а также в том, чтобы правильно был найден выход из ситуаций, когда игроки одновременно собирают комбинацию, или когда анимация у одного игрока прерывается действием другого. Много времени ушло на поиск и отладку багов, до сих пор нет полной уверенности, что удалось найти все, однако режим, на наш взгляд, получился вполне играбельный.
Отдельной довольно масштабной проблемой вылезла следующая - в процессе игры, да и просто при ее старте, могло сгенерироваться довольно низкокачественное игровое поле, а именно - когда вокруг умножения собирались исключительно большие цифры, или когда в игре под названием "плюс" оставалось исключительно мало этих самых плюсов.
В качетсве оптимизации данных моментов выступило введение определенных правил на генерацию поля (абзац для людей с иммунитетом к скучному тексту):
- вероятность появления конкретного знака зависит от количества таких знаков на поле
- если среднее геометрическое чисел вокруг знака умножения превышает определенное значение - либо менять умножение на сложение/вычитание, либо уменьшать цифры. Используется среднее геометрическое, а не арифметическое, потому что, допустим, при равном среднем арифметическом, 8*2 (среднее геометрическое - 4) является более удобной для использования комбинацией, чем 5*5 (среднее геометрическое - 5).
В процессе тестирования игры при работающих правилах средний счет за раунд вырос чуть ли не более чем в два раза, среднее время игры стало выходить за 7-8 минут, что, как нам казалось, слишком долго, из-за чего пришлось добавить усложнение игры в процессе, и уменьшить среднее время появления цели.
Итак, на выходе мы имеем практически полноценную игру. Встал вопрос - а можно ли на ней хоть что-то заработать? Делать приложение платным, даже если и не дорогим показалось плохой идеей, поэтому решили попробовать включить рекламу и добавить внутриигровую покупку-премиум аккаунт. Пока что он позволяет только отключить рекламу, но планируются некоторые дополнительные фишки при его наличии. Для пикабушников в комментариях - бонус в виде ключей разблокировки премиум-аккаунта.
Отдельное спасибо хочется сказать нашим тестерам, которые несмотря на баги, вылеты и кривую работу игры продолжали упорно бить рекорды друг друга и сообщать нам о новых и новых падениях приложения или случаях некорректной его работы.
Вроде бы существенного ничего не забыл, в комментариях постараюсь ответить на все вопросы, также будет приятно получить рекоммендации и советы по поводу улучшения игры, или объективную критику в сторону не самых оптимальных наших решений. Например, в качестве идеи у нас вертится мысль прикрутить набор цветовых тем, наброски некоторых обозначены ниже. Один из нерешенных моментов заключается в том, что мы не можем придумать подходящий по стилю интерфейс для переключения тем - еще одна кнопка не вписывается, а дополнительное меню слишком громоздко.
Спасибо за внимание! Будем рады ответить на ваши вопросы. Ссылка на игру в комментариях.