Как создать игру на компьютер в домашних условиях. Пишем свою первую игру. Прохождение для разработчиков. Как заработать на своей созданной игре

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

Понятие внешнего и внутреннего совместительства

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

Отличия внешнего и внутреннего совместительства

Принципиальных отличий у внешних и внутренних совместителей не так много. Рассмотрим основные из них:

Критерий разграничения Внутреннее совместительство Внешнее совместительство
Место выполнения работы У того же работодателя, у которого работник занят на основной работе У другого (других) работодателя(ей)
Ведение трудовой книжки Ведется работодателем по основному месту работы Отдельная трудовая книжка не заводится, но по желанию работника сведения о работе по совместительству вносятся в трудовую книжку по основному месту работы (при предъявлении трудового договора с другим работодателем)
Последствия расторжения трудового договора по основному месту работы при наличии трудового договора о работе по совместительству Трудовой договор о работе по совместительству продолжает действовать, но преобразовывается во внешнее совместительство Никак не влияет
Документы, предъявляемые при трудоустройстве по совместительству В данном случае нет необходимости предъявлять какие-либо документы, поскольку они уже есть у работодателя — документ, удостоверяющий личность;
— в случае, если работа требует специальных умений и знаний, представляется документ об образовании (квалификации) по требованию нанимателя;
— в случае, если работа, которая является основной, выполняется во вредных, опасных условиях труда, также необходимо представить справку, подтверждающую характер и условия труда
Особенности выплаты пособий по обязательному социальному страхованию:
— пособие по временной нетрудоспособности (ПВН);
— пособие по беременности и родам (БиР);
— ежемесячное пособие по уходу за ребенком (ЕПУР)
Пособия выплачиваются одним работодателем — если работник в настоящее время занят у работодателей, у которых он выполнял работу и в двух предыдущих календарных годах, то ПВН и БиР выплачиваются всеми работодателями, а ЕПУР - работодателем по одному из мест работы по выбору работника;
— если работник в настоящее время занят у одних работодателей, а в двух предыдущих календарных годах работа осуществлялась у других работодателей, все пособия выплачиваются по одному из бывших мест работы по выбору работника;
— в случае, когда работа в двух предыдущих календарных годах осуществлялась как у текущих, так и у других работодателей, ПВН и БиР выплачиваются работнику работодателями по всем местам текущей работы или одним из бывших работодателей по выбору работника, ЕПУР одним любым работодателем по выбору работника
Оформление листка временной нетрудоспособности («больничного») Выдается один листок временной нетрудоспособности Выдается отдельный листок временной нетрудоспособности для каждого работодателя. В листках место работы указывается либо как основное, либо по совместительству (в последнем случае дополнительно указывается номер листка, который выдан для основного места работы)

Особенности внешнего совместительства в отдельных профессиях и должностях

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

Понятия «работа по совместительству» и «работа по совмещению» часто путают. В 2006 г. даже понадобилось внести в Трудовой кодекс РФ дополнительные статьи (60.1 и 60.2), дающие четкое определение этим понятиям. Итак, что такое совмещение и чем оно отличается от совместительства?

Что такое совмещение

Статья 60.2 ТК РФ определяет работу по совмещению как выполнение «в течение установленной продолжительности рабочего дня (смены) наряду с работой, определенной трудовым договором, дополнительной работы по другой или такой же профессии (должности) за дополнительную оплату».

Это означает, что в течение своего рабочего времени работник выполняет и свои обязанности, и обязанности другого человека, то есть работает «за двоих».

Закон выделяет несколько видов дополнительной работы:

1) совмещение должностей (дополнительная работа по другой должности). Например, бухгалтер выполняет не только свои обязанности в полном объеме, но и обязанности кадровика (совмещает две должности);

2) совмещение профессий (дополнительная работа по другой профессии). Например, слесарь выполняет обязанности слесаря, а также обязанности токаря (совмещает профессии);

3) увеличение объема работ (дополнительная работа по такой же должности или профессии). Например, при отсутствии одного бухгалтера другой может выполнять его работу наряду со своими обязанностями;

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

5) исполнение обязанностей временно отсутствующего работника без освобождения от своих собственных обязанностей.

Как оплачивать совмещение и другую дополнительную работу

Установить доплату можно как в твердой сумме, так и в процентах к окладу по совмещаемой работе или по основной работе. Причем ограничений для работы по совмещению для коммерческих организаций нет, можно платить хоть 100 % от оклада по совмещаемой должности. Другой вопрос, будет ли работник успевать работать за двоих в течение 8 ч. Если это реально, наверное, стоит пересмотреть нагрузку на работника по этим должностям.

Что такое совместительство

Статья 282 ТК РФ дает четкое определение совместительства: это «выполнение работником другой регулярной оплачиваемой работы на условиях трудового договора в свободное от основной работы время».

То есть совместительство — это работа по другому (отдельному, второму) трудовому договору.

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

У работника, заключающего договор о работе по совместительству, должна быть основная работа (неважно, у этого же работодателя или у другого). Если работодатель один и тот же — совместительство внутреннее, если разные — внешнее.

Оформление совместительства — это полноценная процедура приема. Поэтому обязательны и инструктажи по охране труда, и ознакомление с локальными нормативными актами и картой специальной оценки условий труда (СОУТ), и оформление личной карточки, и издание приказа о приеме. А вот запись в трудовую книжку вносить не обязательно — только по желанию работника.

Работа по совместительству предполагает занятость после основной работы и/или в выходные дни. В табеле учета рабочего времени фиксируется время работы совместителя.

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

Прекратить договор с совместителем можно по всем основаниям, которые предусмотрены Трудовым кодексом РФ, а если трудовой договор заключен на неопределенный срок, то еще и в связи с приемом на эту позицию другого работника на основную работу (ст. 288 ТК РФ).

Как на практике различаются совместительство и совмещение

В таблице приведены основные отличия совмещения и совместительства, которые помогут найти ответы на некоторые достаточно часто встречающиеся вопросы.

Бухгалтеру поручили работу по совмещению по должности экономиста с оплатой в размере половины оклада экономиста. Как установить, что обязанности экономиста должны выполняться в течение 4 ч?

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

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

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

ООО «Зита» и ООО «Гита» входят в единый холдинг. В компании «Зита» специалист по охране труда находится в длительном отпуске. Ее обязанности готов выполнять специалист ООО «Гита». Что выбрать, совмещение или совместительство?

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

Главный механик дополнительно выполнял обязанности директора по транспорту на время его отпуска. Теперь он просит этот факт отразить в трудовой книжке. Как это сделать?

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

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

Совмещение и совместительство в чем разница об этом Вы можете узнать из данной статьи.

Трудовое право подработку делит на 2 категории:

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

Если вы хотите узнать, как решить именно Вашу проблему - обращайтесь в форму онлайн-консультанта справа или звоните по телефону.

Это быстро и бесплатно !

  • Дополнительные трудовые функции осуществляются посреди рабочего дня.
  • Добавочная работа проделывается вслед за концом рабочего дня, в личное время сотрудника.

Понятие совмещения

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

Оно обладает характерными свойствами:

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

Если дополнительная работа проделывается по должности, тождественной основной, происходит не совмещение, а увеличение масштабов работы. Объективных различий между этими терминами не существует, что явно из положений статьи 60.2 Трудового кодекса РФ.

Оформление

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

При совмещении нельзя установить для сотрудника испытательный срок. Заявление от сотрудника не принимается, поскольку не его волеизъявление инициировало это событие.

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

Регулируются эти трудовые отношения статьей 60.2 Трудового кодекса РФ.

Плата за проделанную лишнюю работу происходит по канонам 151 статьи Трудового кодекса РФ. Параметры платежа фиксируются в соглашении о совмещении и не имеют минимального и максимального пределов, все обусловливается масштабами и спецификой работы.

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

Отпуск при совместительстве

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

При предоставлении отпуска на основном рабочем месте совместитель вправе рассчитывать на оформление отпуска авансом, если его стаж на «второй» работе менее полугода.

Кадровый учет совместителей

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

При этом гражданин вынужден предъявить весь набор документов, требуемых для устройства на главное место работы и поименованных в 283 статье Трудового кодекса РФ:

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

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

Зачисление на работу по совместительству проистекает после подписания трудового договора. Составляется , затем формируется личная карточка сотрудника по форме Т-2, заводится отдельный табельный номер. При волеизъявлении работодателя для совместителя допустимо введение .

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

При переводе совместителя на основное место работы документально закрепить процедуру можно по-разному:

  • Составить к существующему трудовому договору.
  • Аннулировать предыдущий трудовой договор и подписать новый.

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

Увольнение при совместительстве

Аннулируются трудовые взаимоотношения при совместительстве в обычном порядке. Уволить совместителя работодатель может при принятии вместо него сотрудника, для которого это место станет основным. Сия возможность предполагается статьей 288 Трудового кодекса РФ.

Что полезнее для работника: совмещение или совместительство

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

Достоинства совмещения:

  • Значительно выше уровень зарплаты в одной организации при прежней протяженности рабочего дня.
  • Возможность повысить профессиональный уровень, выполняя функции вышестоящего работника.
  • Шанс расположить к себе работодателя, лишив хлопот по поиску временного работника.

Преимущества совместительства:

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

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

С каждым днем игры становятся все сложнее и навороченнее. Ежегодно в Steam они публикуются тысячами. Они распределяются по разным платформам и категориям. Аудитория игроков стремительно растет. Число разработчиков так же стремительно увеличивается. Быть инди, а точнее соло-разработчиком игр стало тяжело. Но романтика независимости заставляет снова и снова начинать разработку инди-игры. В статье мы поговорим, как выжить на этом пути и как разрабатывать классные игры в жестких условиях конкуренции.

Хотя появляются новые технологии для создания игр, с каждым годом их разработка становится все сложнее и сложнее. Есть тройка топовых движков: Unity, Unreal Engine 4, CryEngine 5. О них постоянно говорят, и их используют для разработки самых разных проектов самые разные разработчики. Тем не менее сложность этих инструментов перевалила мыслимый рубеж. Они огромны, их функциональность достигла вселенских масштабов. Все эти возможности могут быть использованы большими студиями, но для соло-разработчика это избыточный стафф, он ему не нужен, поскольку для его реализации нужны дополнительные ресурсы, которых у инди и так нет (для разработки игры мечты он свой дом заложил). И если это не AAA-игра, то реализация этих фич бесполезна.

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

Альтернативные движки

Я понимаю, что в настоящее время существуют инди-игры всех жанров на любой вкус (и это на самом деле хорошо), но мы под инди-играми в данном контексте подразумеваем маленькие, двумерные, ориентированные на мобильные устройства, созданные соло-разработчиком творения (которых преобладающее большинство), поэтому использовать Unity, UE4 для создания прототипов будет неоправданно сложно. Существует широкий выбор альтернативных движков, они проще в использовании и позволяют достигать впечатляющих результатов за меньший срок, минус спецэффекты, которые инди бы все равно не стал помещать в свою игру. Порой для создания полноценной игры под все платформы эти движки не требуют написания кода. Особенно меня продвинуло на тему альтернативных движков после участия в московской конференции разработчиков видеоигр White Nights 2017, прошедшей в октябре. Я подходил к инди-разработчикам, демонстрирующим свои проекты, и расспрашивал об используемом инструментарии. Во многих случаях они называли вовсе не Unity, а Construct 2 или GameMaker Studio .

Оба продукта представляют собой конструкторы двумерных игр, не требующие умения программировать (!). В Construct 2 игру создаешь, определяя игровые события и реакцию на них. Итоговые игры портируются под все распространенные платформы. Прога идет с подробной документацией, большим количеством примеров и теймплейтов, так что освоить ее несложно. Покупать советую в Steam, там ее стоимость за персональную версию составляет 6399 рублей.

Как самому создать игру. Construct 2 с открытым проектом

GameMaker Studio представляет собой популярный конструктор игр с двумя возможностями построения игры (подобно UE4): первая - методом drag and drop, вторая - писать код на собственном языке системы. В зависимости от целевой платформы игры, созданные с помощью GameMaker Studio, визуализируются с помощью OpenGL или DirectX с использованием соответствующих шейдерных технологий. Для обработки физики есть поддержка движка Box2D. Поддерживается широкий ряд устройств ввода. Десктопная версия в Steam стоит 1599 рублей, экспортеры для других платформ надо докупать: так, экспортер для web стоит 2579 рублей, для UWP - 6396 и столько же для мобильных систем.


Как создать игру самому. GameMaker Studio

Третий заслуживающий внимания альтернативный движок - AppGameKit . В отличие от двух предыдущих, разрабатывая с его помощью игры, надо писать код на скриптовом языке. Во многом благодаря этому он меня заинтересовал больше остальных. Стоимость этого движка в Steam составляет 2059 рублей, включая экспортеры под все поддерживаемые платформы. Хорошее вложение. За более подробным описанием архитектурной составляющей движка отсылаю тебя к упомянутой статье.

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

Где взять арт и прочий стафф?

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

Разработка игры с помощью AGK

Мой выбор пал на AGK по трем причинам:

  • разработка игр основывается на написании кода двух уровней (Tier 1, 2); мне, как программисту, легче освоиться в новом API, нежели в новом интерфейсе редактора;
  • цена демократична;
  • купил я этот движок еще два года назад, все обновления приходят сразу же, как появляются.

Дополнительные фишки: AGK поддерживает множество типов контроллеров, так, кроме геймпадов, он поддерживает контроллер бесконтактного управления Leap Motion. Плюс в AGK включена поддержка VR.

Visual Editor

После запуска AGK мы видим только редактор кода без каких-либо визуальных средств, которыми богаты другие движки. Однако в августе компания The Games Creator выпустила приложение, своего рода аддон для AGK - тулзу Visual Editor. Он покупается отдельно (стоит 899 рублей). Этот редактор позволяет визуально настраивать наполнение сцены и уровня твоей игры, импортировать изображения и 3D-модели, помещать их в сцену как игровые объекты, настраивать положение, размер, угол поворота, цвет и другие свойства с помощью инспектора объектов. Как выглядят сцены на устройствах с экраном разного расширения, можно увидеть, прямо не выходя из редактора. В конце концов, сцену можно сохранить и подключить к AGK. Тот спокойно выполнит код, как будто этот файл создан здесь же. Visual Editor дает возможность строить игры методом drag & drop (не полностью, но частично), подобно другим конструкторам, рассмотренным выше. Но, признаться, это не наш выбор.

Игра может состоять из нескольких сцен (например, главное меню, игровое поле, экран победы, экран поражения), и все они могут настраиваться в редакторе. Могут быть использованы текстовые поля, точки привязки, создание анимации и прочее.


Как создать игру. Visual Editor

Классические танки

Движок AGK одинаково хорошо подходит для создания 2D- и 3D-игр. Мы остановимся на 2D по понятным причинам: популярность на мобильных - целевых платформах - одна из них.

Мы испробуем AGK на танках, попробуем воссоздать «классические танки» с игровой консоли NES от 1985 года с новой графикой. Кто не в теме, та игра называется Battle City, во многом именно она послужила прототипом для современных игр про танковые войны (World of Tanks, «Танки Онлайн»). Поэтому наш мир также будет двумерным с обзором сверху.

Основы AGK

Разработку мы будем вести на ярусе №1 (Tier 1) - скриптовом языке, похожем на модернизированный для нужд игродела BASIC. Первое, что необходимо помнить о BASIC, - это то, что в конце инструкции не надо ставить точку с запятой. Расслабься и получай удовольствие: никаких указателей и низкоуровневых приблуд, классов тоже нет. Их роли выполняют структуры. Можно создать экземпляр структуры, который закрепляется за числовой константой. В будущем для обращения к этому экземпляру используется закрепленное за ним число. При выполнении функции, чтобы указать, над каким объектом производится операция, надо передать соответствующее число в первом параметре. По сути, в AGK имеется только три типа данных: integer, real, string. По большому счету это все, что необходимо знать перед началом кодирования игр на AGK.

Приступаем к кодированию

Мы не будем использовать Visual Editor, напишем весь код самостоятельно (см. пример в материалах к статье). Я не буду приводить в статье листинги игры, поскольку ты всегда можешь их найти в материалах. Я лишь напишу краткие инструкции по выполняемому коду.
Создадим в AGK новый проект и начнем кодировать. Сначала инициализируем окно вывода: зададим заголовок окна, установим его размер, укажем способность менять размер. Затем установим разрешение, возможную ориентацию устройства, частоту перерисовки, зададим использование всей области экрана, последним действием инициализации включим использование продвинутых векторных шрифтов вместо растровых. Этот код входит в шаблон проекта. Ниже находится основной цикл игры: do … loop. В нем выводится FPS и происходит перерисовка экрана.

После инициализации игры определяется тип данных для танка, неважно, вражеский он или наш, все поля одинаковые. Объявление типа начинается с ключевого слова Type, за ним следует идентификатор типа, в нашем случае TTank. В первую очередь каждому танку нужны координаты. В AGK объявление происходит таким образом: x as float. Заметь, на конце точка с запятой не ставится. Второй способ объявления переменных - это просто описать их. Например, переменную типа Integer можно объявить так:

x = 4 , real : x # = 4.4, string: x$ = "four"

То есть добавляется символ после идентификатора. У типа string для задания строки равноценно можно использовать одинарные или двойные кавычки, главное, чтобы закрывающая была парной для открывающей. Далее задаем идентификаторы для спрайта, для коллизии, для флага определения, чьей стороне принадлежит танк: игрока или ИИ. Скорость, частота стрельбы, количество жизней, флаг поверженности, таймер, измеряющий количество секунд, когда танк стал поверженным, флаг, устанавливающийся, когда танк достиг препятствия (нужен для ИИ), в поворотах танка участвуют две переменные: флаг, устанавливаемый в начале поворота, и номер стороны поворота (нужны для ИИ). Заканчивается определение типа ключевым словом EndType.

Затем объявим тип для объекта снаряда. Ему нужны: координаты местоположения, координаты места назначения, идентификатор для спрайта, флаг активности, флаг принадлежности и скорость.

Создадим два массива: один - для танков, второй - для снарядов. Примерно так: Dim tanks as player. Аналогично и со вторым.

Теперь нам надо загрузить текстуры. Это делается с помощью функции LoadImage, первым параметром передается номер, за которым будет закреплено изображения, а вторым - путь и имя файла. Все игровые ресурсы загружаются из подпапки media папки с игрой. Папка media создается при первой удачной компиляции. Таким же образом загружаем изображение снаряда. В цикле создадим все снаряды. Описание цикла начинается с For makebullets = 1 to 20, а заканчивается инкрементом циклической переменной: Next makebullets. В теле цикла происходит создание спрайта (CreateSprite с параметрами: идентификатор спрайта, номер натягиваемой на спрайт текстуры), установка его позиции (SetSpritePosition), установка слоя глубины (SetSpriteDepth), смещение начала координат для спрайта (SetSpriteOffset).

После этого мы сбрасываем значения всех параметров танков к значениям по умолчанию, это делается нашей функцией resetplayers. Из нее вызывается функция CreateTank. В качестве параметров она получает: номер танка (индекс в массиве танков), координаты, коэффициенты цветов, угол поворота, принадлежность к игроку или ИИ. CreateTank занимается созданием танка, определяет положение, скорость перемещения, частоту стрельбы, угол поворота. Также она создает для танка спрайты, настраивает их цвета, номера слоев. Далее загрузим текстуру фона и создадим для него спрайт, плюс нам понадобится текстура для препятствия. Зададим тип для препятствия - bricks. Он будет содержать только два поля: номер спрайта и активность. Положение задается при создании в расположенном ниже цикле.

Для игры нам надо загрузить два звука: выстрел и попадание. Это выполняется функцией LoadSound, она принимает цифровой идентификатор и имя файла. На десктопе AGK может работать с тремя форматами аудио: WAV, MP3, Ogg, а на мобильных с двумя, исключая MP3, из-за того, что этот формат не свободный. Создаем несколько глобальных переменных: текущее время, номер текущего уровня. Вызываем функцию для создания уровня. Весь код находится в глобальном пространстве и будет выполнен при запуске игры.

Далее мы погружаемся в центральный цикл нашей игры, тело которого выполняется 30 раз в секунду (зависит от частоты смены кадров, на PC может быть 60). Здесь первым делом нам надо получить количество миллисекунд (GetMilliseconds), прошедших с момента запуска игры. Затем запускаем цикл по всем игровым объектам - танкам. Если танк не вращается, он не подбит и им можно управлять (для этого вызываем функцию controlplayer), с другой стороны, увеличиваем его угол поворота. Поворачиваем определенный танк в направлении вектора его движения. Если танк вращается более двух секунд и у него закончились жизни, сбрасываем его состояние (resetplayers). Далее обновляются позиции всех снарядов в функции movefire и идет проверка на подрыв любого танка - в tankhit. Она возвращает номер подбитого танка, который начинает вращаться вокруг своей оси, вдобавок проигрывается звук попадания снаряда. Последней вызывается функция обновления экрана.

В остальном коде программы описаны используемые функции. Они представляют самую интересную часть - «живые» алгоритмы поведения игры.

Функция controlplayer, в которую передается номер определенного танка, реагирует на ввод юзера, производя соответствующие действия. Каждой клавише соответствует свой номер в системе ASCII, поэтому сначала нам надо объявить соответствующие клавишам константы:

#constant KEY_LEFT 37

#constant KEY_UP 38

#constant KEY_RIGHT 39

#constant KEY_SPACE 32

Когда игрок нажимает клавишу «Вверх», переменная Forward принимает значение 1, когда «Вправо» - переменная turn принимает 1, «Влево» - она же -1. При нажатии пробела, если танк не вращается, происходит выстрел (вызов функции makefire с передачей номера танка), с учетом того, что танк может выстрелить с интервалом в 500 миллисекунд.

Далее займемся управлением танками ИИ. Если танк противника находится на обозримом расстоянии, наш незамысловатый ИИ просто преследует танк игрока. Приближаясь к цели, он стреляет. Поэтому первым делом надо найти угол между танками. Это выполняется с помощью функции FindAngle. Ей передаются координаты первого и второго объектов. Если второй танк ниже первого, тогда переменная turn принимает значение -2, если выше, то 2. Следующим действием находим разность углов. Потом надо узнать расстояние между танками. Если оно больше 100 виртуальных пикселей, тогда вражеский танк движется к цели. К слову, в AGK измерения ведутся в виртуальных единицах; если после запуска игры их оставить по умолчанию, размер игрового поля составит 100 на 100. Размер можно произвольно менять, в этом случае он будет влиять только на расположение и размер объектов. Вражеский танк ведет стрельбу при следующих условиях: выстрел раз в две секунды, относительный угол между танками меньше 20 градусов, дистанция меньше 500 единиц. Кроме того, в этой функции надо запретить танку выезд за границы игровой области.

Последняя проверка, помещенная в эту функцию, - это столкновение с препятствиями. В цикле перебираем все препятствия, проверяем, чтобы они были активны, и тогда смотрим, была ли с танком коллизия. Если эти условия выполняются, пытаемся найти лучший путь для обхода препятствия. Когда в столкновении с препятствием участвует танк юзера, просто отключаем тягу вперед. При движении или повороте танка, управляемого ИИ, прибавляем значение переменной turn к текущему углу поворота. Поворот танка: положение по X вычисляем, прибавляя к текущей координате X синус угла поворота, умноженного на 32, положение по Y находим через вычитание из текущей Y косинуса угла поворота танка, также умноженного на 32. То есть, когда мы применяем косинус или синус к углу, поворот выполняется в начале координат, и, чтобы сместить его в заданном направление, надо произвести умножение. С помощью функции SetSpritePositionByOffset производим позиционирование танка. Последнее действие выполняется только во время движения: в нем происходит инкремент координат X и Y на синус
и минус косинус угла поворота, умноженного на скорость танка.

Также функция resetPlayers останавливает и делает неактивными все снаряды, выпущенные танками, сбрасывает параметры танков к начальным значениям.

Затем в функции makefire происходит активация, позиционирование, задание вектора движения и скорости снаряда. В начале выполнения игры мы создали 20 снарядов и спрятали их за пределы экрана, сделав их неактивными, чтобы в нужный момент не тратить время на создание и инициализацию снаряда, а, спозиционировав его, сразу запустить. Поэтому в рассматриваемой функции в цикле от 1 до 20 мы проверяем наличие неактивного свободного снаряда. Найденный, он становится активным, в качестве родителя ему присваивается номер выстрелившего танка, снаряд поворачивается так же, как материнский танк, назначается соответствующая танку позиция. С помощью операций с синусом и косинусом ему назначается вектор полета, затем в функции settankfiredest, прибегая к тонкому математическому выражению, мы вычисляем точку приземления снаряда.

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

Функция checkHit проверяет попадание снаряда в любой танк. Внешний цикл перебирает танки, внутренний - снаряды. Первым делом внутри проверяются возможные столкновения снаряда с ячейкой пола, всего их 192, а их нумерация начинается с 200. Если произошло столкновение с ячейкой пола (ракета достигла своего пункта назначения), дальнейшие проверки выполнять не надо, делаем снаряд неактивным. Следующая проверка смотрит, чтобы выпущенная ракета не принадлежала выстрелившему ею танку. Если она проходит, мы делаем проверку столкновения снаряда с вражеским танком. Если столкновение зафиксировано, уменьшаем количество жизней у подбитого танка, останавливаем ракету, помещаем ее в список доступных для очередного выстрела. Данная функция возвращает номер подбитого танка.

Функция makeLevel, судя по названию, формирует карту уровня. Сначала двойным циклом проходим по всем 192 «кирпичам», делая их невидимыми и неактивными. Далее делаем видимыми только некоторые препятствия.

Оставшиеся три функции носят вспомогательный характер. Функция wrapAngle на основе полученного значения угла возвращает эквивалентное ему значение, не выходящее из диапазона 0–360. GetDistance получает четыре параметра - координаты двух точек и возвращает извлеченный корень из выражения, вычисленного по теореме Пифагора; таким образом, функция возвращает расстояние между двумя точками. И наконец, findAngle, получая координаты двух точек, возвращает разность между двумя углами.

Игра готова, код написан, можно запускать на выполнение. Но прежде не забудь скопировать из материалов к статье необходимый арт (из подпапки media каталога с игрой). Арт для игры состоит из семи файлов.

Подготовка билда и распространение

Тестирование на мобильных девайсах

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

Разрабатывая игры с помощью AGK, их можно не только мгновенно тестировать на десктопе, но и точно так же, не заморачиваясь с установкой SDK и подготовкой билда, тестировать на мобильном устройстве. Для этого надо скачать и установить на свой девайс утилиту AGK Player .


Как создать игру. AGK Player

Я тестировал на планшете с ОС Android, однако имеется равнозначная версия плеера для iOS. Когда утилита будет установлена, надо подключить девайс к компу (через USB-кабель или по Wi-Fi), запустить AGK Player, а на десктопе в IDE AGK нажать пиктограмму Broadcast. AGK подключится к устройству, передаст данные, а в плеере запустится твоя игра.

Экспорт билда

Когда игра будет протестирована и отлажена, для ее публикации в сторе надо создать билд. Для этого с помощью команды меню File → Export Project «Tanki» → As Android Apk откроем окно Export Android APK, в котором предлагается задать свойства создаваемого пакета.


Как самому создать игру. Export Android APK

В области APK Settings, в ниспадающем списке APK Type предлагается выбрать целевую платформу: Google, Amazon, Ouya. App Name - имя приложения в операционной системе, Package Name - имя пакета, к примеру com.yazevsoft.Tanki. App Icon - иконка для приложения, Notification Icon - иконка уведомления, Oaya Large Icon - иконка в версии Android для игровой консоли Oaya. Ниже задается ориентация и минимально поддерживаемая версия Android. В области Permission задаются разрешения - доступ к компонентам системы, на которой будет выполняться наша игра: запись на внешние носители, доступ к камере, запись аудио, вибрация и прочее. Область Game Google Services/GameCircle Integration позволяет задать идентификатор для использования сервисов Google. В области Output задается путь, по которому будет сохранен итоговый пакет. Область Signing позволяет настроить свойства для подписания пакета для размещения его в сторах: задать версию, файл подписи.

Альтернативные сторы

Под конец статьи добавлю еще, что не стоит упираться и распространять свои приложения/игры только в топовых сторах - App Store, Google Play. Там все места заняли большие издатели, и покупатели в первую очередь смотрят на их продукты.

Обрати внимание на альтернативные сторы: Amazon AppStore, Opera Mobile Store, Яндекс.Стор и многие другие. На них меньше пользователей, меньше трафика, вместе с тем меньше конкуренции. Я не призываю ограничиваться тремя перечисленными, смотри шире. Лидирует платформа Android, между тем, кроме Apple AppStore, есть площадки для распространения iOS-приложений.

Появление альтернативных сторов связано не только с желанием их инициаторов заработать, дело тут и в национальных предпочтениях. Разговор идет о странах третьего мира и восточных товарищей - это Индия, Китай, Вьетнам и так далее. Там превалируют устаревшие Android-девайсы, и пользователи этих устройств готовы довольно часто совершать небольшие платежи за цифровые развлечения. Надо только правильно понять этот рынок. Поэтому выпускать там приложения/игры имеет смысл в сотрудничестве с местными дистрибьюторами. Тонкая восточная душа, сам понимаешь. На первое место выходит необходимость локализации своих игр для местных пользователей. Кроме того, в этих странах могут быть популярны игры других жанров: так же, как везде, казуалки, разные пазлы, экшны, гонки. Взгляни на следующую картинку об исследовании рынка. Она наглядно проиллюстрирует описанное выше.

Заключение

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

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

Статьи по теме: