Pull to refresh

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

Reading time5 min
Views18K
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
Tags:
Hubs:
+23
Comments10

Articles

Information

Website
bashni.org
Registered
Founded
Employees
Unknown
Location
Россия