Японский дурак

от автора

image
Посуда в нашем доме всегда была чистая. Потому что после трапезы мы играли в японского дурака. Папа, мама, братья, дети садились за стол (вернее не вставали от него) и играли, пока не была вымыта последняя сковородка.

Игра очень простая, быстрая и азартная. Один на один. Колода 36 карт. Разыгрывалось 18 взяток. Кто брал меньшее число взяток — тот мыл тарелки. Например, я выиграл 11 взяток, соперник — 7. Неудачник отправлялся мыть 11 — 7 = 4 посудины. Было выгодно проигрывать первые игры, пока оставались слегка запачканные вилки, чайные ложки и стаканы. Под конец бедолаге оставались лишь жирные сковородки и неподъемные кастрюли.

К сожалению, прошло время, и я стал жить вдали от родного дома. Скучал по родителям, игре и чистой посуде.
Да-да, однажды мне надоело скучать, и я написал Японского Дурака для iPhone и Японского Дурака для iPad.
Что было интересного при создании карточных игр, читайте в моем скромном опусе.

Мотивация

С появлением Xcode 6.4 я стал настолько ленив, что выпускаю игры, на создание которых уходит не более 48 часов грязного времени. Я долго зрел для создания японского дурака. Думал, ворочался перед сном. Толчком для старта послужил неожиданный всплеск популярности карточных игр для iOS.
Судите сами, мои старые карточные игры (Кинг и Диабло) приносили в течении последних 3 лет по 1 доллару в день. И вдруг последние полгода Admob и Chartboost реклама стала приносить на порядок больше. Доходы от Admob выросли до $2-$10 в день с приложения. Без всяких манипуляций с моей стороны.

image
Рис. 1 Доходы от Chartboost за последнее воскресенье от карточных игр.

Был еще повод создать эту игру, но повод печальный. Эх-эх…

Монетизация

В Японского я тоже поместил показ рекламы. Но с интересом. Если игрок набирает нужное число побед — реклама отключается.
Какие использовать рекламные площадки?
Несмотря на увлекательный доклад про аукцион второй цены, прочитанный Павлом Голубевым на Мобильных Белых Ночах пару недель назад, я в целях экономии времени оставил прежнюю связку рекламных площадок.

Во время игры внизу показывается баннер от AdMob (я настолько к нему привык, что без него чувствую дискомфорт), а после проигранного раунда показываю видео-рекламу от Chartboost.
Во время отладки произошел забавный эпизод. AdMob мне стал показывать рекламу об удлинение хм, хм, — читатели-мужчины знают чем речь.
На отключение этого баннера я потратил усилий больше, чем на реализацию алгоритма игры за соперника.

Разработка

Все сделал на Obj-C, к Swift отношусь настороженно, но документацию почитываю.
Дизайн.
Если принять логическую ширину экрана в 320 точек, то оптимальный размер игральной карты — 66 на 96 пикселей. При этом карта описывается как UIView, содержащий 4 UIImageView.

image
Рис.2 Образец игральных карт

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

В свою очередь большие лицевые картинки игральных карт являются составными — голова героя, прическа (8 штук), глаза(7 штук), рот(6 штук) и рубашка(4). Эти же элементы я использую для выбора соперника — всего 8*7*6*4 = 1200 различных персонажей с различной манерой поведения.

Для отображения лично хозяина айФона, как главного героя, я использую аватарку из Game Center. Поскольку алгоритм выдергивания личной фотографии из GC мной не найден, рискну предложить свой вариант. Критика приветствуется.

-(void)authenticateLocalPlayer{     GKLocalPlayer *localPlayer = [GKLocalPlayer localPlayer];     localPlayer.authenticateHandler = ^(UIViewController *viewController, NSError *error){         if (viewController != nil) { // зарегистрироваться бы             [self presentViewController:viewController animated:YES completion:nil];         } else { // аа!! уже зарегистрирован             if ([GKLocalPlayer localPlayer].authenticated) {                 // Get the default leaderboard identifier.                 [[GKLocalPlayer localPlayer] loadDefaultLeaderboardIdentifierWithCompletionHandler:^(NSString *leaderboardIdentifier, NSError *error) {                     if (error != nil) {                         NSLog(@"%@", [error localizedDescription]);                     }                 }]; // А вот тут сцуко выдергиваем твое фото                                 [[GKLocalPlayer localPlayer]  loadPhotoForSize:GKPhotoSizeSmall withCompletionHandler:^(UIImage *photo, NSError *error) {                     if (photo != nil)                     { // и запихиваем его во View, где морда героя будет светиться при просмотре текущего счета                         [scoreView storePhoto: photo];                     }                     if (error != nil)                     {                         NSLog(@"%@", [error localizedDescription]);                     }                 }];             }         }     }; }  ...    IBOutlet UIImageView *myPhoto; ...  -(void) storePhoto: (UIImage*) photo {     myPhoto.image = photo; }   

Трюки разные всякие

Раскруткой игр я не занимаюсь. Дело это совершенно для профессионалов или бездельников. Платные игры без раскрутки вообще не приносят загрузок. А Вы не знали? В день в магазине Apple появляются 1000+ игр (тысяча, Карл!!), и платные никто не видит. Бесплатные также никто не видит, если о них никто-никто не расскажет.

Я использую простой трюк — игра всегда платная, но раз в 2 недели объявляется бесплатной на 2 дня. Эти сроки (2 недели и 2 дня) проверены мной на 100 авторских играх и им можно верить. Иногда распродажу можно делать 3 дня. Лучшее время для sales = это воскресенье+понедельник. При этаком трюке некоторые игры получают до 500 скачек. А бывает 20. Здесь уже важно название, описание, картинки, видео.
Видео для игры делается в связке QuickTime (сдергивает 30 секундный ролик с экрана пришпиленного iPhone) и HandBreak для редактирования видео в правильный формат 30 кадров в секунду.

Пример видео имеется в магазине.

Еще трюк

Я выпускаю всегда два приложения — отдельно для iPhone и отдельно для iPad. Хотя они универсальные. Зачем? Два абсолютно одинаковых приложения — отличный полигон для эксперимента с рекламой, ключевыми словами, иконкой и прочей атрибутикой. Что увеличивает загрузку, а что — тормозит. Что использовать для interstitial — Гугл или Чартбуст( ЧартБуст — правильный ответ). Возможно, есть еще какие-то плюсы от дуализма. Минусов не замечал. Впрочем мужчины меня поймут, у нас много что продублировано в организме. И лишним это никто не считает.

Правила игры

Правила игры в японского дурака для двоих

Играют двое. Колода 36 карт. Каждому игроку на руки по 6 карт, 6 карт рубашкой вверх на стол, на каждую закрытую карту рубашкой вниз — еще по карте.
Ходит игрок, взявший последнюю взятку или следующий за раздавшим карты.
Ходить можно любой открытой картой или картой с руки.
В ответ противник должен положить карту обязательно той же масти. Если нет масти — обязательно козырь.
Взятку из двух карт забирает тот, чья карты старше.
прим. Козырь назначает противник раздающего по своим первым трем картам.

Надеюсь, было нескучно.

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


Комментарии

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

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