Велосипедная История



Велосипедная история

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

Она попросила найти пасьянс «Косынка», такой же, как когда-то был на настольной Windows. Посмотрев с десяток программ, я был неприятно удивлён - почти все они имели неудобное управление, спорные карточные картинки, море дополнительных наворотов вроде 250 пасьянсов в одном, нанесения фото на рубашку и блэкджека с шлюхами.

.

В итоге мы выбрали один из более-менее подходящих вариантов и на время забыли о нем.

Пролетел год и я начал писать программы для мобильных телефонов.

При этом на первый план вышел вопрос кроссплатформенности, отладки внутриигровых покупок и подготовки контента для разных платформ.

Была идея сделать «Тетрис» или другой калькулятор, чтобы опробовать ручку, но все же в качестве «велосипеда» я выбрал «Клондайк».

Идейным ядром проекта стало максимально точное повторение старого доброго пасьянса из набора игр для Windows.



Содержание



Велосипедная история

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

длл.

Карты для Windows были нарисованы попиксельно талантливым дизайнером.

Сьюзен Кэр в 1989 году, в 16-цветном режиме.

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

Карты, используемые в некоторых играх мира Linux, оказались гораздо интереснее — они распространялись по лицензии GPL, хотя и выглядели немного странно, с чёрно-белыми высокими картами (фигурами).

Автором этих карт оказался тов.

Оксюморон, на чей сайт есть сами картинки и скрипт для их сборки.

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

Я немного модифицировал скрипт, чтобы он сохранял карточки в формате PNG, добавил прозрачности и заодно раскрасил старые карточки вручную.

Иконка «Пиковый туз» имела собственное стилизованное изображение, похожее на оригинал, напоминающее кельтский узор.

Она также стала иконой программы.

Для рубашки выбрана самая приятная (на мой взгляд) нарисованная от руки картинка с пляжем и пальмой.

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



Велосипедная история



Геймплей



Велосипедная история

Как оказалось, геймплей в «Клондайке» не так уж и прост из-за подсчета очков, таймера, выдачи одной/трех карт и одновременно режима Вегаса.

Например, игра на деньги с одной картой (т.е.

без возможности перевернуть колоду) заметно отличается от стандартной: ее цель – перевести как можно больше карт на тузы и собрать больше 42 долларов.

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

В счетной игре перемещение карты из колоды «вниз» и далее к тузам дает 15 очков, а непосредственно к тузам - только 10. Естественно, документировано это весьма условно, поэтому пришлось поставить оригинальную игру в вин и провести полноценное исследование.



Код

Бизнес-логику программы я писал на чистой Java 1.6, без использования сторонних библиотек, Android, Swing и т.п.

Для Android эта часть собирается как отдельная библиотека и без проблем подключается к GUI-проекту, а для остальных ОС я решил пойти нестандартным путем и не заниматься портированием «в лоб» на другие языки.

После некоторого рассмотрения проект Заточка смог преобразовать этот код в чистый C#, что открыло путь к реализации для iOS с использованием MonoTouch, а в будущем и для Windows Phone 7/8. Простейшие юнит-тесты показали, что логика работы не изменилась и трансляция прошла успешно.

В среде MonoTouch я без особых нюансов реализовал GUI-отображение, отладил игру на эмуляторе и iPod Touch и отправил на одобрение в iTunes Store. Настройки программы я реализовал с помощью внешней привязки к KGN.InAppНастройки , наткнулся на некоторые мелочи вроде отсутствия поддержки внешних библиотек.



Проблемы



Велосипедная история

Через неделю одобрения Apple мой «Классический пасьянс» появился в iTunes Store. Я ожидал критики графики или возможных лицензионных споров, но в первый день все было ясно: игра вылетает сразу при запуске.

Я удалил игру из магазина и начал изучать проблемы.

У моих друзей игра запустилась отлично, эмулятор и iPod Touch 4g тоже не показали никаких глюков.

Понадобилось несколько дней и помощь форумчан, чтобы найти первый серьёзный баг: в региональных стандартах iOS для Европы и Украины десятичный разделитель — «точка», а в России — уже «запятая».

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

Через неделю после отправки на согласование выяснилось, что игра тоже вылетает при запуске в ландшафтном режиме.

На iPod и iPhone все программы запускаются в книжной ориентации, поэтому отображается это только на iPad, которого у меня не было.

Переодобрение заняло еще неделю, в течение которой игра окончательно исчезла из категории «Новые» и успешно опустилась за пределы Топ-1000. Кроме того, была неприлично обработана иконка с прозрачным фоном, которая была хорошо принята в Android Market. скриптами Apple и стало откровенно некрасиво.



Высокое разрешение



Велосипедная история

К моменту, когда проект начал нормально работать, были заменены иконки и т. д., я приобрел новый iPad, где обнаружил, что разрешения карточек откровенно не хватает для экрана 9,7 дюйма, да еще и на Retina Display».

прыгающие карты» были откровенно медленными.

Борьба с лагами заняла пару дней, за которые я успел основательно приобщиться к Core Animation, но для улучшения разрешения пришлось нанять дизайнера.

Результатом его работы стало высокое разрешение.

цифры, буквы и цвета, максимально приближенные по стилю к оригиналу.

Фигуры я увеличил с помощью Photo Zoom Pro, чтобы не потерять аутентичность пиксельной графики.

Получилось не идеально, но все же вполне удачно.

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

Реализовать In-App Purchases под MonoTouch было не так уж и просто, но чтобы это выглядело органично, я решил избавиться от KGN.InAppSettings и сделать единый интерфейс для настроек и покупок.

Я не буду здесь описывать технические детали, но их немало, включая работу Манки над созданием своих Настройки, идентичных системным, борьбу с отсутствием документации StoreKit для Mono, различные баги с отладкой покупок, и т. д.

Выгода

Игра не стала шедевром, не попала в топ и вряд ли окупит затраты на разработку и работу дизайнера, но все равно теперь на всех моих устройствах (включая смартфон, с которого все началось) У меня есть «Клондайк», максимально похожий на оригинал, ставший родным еще со времен Windows 3.1. Опыт написания переносимого кода на Java и перевода его на C# оказался просто бесценным — с помощью этого метода моя команда уже портировала несколько крупных Android-проектов на iOS, а путем отладки на небольшой игре удалось получить хорошее понимание подводных граблей MonoTouch и разработки под iOS в целом, а заодно написание ряда полезных библиотек.

Возможно, кто-то посмеётся над этой историей, но как по мне, «велосипед» оказался очень подходящим, и время было потрачено совсем не зря.



Пост скриптум

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

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

Если кому-то нужен обновленный скрипт генерации карт, пишите на [email protected], это производная работа от проекта GPL, поэтому без проблем выложу.

Теги: #MonoTouch #iOS #история неуспеха #велосипед #разработка iOS #Разработка игр #Mono and Moonlight

Вместе с данным постом часто просматривают: