Опыт создания игры для смартфонов

от автора

Введение

Большинство лидеров в области мобильных платформ всяческим образом пытаются привлечь разработчиков в свой стан. Для этого они предлагают различные API и SDK для создания собственных приложений, которые, по их заверениям, должны принести хорошую прибыль, если не в финансовом плане, то хотя бы в виде полученного опыта.

Проверить так ли это, решено было на собственном опыте.

Идея


Главным критерием для нового приложения (игры) была его новизна на рынке. Потратив немного времени на размышления, в голову пришла одна головоломка из школьного возраста. Суть её проста – необходимо посетить все ячейки поля 10 на 10, совершая ход шахматным конём.Начинать движение можно с любой позиции. Раньше данная задача решалась с помощью тетрадного листа в клеточку и карандаша. Но теперь, в эру компьютерных технологий, это можно перенести в более удобный вид.

Немного пофантазировав, головоломка было модифицирована следующим образом:

  • Поле может быть любым (в том числе и с отсутствующими клетками). За счёт этого можно придумывать головоломки разной сложности
  • При прохождении уровня есть возможность начать отменять ходы, «заплатив» за это жизнью.
  • Добавлен вид ячеек, который требуется посетить на определённом ходу

Так как по сфере деятельности я в основном связан с технологиями Microsoft, такими как Silverlight или WPF, решено было реализовать игру для Windows Phone. Однако также хотелось иметь возможность лёгкого портирования приложения и на другие платформы, поэтому главным инструментом для реализации был выбран JavaScript и HTML. На момент начала разработки глубоко опыта работы с этими технологиями не было, но очень привлекала кросплатформенность, которую может обеспечить, например, Phonegap при используемом подходе.

Реализация

На реализацию было потрачено порядка 1-2 месяца ввиду занятости на основной работе и частого внесения изменений в уже реализованный функционал. Фундаментом для приложения послужил мобильный фреймворк jQuery Mobile, для которого имеется большое число плагинов как для работы с анимацией пользовательского интерфейса, так и для автоматизации других часто возникающих задач. Например, для анимации посещения ячейки поля был использован плагин Flip, а для отображения всплывающих окон — simpledialog2. Сама библиотека позволяет быстро создавать разметку, которая будет подходящим образом отображаться на мобильном устройстве.

Первая версия использовала только возможности HTML и Javascript и полностью работала в браузере. Правда, в каждом браузере по-разному =)

Кроме достаточно неочевидных различий при обработке разметки были и более фундаментальные. Например, выяснилось, что Internet Explorer не поддерживает localstorage при открытии локального файла (C:\\…). Поэтому, для работы с хранилищем данных пришлось использовать плагин JStorage.

function stGet(name) {     return $.jStorage.get(name); // Получаем данные через плагин     // return localStorage.getItem(name); // Стандартный localStorage } 

Другой необъяснимой фичей стало то, что описанная выше функция stGet возвращала null для параметра «settings.hints» и «null» (строкой) для «settings.language». Данное поведение повторялось независимо от использования плагина JStorage или localstorage. Подозреваю, что проблема заключается в локальном компьютере, но время проверить этого не было, поэтому просто использовал проверки обоих вариантов для задания параметров по умолчанию при первом запуске приложения.

Ещё одной сложностью стало желание поддерживать сразу английскую и русскую версии. В сети есть несколько решений данной проблемы, но для моей задачи должным образом они не работали. Мне хотелось менять язык всего пользовательского интерфейса приложения по нажатию одной кнопки. На данном этапе выяснилось, что достаточно полезно описывать HTML разметку не статически, а динамически собирать с помощью JavaScript. В этом, случае и переименовывать контролы можно без проблем. В связи с этим, в очередной раз пришлось переписать уже реализованный функционал. Но, как говорится, «цель оправдывает средства» и поставленная задача была решена.

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

Windows Phone

Windows Phone (WP), начиная с 8 версии, поддерживает HTML/JS приложения и не требует использования сторонних фреймворков (типа PhoneGap). Для запуска приложения на WP8 необходимо открыть его с помошью контрола WebBrowser.

Для того чтобы выложить реализованную игру в Windows Phone MarketPlace, её пришлось дополнить возможностью «Rate» для оценки приложения и добавить обработку нажатия кнопки «Back» на устройстве. Из-за отсутствия последней возможности была провалена первая сертификация приложения в WPStore.

Для добавления описанных фич был использован «мост» между контролом WebBrowser и стороной, написанной на JS. Реализуется всё достаточно просто:

  • через связку события Browser_ScriptNotify и метода window.external.notify("…") для вызова кода, который может работать с WP8 API
  • через Browser.InvokeScript("…") для вызова Javascript кода, который может управлять разработанным приложением

Также для регистрации приложения потребовалось подготовить скриншоты. Сделать их было довольно легко с помощью эмулятора, входящего в состав WP8 SDK. Было придумано название, описание, ключевые слова для поиска и проделаны другие необходимые процедуры (получение лицензии PEGI, регистрация банковского счёта). То, что получилось можно увидеть на картинке, а само приложение доступно в MarketPlace.

Заключение

В настоящий момент приложение платное и содержит 10 уровней. В ближайшее время планирую сделать бесплатную версию с меньшим количеством уровней и ссылкой на платную версию. После чего портирую его для пользователей IPhone. Приложение уже успешно запускается на iOS, осталось его протестировать и разобраться как опубликовать в AppStore.В ходе разработки “нагуглено” огромное количество опыта. Что касается финансовой части, пока ничего сказать не могу.

PS: Так как игра платная, и данная статья является в некотором виде её пиаром, название и ссылку нигде не указываю.

ссылка на оригинал статьи http://habrahabr.ru/post/164725/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *