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

image

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

От идеи к реализации


Для начала необходима идея и требования к конечной игре. Разумеется, сразу же, захотелось сделать пошаговую 3D стратегию с элементами RPG класса AAA+ с лазерами и эльфами. Но нужно учитывать тот момент, что фантазия ограничивается возможностями, а значит требования нужно подогнать под эти возможности. С программированием проблем нет и опыт написания сетевых приложений имеется, а это говорит о том, что игра должна быть мультиплеерная. Но так как из художеств я владею только дзеном наложения теней в фотошопе, то графики в игре должно быть минимум.

Пришлось серьезно задуматься над жанром будущей игры. Стрелялки, стратегии и гонки требуют красивой графики, значит разработка одного из таких жанров в какой-то момент упрется в невозможность реализации. А вот карточные игры – соответствуют всем требованиям. Но тут другая проблема – карточных игр настолько много, что заходить туда нужно только с оригинальной игрой. Разумеется «покер» и «дурак» отпадают сразу. Пришлось составлять список возможных карточных игр и проводить опрос среди знакомых, который показал, что многие знают игру «Верю – не верю». И что не могло ни порадовать — толковых реализаций такой игры не было ни на маркетах, ни в соц. сетях!
Решение принято.

Пробежавшись по симпатичным карточным играм гигантам – для внешнего вида игры были сформулированы следующие требования:
  • Должен быть карточный стол как в казино;
  • Рубашка карт должна быть привычная глазу и «дорогая»;
  • Масти карт и их достоинства должны быть легко узнаваемыми;
  • Противники должны иметь аватарки и имена, дабы быть уникальными и ощущение игры с живым человеком не терялось;
  • Должны быть ежедневные начисления бонусов, чтобы проигравшиеся возвращались;
  • Должны быть привлекательные девушки с большими сись

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

Вывод 1: Нужно рассчитывать на свои возможности, тогда не наступит момента, когда вам что-то нужно, а вы этого получить не можете (Например 3д модель персонажей для MMORPGMEGA AAA+). Когда вы манипулируете возможностями и желаниями – вы не стоите на месте

Концепт
Концепт стилистики игры

Let’s cake make


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

Разберем составляющие серверной части:

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

Дальше – обработка действий клиента и связь нескольких участников в одну игру. Этим занимается сокет-сервер.

Наиболее доступным языком для сокет-сервера оказалась Java. И раз уж дело встало за написанием сокет-сервера, то решено было сделать API для сервера. Получилось вполне неплохо. На удивление, для полноценной работы игры, понадобилось всего 8 api. Т.е. написание сокет-сервера оказалось гораздо проще, чем казалось с самого начала.

Вывод 2: Не стоит бояться сложностей. Все гораздо проще, чем может показаться на первый взгляд.

Выбираем платформу для клиента


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

Тут уже пришлось составлять табличку плюсов и минусов различных языков программирования (плюсы и минусы были подобраны исключительно исходя из возможностей, целей и моему скромному мнению):

ActionScript (Web)
Плюсы: Очень легко работать с графикой. Довольно легкий язык. Кроссплатформенность. Возможность интегрирования в соц.сети с целью привлечения дополнительной аудитории.
Минусы: Никаких мобильных устройств, да и Flash’ом, по моим наблюдениям люди пользуются все меньше.

HTML + JavaScript (Web)
Плюсы: Очень легко работать с графикой. Довольно легкий язык. Кроссплатформенность. Возможность интегрирования в соц.сети с целью привлечения дополнительной аудитории.
Минусы: Беда (ИМХО) с работой на мобильных устройствах средней ценовой категории. Сокет-сервер необходимо привязывать к стандартам протокола RFC 6455 (а значит увеличить порог вхождения для других языков программирования)

Unity (огромное количество платформ)
Плюсы: Полная кроссплатформенность. Возможность интегрирования в соц.сети с целью привлечения дополнительной аудитории.
Минусы: Несмотря на то, что игра планируется полностью в 2d формате – придется привыкать что работаешь с 3D. Высокий порог вхождения.

Java (Android)
Плюсы: Довольно легкий язык. Большое количество целевых устройств.
Минусы: Охват только одной платформы.

Swift (iOS)
Плюсы: «Престижная платформа». Бо?льшее количество платящей аудитории в сравнении с другими мобильными платформами.
Минусы: Отсутствие девайсов, на которых можно было бы тестировать разработку

Немного поразмыслив над списком — выбираем Android, как наиболее оптимальный по возможностям и желаниям.

Вывод 3: Необходимо оставлять пути для маневра. Кто знает – если ваш проект взлетит – вы всегда сможете дополнить его новой платформой. Если у вас не складывается с одной платформой – можно перейти на другую.

О создании клиента


Самым оптимальным вариантом для написания каких-либо игр для Android – это использование OpenGL, что является довольно трудоемким процессом и требует отдельных знаний. Поэтому стоит обратить внимание на движки, которые существенно облегчат работу. Мой выбор пал на AndEngine, что в итоге показало неплохие результаты. Единственное что доставило некоторую проблему, так это правильное позиционирование камеры под разные разрешения экранов. Писать обработку координат под разные форматы совсем не хотелось, а оставлять пустые рамки – все-равно что нагадить в клумбу. Пришлось повозиться с форматом камеры которая бы позволяла заполнить весь экран изображением, при этом обрезая излишки и не растягивая содержимое. Получилось довольно неплохо, и вполне симпатично на всех форматах устройств. Описывать работу с AndEngine в данной статье не предполагается, так как тема неоднократно упоминалась на хабре.

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

Вывод 4: Правильное сочетание возможностей и желаний приводит к скорейшему результату.
image
Скриншот первой, настоящей партии игры

Total:


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

Проголосовало 410 человек. Воздержалось 89 человек.

Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.

Комментарии (20)


  1. PapaBubaDiop
    03.12.2015 09:14

    Хочу добавить, что на ios не нужен сервер, его функции выполняет Game Center. Для многоплатформенной игры это минус, а для быстрой реализации — плюс.
    Тема карточных игр — довольно благодатная для заработка и экспериментов в области дизайна карт и интерфейса приложения. А тема сисек в игре Верю-Неверю не раскрыта. Какие бонусы у победителя?


    1. psinetron
      03.12.2015 09:28
      +3

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

      Тема карточных игр — довольно благодатная для заработка

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


      1. zagayevskiy
        03.12.2015 20:19
        +1

        Но ведь можно сделать второе приложение — «Верю-Не верю 18+».


  1. WeslomPo
    03.12.2015 09:27
    +2

    Стоит заметить что по поводу того что у вас в пункте минусов ActionScript написана явная неточность. ActionScript3 чуть ли не легче чем остальные приведённые в списке технологии легче и проще компилируются под мобильные устройства, включая iOS(не имея при этом Mac). Ну и количество игр написаных на нём при этом работающих на телефонах, я думаю даже больше чем на AndEngine, просто потому что разработчиков игр на AS3 больше.
    Так же, справедливо будет отметить что Unity неплохо работает с 2D играми, даже в стандартной поставке без дорогостоящих плагинов, при этом думать о том что работаешь с 3D приходится не так уж и часто. Настоящим же минусом у него является то что при запуске, в бесплатной версии будет появляться логотип движка, и чтобы его убрать нужно заплатить круглую сумму, а также платность некоторых плагинов облегчающих разработку.
    Напрашивается вывод на то, что вы пытаетесь оправдать собственный выбор, а не на объективную оценку возможностей движков представленных в списке.


  1. psinetron
    03.12.2015 09:36
    +1

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

    Именно. Из предоставленных возможностей рассматривался вариант наиболее быстрого и просто написания игры учитывая собственные умения и навыки. В итоге выбрано то, где больше скилов, а значит быстрее и легче будет сделано. ИМХО, в случае, если бы данный проект рассматривался как коммерческий, то выбор бы пал на Unity


    1. AlexBin
      04.12.2015 12:34

      Не стоит забывать недавнюю новость Unity о прекращении поддержки веб-плеера в недалеких перспективах. Хотя я в эту новость не вдавался, но она мелькала на страничках хабра в каком-то Unity-дайджесте.


      1. Frost47rus
        04.12.2015 13:03

        Не в перспективах, а уже, по факту. Chrome этот плагин больше не запускает. А это самый популярный браузер.


  1. Zoolander
    03.12.2015 10:32

    Если вы как вариант рассматривали ActionScript — посмотрите и на язык Haxe, его наследника.

    Под Haxe уже есть набор хорошо документированных мультиплатформенных движков, к примеру, HaxeFlixel

    У него минусов ActionScript — он генерирует и Android, и HTML5, и iOS, и десктопный вариант, и даже умирающий Flash не забыт.

    Адаптация кода игры под разные платформы минимальна, простейшие движения, вроде Flappy Bird или подобных ей игр от KetchApp, могут компилироваться вообще без изменений.


    1. Frost47rus
      04.12.2015 13:00

      Есть ещё AIR. Знаете такую технологию?
      На своём опыте — сopy-past несложной игры в стиле hidden object моментально задеплоился на устройство без изменений и отлично отрабатывал на displayList.
      HaXe для простых в плане визуальных эффектов игр не нужен от слова «совсем».


      1. Zoolander
        04.12.2015 14:05

        я бы не сказал, что он нужен для сложных :)

        если есть готовая игра на ActionScript — пожалуйста, используйте AIR

        я предлагаю лишь расширить список. А по поводу превосходства того или иного выбора — это надо лично себя спрашивать, с учетом всех минусов и достоинств.


        1. Frost47rus
          04.12.2015 14:12

          Android, ios, desktop и веб (flash) — AIR всё это умеет.
          Тут больше важно то, каким языком уже владеет тот, кто выбирает технологию. В случае, если это as3, то выбор HaXe — лишь трата времени и сил, и дело не только в том, что библиотеки под HaXe или отсутствуют или обновляются редко. Я за 1.5 года работы на этой платформе столкнулся с множеством проблем, которых не испытывал с as3. В целом, остался не сильно доволен этим опытом.


          1. dadon
            04.12.2015 14:50
            +1

            У haxe хватает минусов, НО:

            1) отличная кроссплатформенность — охватывает веб / десктоп / мобилки
            2) при экспорте под любую платформу, вы получаете нативный проект, который можно модифицировать, а не готовый бинарник
            3) из пункта выше следует, что можно при необходимости использовать любой нативный код, стороннюю библиотеку
            4) если уперлись по производительности в каком-то моменте, можно переписать модуль для конкретной платформы, на нативном языке
            5) опенсорс!


            1. Frost47rus
              04.12.2015 15:19

              Плюсую за всё, кроме первого пункта :)
              Все остальные пункты прямо кричат «я — HaXe, поковыряйся со мной, бро», чем я обычно и занимался, вместо разработки продукта, что, по моему мнению, очень грустно.


  1. BIanF
    03.12.2015 16:31
    +1

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


  1. Andriyevski
    04.12.2015 10:35

    Абсолютно не важно выстрелят у вас проекты или нет, главное что вы наберетесь опыта на своих велосипедах развивая логику и интуицию, в итоге придя к выводу что шаблоны и паттерны класная штука :)
    Я за инди розработку, хотя в команде веселее!!!
    Есть много примеров инди розработки которые в итоге принесли если не милионы (не будем говорить об уникальных индивидах) то сотни и десятки тысяч долларов, той самой валюты без которой жизнь не на столько прекрасна, особенно если хотите создать свой ИТ-бизнес )))


  1. temas
    04.12.2015 17:42

    Какой хостинг использовали, если не секрет?


    1. psinetron
      04.12.2015 18:00

      Пока российский mne. После перевода на основные языки планируется перейти на амазон


      1. temas
        05.12.2015 17:42

        Советую посмотреть еще Google App Engine, он бесплатный в пределах определенного трафика (Это вариант PaaS), Ну а если IaaS больше по душе и не жалко средств, то Google Cloud Computing cloud.google.com/pricing как по мне подешевле. Amazon имхо — это если бизнес «удался»…


  1. fo0x
    08.12.2015 11:57

    совсем одиночный инди получается успешным только у единиц
    честно говоря, идея для игры показалась слабоватой, с вашими-то навыками


    1. psinetron
      08.12.2015 12:10

      Ну, как показывает практика — совсем одиночного инди не получилось даже здесь.
      По поводу идеи игры — в настоящий момент вы можете увидеть только каркас. Тему «как привлечь игрока» рассмотрим, как и обещал, в следующей статье. Уже готовятся дополнения, которые должны сделать игру притягивающей. Такие «фишечки» должны будут превратить «тапанье по экрану» в интересное занятие с соревновательным духом. Идеи о реализации есть, они обязательно будут добавлены и о них обязательно будет рассказано. Весь цикл статей хочется посвятить именно идее инди. И совместно с сообществом разобрать все этапы разработки и внедрения. В общем слабость идеи компенсируется более быстрыми результатами и безболезненностью экспериментов.