image

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

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

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

Что было интересного при создании карточных игр, читайте в моем скромном опусе.

Мотивация


С появлением Xcode 6.4 я стал настолько ленив, что выпускал игры, на разработку которых уходило не более 48 часов грязного времени. Я долго зрел для создания японского дурака. Думал, ворочался перед сном. Толчком для старта послужил неожиданный всплеск популярности карточных игр для iOS.

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

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

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

Монетизация


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

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

Разработка


Все сделал на Obj-C, к Swift отношусь настороженно, а документацию-то почитываю.

Дизайн


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

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

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

В свою очередь большие лицевые картинки игральных карт являются составными — голова героя, прическа (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+ игр (тысяча, Карл!!), и платные никто не видит. Бесплатные также никто не видит, если о них никто-никто не расскажет.

Я использую простой трюк — игра как бы стоит 1 доллар, однако раз в пол-месяца объявляется бесплатной на 2 дня. Эти сроки проверены мной на 50+ авторских играх и им можно верить. Иногда распродажу можно делать и 3 дня. Лучшее время для sales = это воскресенье+понедельник. При этаком трюке некоторые игры получают до 500 скачек. А бывает 20. Здесь уже важно название, описание, картинки, видео.

Видео для игры делается в связке QuickTime (сдергивает 30 секундный ролик с экрана пришпиленного iPhone) и HandBreak для редактирования видео в правильный формат 30 кадров в секунду.

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

Еще трюк


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

Правила игры


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


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

P.S. По инерции от создания японского дурака я разработал московский деберц и уже играю в него. Это любимейшая игра выпускников мех-мата МГУ 80-ых годов. Если есть желающие (и знающие правила) получить игру на свой айФон на стадии тестирования — шлите мне свой Apple ID.

Экран игры в Деберц
image