Эпизод 3 – новая надежда на успех игры под Android

    Привет, Хабрасообщество! В данной статье я хочу рассказать о своей игре Hexoquan, выпущенной под Android. Я затрону выбор идеи, реализацию, возникшие сложности и способы их решения.


    Это моя третья игра под Android, дошедшая до релиза. Игр, на самом деле, было больше, но не все доходили до релиза или же не были предназначены для него.

    Как я говорил в своей первой статье, геймдев для меня – прежде всего интересное хобби. Тем не менее, хочется делать игры качественней и качественней, учиться на своих и чужих ошибках, учитывать предыдущий опыт и выпускать игры, каждый раз превосходящие мои предыдущие. Что я и постарался сделать в этот раз.


    Не надо копировать


    Вопрос выбора идеи игры: тут каждый решает сам. Кто-то пытается попасть в волну и сделать очередной модный клон (сколько разных Flappy появилось во время пика знаменитой игры). Мне же хочется делать что-то новое (или почти новое). Потому во время поиска идеи я пытался придумать то, чего еще почти нет. При этом я хотел использовать популярный и полюбившийся мне стиль hex – игровое поле, состоящее из шестиугольников. В интернете полно хороших статей, описывающих принципы работы с подобным полем. Ну а сами шестиугольники дают свободу и пространство в генерации идей.

    Идея Hexoquan основана на Ô ăn quan – традиционной вьетнамской детской настольной игре, которая улучшает навык счета. Чтобы набирать в ней очки, необходимо раскладывать более крупные числа (2-9) на мелкие составляющие, создавая группы одинаковых чисел.

    Собственно, название Hexoquan и было придумано, как игра слов от hex (нет, не hexadecimal, а hexagon) и quan. На мой взгляд, получилось интересно и ново.

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

    Думаю, нет смысла подробно описывать весь геймплей с разными примерами: если кого-то заинтересуют скрины (а ведь игры поначалу оценивают именно по одежке), то можно установить и поиграть. Вкратце, как сказал ранее, смысл состоит в простом раскладывании чисел от большего к меньшему. Перед игроком находится поле с фишками, 3 из которых заполнены сразу (случайным образом). Фишки с цифрами можно перемещать – одно перемещение на соседнюю ячейку уменьшает значение фишки на 1, а эта потерянная единица остается в предыдущей позиции. Возможен и обратный ход вплоть до полной его отмены. Таким образом, поле заполняется новыми цифрами. Как только ход завершен, идет подсчет очков – для этого собираются группы фишек с одинаковыми цифрами и удаляются с поля, давая игроку очки, равные своим значениям. После этого на поле попадают 1-3 новых значения (в зависимости от заполненности поля). А если пустых ячеек не осталось, игра заканчивается. Все это сопровождается анимациями и звуковыми эффектами, оживляющими геймплей.

    GIF с геймплеем
    Небольшой ролик с процессом игры в несколько ходов



    Juice it or lose it


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

    Графическое оформление


    При разработке игры довольно быстро возникла идея делать разные темы. Здесь учитываются и вкусовые предпочтения игроков, и тематика праздников (не успел выпустить к Новому году и Рождеству, потому пока нет рождественской темы). Но нужно помнить и о физической возможности играть, выбрав какую-то тему – а вот это была одна из основных проблем!

    Встречаешь на просторах интернета красивую картинку (к сожалению, описываемая картинка утеряна) с темным фоном, светлыми буквами на нем – очень красивое и интересное сочетание. Берешь из нее цвет для фона, цвет для ячеек, проверяешь в графическом редакторе, как это выглядит, немного корректируешь и думаешь – красотаааааа! Затем переносишь все это в игру, начинаешь играть на телефоне и через 30 секунд понимаешь, что глазки твои не согласны с твоим цветовым вкусом. Таким образом, было минимум 4-5 итераций при создании каждой темы (на данный момент их три). Но именно так родилась первая, главная и моя любимая синяя тема:

    Финальный вариант синей темы



    Для компоновки спрайтов в атласы снова применял TexturePacker и очень его советую и рекомендую. Очень удобен, очень прост в настройках. Единственный недостаток – при каждом запуске предлагает купить версию про, но не вижу никакого смысла ни в про, ни во взламывании – бесплатных возможностей хватает вполне.

    Звуки и музыка


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

    В качестве фоновой музыки была выбрана довольно спокойная, но не унылая мелодия. Как показалось мне и добровольцам-тестировщикам, музыка игре подходит. Хорошо! Со звуками было сложнее, как и с картинками для тем. Сам звук нравится, но в игре звучит ужасно, нелепо, неподходяще под стиль игры. На помощь (помимо нового поиска) пришло снижение громкости, чтобы на фоне приятной мелодии звуковые эффекты были слышны, но не сильно выделялись и не раздражали. Но почему-то снижение звука в звуковом редакторе эффекта не давало – в нем становилось тише, а при импорте в игру все равно слишком громко. На помощь пришла возможность используемого мной Unity – у проигрываемого звука громкость можно менять или в настройках, или в коде (я предпочел второй вариант).

    Одним из примеров таких звуков является звук подсчета баллов. Например, если игрок «выбивает» с игрового поля три фишки с цифрой 7, то ему дается 21 балл, а значит соответствующий звук будет слышен 21 раз подряд (идея, навеянная все тем же видео). В первых реализациях это было похоже на раздражающий будильник ранним утром, но после снижения громкости и небольшого укорачивания самого звукового эффекта в редакторе игра действительно приобрела искомую изюминку.

    Прочие эффекты


    Чтобы еще немного оживить игру и сделать ее более привлекательной, были добавлены различные живые эффекты (не побоюсь каламбура). Например, новые цифры появляются на поле не моментально, а буквально влетают в него. Баллы начисляются так же не моментально, а поединично с соответствующей озвучкой.

    Обучение игрока


    Впервые в моих играх был добавлен хоть сколько-то полный туториал (ранее было лишь текстовое описание основных принципов геймлея с картинками). При его реализации стоял выбор между показом анимации «как надо играть» и непосредственным вовлечением игрока в обучение. Победил второй вариант как более правильный, менее ленивый. При этом игрок защищен от ошибки – ему пошагово показаны все элементы геймплея, их назначение. Пара шагов туториала ожидают непосредственное действие от игрока, где ему тоже показано, что, откуда и куда перетащить.

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

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

    Нам нужны оценки


    Очевидно, для успеха нужны оценки пользователей. При реализации данного функционала был прочитан ряд статей, как на хабре, так и на других источниках (были ссылки с новостных дайджестов хабра – все это нужно хранить и периодически перечитывать).

    Основные идеи:

    • Просьба оценить игру должна быть!
    • Просьба не должна раздражать пользователя и надоедать ему

    Как сказал выше, игре нужны оценки, но оценки должны быть положительные! Если же просьба будет надоедать игроку, то оценки будут, но совсем не такие, какие мы хотим. Потому были приняты и реализованы следующие моменты:

    • Наша личная просьба оценить игру появляется автоматически лишь 1 раз и вежливо говорит что-то вроде «Похоже, игра вам нравится, а нам важно ваше мнение. Не хотите ли оценить ее?». Такое сообщение появляется лишь после того, как с момента установки игры прошло 2 дня, а пользователь сыграл уже 5 игр. Эти цифры обдумывались. Изначально было 5 дней, но я подумала, что если человек не удалил игру сразу или через день, значит, хоть немного она его зацепила. 5 игр – тоже показатель проявления интереса, ведь не 1-2 и последующее удаление, а целых 5!

    • Сообщение имеет всего 2 кнопки – Да и Нет. Если пользователь выбирает Нет, больше автоматическое сообщение не появляется, дабы уважать выбор пользователя. Но ведь мы все еще надеемся получить хорошую оценку, потому в уголке экрана главного меню появляется кнопка Оценить, при нажатии на которую снова появляется просьба оценить приложение. Пользователь это понимает и далее сам решает, нажимать ему эту кнопку или игнорировать. Если же он выбирает Да, то мы переводим его в маркет на нашу игру.

    • Невозможно отследить реальный факт появления оценки от игрока, потому верим ему на слово (а что нам остается делать) и после согласия на оценку скрываем и кнопку Оценить. Все, верим в лояльность игрока и больше не отвлекаем его намеками на оценку игры.

    Напоминаем о себе


    Если вдруг игрок не заходил в игру какое-то время, но она все еще установлена, значит, полагаем, он еще хочет поиграть (ну ладно, надеемся на это). Надо лишь немного напомнить ему о том, что он недавно установил.

    Для реализации нотификаций какое-то время назад был написан собственный плагин. Помнится, и он доставил какие-то проблемы, т.к. это был первый и единственный опыт написания нативных плагинов, а затем их подключение и вызов через C# в Unity. Но дело сделано, плагин готов и работает.

    Как только игрок выходит из игры, мы готовим нотификацию, которая всплывет в панели состояния телефона через 2 суток. Если же игрок запустит игру сам до истечения этого времени, то нотификация будет удалена и не отправится. Для разнообразия было разработано несколько наборов текстов – каждый раз один из них выбирается случайным образом. Это своего рода поддразнивание игрока или же вежливый зазыв обратно в игру, в зависимости от текста нотификации.

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

    А вдруг доход!


    Хобби есть хобби, но и доход будет приятным.

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

    Какое-то время было сомнение, какую рекламу добавить – полноэкранные картинки или видео. Известно, что видео дает больший доход, но и ждать его завершения долго (если запретить закрывать до конца просмотра), а раздражать игроков мы не хотим. Поэтому были выбраны полноэкранные картинки, которые лишь изредка появляются в некоторых местах игры. Если же игрок хочет это отключить (да и своего рода donate), то может совершить соответствующую покупку в игровом магазине. В качестве модуля рекламы снова использую Chartboost — удобная консоль управления, прост в подключении и использовании.

    Для реализации IAP снова был выбран плагин Unity. У меня уже есть положительный опыт работы с ним с моей предыдущей игры Catch the square. Плагин довольно легко и быстро настраивается по официальным инструкциям Unity, поэтому здесь не будем уделять ему много внимания.

    Планы по продвижению


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

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

    Планы по развитию


    Кардинально механика игры меняться не будет.

    В планах есть выпуск новых версий, которые могут еще более «оживить» геймплей. Также есть идеи по новым темам. Это поможет поддерживать интерес имеющихся игроков и привлекать новых.

    На текущий момент все мои игры только на русском и английском языках. Есть желание наконец-то добавить еще несколько популярных языков: немецкий, французский, испанский.

    Финальный вариант тем индиго и монохром
    Тема индиго возникла так же, как и синяя — на основе случайно встреченной картинки в интернете



    Монохромная тема создана в дань памяти старых-добрых игр (Тетрис и т.п.)



    На этом все. Играйте, наслаждайтесь, ставьте новые рекорды, делитесь мнением в комментариях. Спасибо за внимание!
    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 36

      0
      Возможен и обратный ход вплоть до полной его отмены.
      А если пустых ячеек не осталось, игра заканчивается.
      То есть при заполненном поле нельзя делать обратные ходы в поисках хода, который позволит убрать с поля одинаковые цифры?
        0
        Нет, ход заканчивается (перед подсчетом баллов), когда игрок отпускает палец. Пока не отпустил, можно ход полностью отменить. Был вариант сделать немного иначе, но я выбрал этот, как менее замудреный. Иначе игроки бы жаловались, что у такой простой игры слишком сложное управление.
        Но если поле заполнилось во время хода, т.е. когда игрок производит раскладывание фишки на составляющие, то отменить этот ход и убрать расставленные игроком фишки, конечно, можно.
        Если же пустых ячеек не осталось после попадания на них новых 1-3 значений (т.е. после очередного хода и подсчета баллов), то все, это конец игры.
          0
          Ага, значит я не так понял механику совершения хода.
          То есть ход делается «ползанием» пальца по полю, где остаются следы-единички, постепенно уменьшая значение под пальцем? И за ход можно заполнить не одну ячейку, а сразу несколько одной цепочкой?
            0
            Да, все верно! И ход закончится, если отпустить палец. Пойдет (или не пойдет, если не образованы группы одинаковых чисел) подсчет очков.
            Был вариант разложить фишку в цепочку, отпустить палец, нажать кнопки отмены или подтверждения хода, после чего пойдет подсчет очков. Но на мой взгляд, такое управление усложнило и замедлило бы такую простую игру.
        0
        Желаю успеха.

        Я смотрю, вы использовали Unity, что привело к 20-мегабайтам APK-файла.
        Во-первых, можно попробовать сделать отдельный релиз для x86 и для ARM — и залить их в Google Play как одно приложение, но для разных платформ — это уменьшит размер до 10 мегабайт (что теоретически приводит к увеличению закачек).

        Если же совсем упарываться по минимизации, то можно попробовать реализовать такие мини-игры на HTML5 и заворачивать их в Phonegap (благодаря сервису Build.Phonegap это не потребует даже установки каких-то инструментов на свою систему). Таки образом мне удавалось получить игры с APK меньше мегабайта. Для пошаговых головоломок такой путь — через Phonegap — вполне может быть оправдан.

        Во-вторых, хотелось бы больше прочитать про базовые паттерны, которые используются для таких головоломок. Речь не о принципе игры, а о общих штуках. К примеру, я моделирую HEX-сетки как обычные двухмерные массивы со смещением каждого четного(или нечетного) ряда на полшага по горизонтали и со смещением всех рядов по вертикали для боле полной упаковки. Такое решение хорошо подходит для hex-сеток с прямоугольными границами (стратегии, настольные игры, шарики-стрелялки и тд), но с таким полем, как в вашей игре, я еще не работал. Навскидку предполагаю, что проще всего реализовать такое шестиугольное поле поверх обычной hex-сетки в прямоугольных границах, просто все поля за пределами шестиугольного поля — сделать нерабочими.
          0
          Большое спасибо за пожелания!

          1. Да, предпочитаю Unity, мне в целом с ним комфортно, хотя я не везде согласен с навязыаемым их командой способом разработки игр, потому применяю свои принципы. Что касается размера APK, то обычно действовал по принципу «какой файл Unity создает, такой и загружаю». А про подобное разбиение даже не знал. Попробую это поизучать, спасибо!

          2. Дело в том, что данная игра действительно простая, потому я не стал описывать паттерны. По hex действительно много уроков, например, ну ооооочень хорошо и с примерами их описывает Emanuele Feronato. Только он писал на ActionScript, сейчас под html5 и на Phaser делает игры. Но это не проблема, можно самому «портировать».
          Мое же поле построено, как и у вас, на основе смещений. Но в данном случае я задавал жесткий размер (количества ячеек в игровом поле), а потому именно тут не универсальный алгоритм построения поля любого размера, а жестко заданные координаты по 3 осям — сверху вниз, слева-сверху вправо-вниз, слева-снизу вправо-вверх. Координаты представляют собой просто номер фишки относительно центральной, где центральная это (0, 0, 0). Далее задействуются размеры текстур и, как вы сказали, смещения по горизонтали и вертикали. И получается такое вот красивое поле :)
            0
            о, спасибо за ссылку
            я начинал с туториалов на rembound.com — у него немного было примеров, но зато три классических игры были приведены полностью с исходниками (змейка, матч3 и bubble shooter). Исходники на html5/js, но читаются и перерабатываются довольно легко, хотя при переносе на другие платформы кое-что приходится менять
              0
              Можно я еще ссылочкой поделюсь по hex-картам. Просто я прям в оргазме от того как там круто сделано наглядное пособие http://www.redblobgames.com/grids/hexagons/
                0
                автор собирал ресурсы по hex-паттернам 20 лет? крут ))

                спасибо
                  0
                  Да, я работал именно по этой статье. Реально круто сделано, все понятно, разные варианты и примеры.
                0
                Итак, проведено небольшое исследование по уменьшению размера APK. Если собирать их под отдельные платформы, размер получается ~18 МБ против ~26 МБ в предыдущем варианте. Конечно, прибыль не в 2 раза, но хоть что-то.
                И как я понял в процессе изучения, прибыль в 2 раза (10 против 20) получается на совсем чистом проекте в Unity. С добавлением ресурсов, полагаю, ситуация немного меняется.

                Тем не менее, продолжу в этом направлении. И спасибо за совет! Буду и далее использовать это для своих игр.
              0
              Интерфейс понравился, вот только я что-то вообще не понял как в нее играть — тыкал тыкал на числа на поле и на пустые клеточки и ничего не менялось. Той информации, что присутствует не достаточно. Я думаю таких много будет пользователей и соответственно будут просто удалять игру.
                0
                Ну вот об этом я и говорил в статье: были пользователи, которые и из туториала не помогли, а были и те, кто без туториала заиграл. Мне кажется, что из него понятно хотя бы то, что нужно выделять ячейки и тащить их в сторону, а не просто тыкать.
                  0
                  Та пробовал по разному! Если бы это была просто игра, которую я скачал с плей маркета, то уже давно бы удалил, а так после прочтения Вашей статьи все же и поиграть хочется.
                    0
                    Спасибо за откровение и желание поиграть :) Ну это тоже, как я говорил. Для меня все очень знакомо и понятно, как автору. Потому сложно описать в туториале.
                    Но почему же у вас не получается? Пустые ячейки вообще не надо трогать. Нужно брать ячейки с цифрами и тащить их. При этом, т.к. ячейка перекрыта пальцем, ее текущее значение отображается справа-вверху для удобства. Раскладываете эту ячейку да так, чтобы были группы цифр. Например. есть у вас 6 и недалеко от нее две фишки с 4. Тянете 6 два раза в сторону 4к, получаете из 6ки: 1, 1, 4, а рядом еще 4, 4, это даст вам 14 баллов.
                      0
                      Все получилось! Там был туториал, а не сама игра, и надо было кнопку далее внизу нажать, а я пылся что-то сделать с недвижимым полем:)
                      Так игра довольно прикольная, и звуки очень нравятся, когда ячейки передвигаешь!
                      Еще присоединиюсь к комментариям выше, что очень большой вес для такой игры. Попробуйте уменьшить вес игры и, возможно, это повлияет на колличество закачек.
                      Плюс еще к меня сразу при старте, то есть после 5 сек первого запуска игры появилась реклама — это может повлиять негативно, попробуйте давать рекламу, хотя бы когда юзер сыграет партию:)
                        0
                        Отлично, что получилось!
                        Да, я уже получил замечание о том, что не понятно, что это туториал, а не игра.
                        Про вес буду думать и изучать, спасибо!
                        Про замечание с рекламой тоже учту, спасибо. Даже уже пришло решение.
                          0
                          Я уже понял смысл игры и даже набрал 1500 очков:) Идея и реализация класс! Желаю Вам поработать над всеми замечаниями и может быть ее ждет большое будущее:)
                            0
                            Ах, это ваш отзыв про 1500 очков. Ну круто! Честно, я столько не набирал, мой рекорд был 700 с чем-то :) Тогда и тут попрошу вас набраться терпения, попробую реализовать сохранение прогресса «правильным» способом.
                            Но не могли бы вы и уточнить, что именно произошло. Я проверил сейчас — поиграл, свернул игру. А затем пробовал и разворачивать из запущенных ранее, и запускать игру заново по иконке — в обоих случаях сразу открывался экран игры с ранним игровым полем.
                              0
                              Нет, то был не мой отзыв, но я видел его на плей маркете! Насчет прогресса не знаю, у меня он тоже вроде сохраняется.
                                0
                                Это бесконечная игра — у меня уже почти 4к очков:)
                                  0
                                  Вот это да!
                                  Так, похоже благодаря вам, придется усложнить игру. Например, при достижении 1-2к очков бросать на поле 4 новых фишки :)
                                    0
                                    не-не, и так нормально:) некоторым все же и так сложно.
                                0
                                Прогресс не сохранился у меня — собираясь на работу и в дороге играл по несколько минут с перерывами, а потом занялся другими делами и телефон выгрузил игру из памяти.
                                  0
                                  Ага, все-таки выгрузил. В следующее обновление попадет корректное сохранение прогресса, идеи реализации уже есть. Спасибо за отзыв!
                    0
                    Отличная игра, автору спасибо
                      0
                      И вам спасибо за похвалу!
                    • UFO just landed and posted this here
                        0
                        Но ведь в этом и смысл. Ячеек достаточное количество для простора. Появляются 3, убирать надо больше. Если немного подготовить поле, то я за раз убирал и по 5-6-7. Иногда, конечно, и от псевдо-случая зависит, ведь используется рэндом.
                        0
                        Отследить переход игрока довольно просто — отсылаем его на страницу отзывов через наш редирект. Но вы правы, что не стали этого делать. Когда приложение просит его оценить при каждом запуске, то хочется рвать волосы… На голове разработчика.
                          0
                          Не очень понял, что вы подразумеваете под «нашим редиректом». Если игрок соглашается оценить игру, то я и направляю его в гугл плей на игру. Но сам факт того, что он написал отзыв, узнать нельзя. По крайней мере, так написано в интернете, я пробовал искать.
                            0
                            Прошу прощения, у меня вечерний тупняк.
                          0
                          А размер карты как-то влияет на игру? А то для такого размера поля, на смарте с 5" у меня пальцы слишком толстые)) Может попробовать давать возможность выбор поля(сложности), например 3х3 или 5х5
                            0
                            Чем меньше поле, чем меньше свободных ячеек, значит игра будет быстрее заканчиваться. Думаю, что в поле 3х3 гейм овер будет наступать почти моментально :) Я бы и больше ячеек сделал, но тогда они будут слишком мелкие. Мне на 4.6" комфортно играется, но да, все индивидуально.
                            0
                            Я заметил, что оригинальные игры труднее заходят, они зачастую вообще не интересуют людей. Но честь и хвала тем, кто пытается делать что-то новое.

                            Тут остается лишь продумать схему — «как быстро разрабатывать оригинальное и странное», потому что большинство из оригинального просто не зайдет
                              0
                              Всем привет!

                              Спишу сообщить (в виде комментария, статью обновлять не стал), что вышла новая версия 1.1.

                              Что нового:
                              1. Уменьшен размер игры.
                              2. Сохранение прогресса игры – играйте в перерывах между делами и возвращайтесь к игре в любой момент!
                              3. Новые красивые темы: темная и цветная тема в стиле «домино».
                              4. Исправления и улучшения.

                              Оставайтесь с игрой, бейте новые рекорды :) Большое спасибо всем за советы и пожелания к игре — абсолютно все они были учтены, обдуманы, часть уже реализовано, часть остается в планах на следующие релизы.

                              Only users with full accounts can post comments. Log in, please.