2.1 Технологии программирования, используемые для решения поставленных задач
Unity 3D
Unity – кросс-платформенный инструмент для разработки двухмерных и трехмерных приложений и игр, работающий под операционными системами Windows и OS X. Позволяет разрабатывать под все самые известные платформы, такие как: PC, Linux, Mac, IOS, Android, Xbox One, PS4 и т.д. Unity позволяет использовать такие языки программирования как C#, BOO и Javascript.
Unity имеет очень простой интерфейс, который разбит на несколько окон: Hierarchy, где находятся названия всех объектов на сцене, которые можно группировать; Scene, где можно рассмотреть игровое поле под нужным ракурсом; Inspector, в котором находятся все свойства выделенного объекта и его компоненты; Project, где находятся все материалы проекта; Toolbar, где находится меню с инструментами. Проект в Unity делится на сцены – отдельные файлы, содержащие свой набор объектов, скриптов и настроек. Основным объектом игровой логики является игровой объект – сущность, которая включает в себя компоненты. Также Unity предоставляет интегрированные сервисы для вовлечения, удержания и монетизации игроков.
Достоинства:
1) удобство использования и простота освоения;
2) качественная документация;
3) большое сообщество разработчиковиспользующих Unity;
4) возможность настроить и доработать среду разработки под нужный проект;
5) интегрированные сервисы монетизации и аналитики;
6) кросс-платформенность.
Недостатки:
1) необходимо глубокое знание одного из используемых языков программирования;
2) обновления могут испортить уже рабочий код;
3) условно-бесплатный.
Unreal Engine 4
Unreal Engine 4 – кросс-платформенный инструмент для разработки игр, работающий под операционными системами Windows и OS X. Позволяет вести разработку игр под все популярные платформы, такие как: PC, Mac, Linux, Android, IOS и другие. Исходные коды движка находятся в открытом доступе, поэтому при желании можно его доработать под свои нужды.
Окно редактора состоит из стандартных окон, такие как: Scene outliner, где находятся содержимое сцены; Content Browser, где находятся все файлы и материалы проекта; Details – окно свойств объекта; Modes – режим работы с контентом. Основным объектом игровой логики является элемент Blueprint – чертеж. Это сборка из компонентов, которая образует сложный объект игрового мира. Управление этим объектом осуществляется с помощью C++ класса или редактора графов. Вместе они дополняют друг друга.
Достоинства:
1) качественная документация;
2) большое сообщество разработчиков использующих Unreal Engine;
3) большое количество обучающего материала;
4) кросс-платформенность.
Недостатки:
1) сложность в освоении;
2) необходимость отдавать 5 % прибыли от игры.
Defold
Defold – кросс-платформенный инструмент для профессиональной разработки игр от компании King, известной своими 2D играми. Является абсолютно бесплатным. Defold имеет простой и легкий в освоении интерфейс, а набор инструментов предназначен для работы с 2D проектами. Вся игровая логика контролируется с помощью скриптов, написанных на языке Lua. При создании пользовательских материалов имеется возможность использования OpenGL ES. Платформа была запущена в марте 2016 года, и до сих пор находится в бета тестировании, поэтому у нее нет большого сообщества разработчиков.
Достоинства:
1) направленность на 2D;
2) абсолютно бесплатный;
3) перспективный.
Недостатки:
1) мало обучающих материалов;
2) поддержка только одного языка программирования.
По итогу обзора, для разработки игрового приложения, была выбрана платформа Unity 3D, так как она обладает наибольшим числом достоинств. Готовые игровые ресурсы для проекта я буду искать на следующих сайтах:
OpenGameArt.Org — один из самых известных сайтов с бесплатными игровыми ресурсами, доступными как Creative Commons. Но я хочу отметить раздел Collect с готовыми тематическими подборками, которые очень экономят время.
Сraftpix, раздел Freebies — более 80 бесплатных пакетов 2D-графики для RPG, стратегий, аркад, платформеров и других типов игр. Тайлы, персонажи, GUI, иконки, фоны.
Open Game Graphics — гора плюшек для 2D-игр. Помимо дизайна интерфейсов, персонажей и уровней можно скачать 25 полных коллекций графики под игру конкретного жанра и антуража: мрачный Sci-Fi-платформер, красочный Top-down shooter, 8-битный рогалик и так далее. Много спрайтов в мультяшном стиле.
PixelGameArt — фэнтезийные и Sci-Fi-ассеты в стиле пиксель-арт с возможностью предпросмотра демок в браузере!
Kenney — поставщик игровых ресурсов, который предлагает около 60 бесплатных наборов ассетов, в том числе тайлы, изометрические спрайты, шаблоны-конструкторы для персонажей и построек, 3D-модели, музыку и звуки, элементы UI.
Game Developer Studio — более 100 бесплатных 2D-ассетов, которые можно отфильтровать в магазине по принципу «сначала дешевые». Автор сайта и всех материалов — Роберт Брукс. Вы можете отправлять ему идеи нового контента и голосовать за чужие предложения в разделе Suggest an asset.
Game assets на itch.io — золотые россыпи 2D- и 3D-графики для ваших игр. Тысячи ассетов от участников сообщества. Много красивого пиксель-арта, выразительные персонажи, детализированные тайлы карт и уровней. Никакой рекламы на страницах.
Объектно-ориентированное программирование (ООП) — методология программирования, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определённого класса, а классы образуют иерархию наследования.
Идеологически ООП — подход к программированию как к моделированию информационных объектов, решающий на новом уровне основную задачу структурного программирования: структурирование информации с точки зрения управляемости, что существенно улучшает управляемость самим процессом моделирования, что, в свою очередь, особенно важно при реализации крупных проектов.
Управляемость для иерархических систем предполагает минимизацию избыточности данных (аналогичную нормализации) и их целостность, поэтому созданное удобно управляемым — будет и удобно пониматься. Таким образом, через тактическую задачу управляемости решается стратегическая задача — транслировать понимание задачи программистом в наиболее удобную для дальнейшего использования форму.
Основные принципы ООП: инкапсуляция, наследование, полиморфизм.
Инкапсуляция— свойство языка программирования, позволяющее пользователю не задумываться о сложности реализации используемого программного компонента а взаимодействовать с ним посредством предоставляемого интерфейса (публичных методов и членов), а также объединить и защитить жизненно важные для компонента данные. При этом пользователю предоставляется только спецификация (интерфейс) объекта. Пользователь может взаимодействовать с объектом только через этот интерфейс. Реализуется с помощью ключевого слова: public. Пользователь не может использовать закрытые данные и методы. Реализуется с помощью ключевых слов: private, protected, internal. Инкапсуляция — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, полиморфизмом и наследованием). Сокрытие реализации целесообразно применять в следующих случаях: предельная локализация изменений при необходимости таких изменений, прогнозируемость изменений (какие изменения в коде надо сделать для заданного изменения функциональности) и прогнозируемость последствий изменений.
Наследование— один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с инкапсуляцией, полиморфизмом и абстракцией), позволяющий описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. Другими словами, класс-наследник реализует спецификацию уже существующего класса (базовый класс). Это позволяет обращаться с объектами класса-наследника точно так же, как с объектами базового класса. Простое наследование Класс, от которого произошло наследование, называется базовым или родительским (англ. base class). Классы, которые произошли от базового, называются потомками, наследниками или производными классами (англ. derived class). В некоторых языках используются абстрактные классы. Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеет поля, методы и не может использоваться для непосредственного создания объекта. То есть от абстрактного класса можно только наследовать. Объекты создаются только на основе производных классов, наследованных от абстрактного. Например, абстрактным классом может быть базовый класс «сотрудник вуза», от которого наследуются классы «аспирант», «профессор» и т. д. Так как производные классы имеют общие поля и функции (например, поле «год рождения»), то эти члены класса могут быть описаны в базовом классе. В программе создаются объекты на основе классов «аспирант», «профессор», но нет смысла создавать объект на основе класса «сотрудник вуза».
Полиморфизм— возможность объектов с одинаковой спецификацией иметь различную реализацию. Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1]. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций». Полиморфизм — один из четырёх важнейших механизмов объектно-ориентированного программирования (наряду с абстракцией, инкапсуляцией и наследованием). Полиморфизм позволяет писать более абстрактные программы и повысить коэффициент повторного использования кода. Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс. Общность имеет внешнее и внутреннее выражение: внешняя общность проявляется как одинаковый набор методов с одинаковыми именами и сигнатурами (именем методов и типами аргументов и их количеством); внутренняя общность — одинаковая функциональность методов. Её можно описать интуитивно или выразить в виде строгих законов, правил, которым должны подчиняться методы. Возможность приписывать разную функциональность одному методу (функции, операции) называется перегрузкой метода (перегрузкой функций, перегрузкой операций).
То есть фактически речь идёт о прогрессирующей организации информации согласно первичным семантическим критериям: «важное/неважное», «ключевое/подробности», «родительское/дочернее», «единое/множественное». Прогрессирование, в частности, на последнем этапе даёт возможность перехода на следующий уровень детализации, что замыкает общий процесс.
Объект. Поля, свойства и методы объекта.
Объекты — это крупнейшее достижение в современной технологии программирования. Изобретение и практическая реализация объектов являются подвигом человеческого гения. Объекты позволили строить программу не из чудовищных по сложности процедур и функций, а из кирпичиков-объектов, заранее наделенных нужными свойствами. При этом внутренняя сложность объектов скрыта от программиста, он просто пользуется готовым строительным материалом.
Свойство — это имеющий имя атрибут объекта. Свойства определяют характеристики объекта (цвет, положение на экране, состояние объекта). Методы — это действия или задачи, которые выполняет объект (то, что можно делать с объектами).
Классы
Класс является типом данных, определяемым пользователем. В классе задаются свойства и поведение какого-либо предмета или процесса в виде полей данных (аналогично структуре) и функций для работы с ними. Создаваемый тип данных обладает практически теми же свойствами, что и стандартные типы. Существенным свойством класса является то, что детали его реализации скрыты от пользователей класса за интерфейсом. Интерфейсом класса являются заголовки его открытых методов. Таким образом, класс как модель объекта реального мира является черным ящиком, замкнутым по отношению к внешнему миру.
Конструкторы и их свойства
Конструктор предназначен для инициализации объекта и вызывается автоматически при его создании. Ниже перечислены основные свойства конструкторов.
1. Конструктор не возвращает значения, даже типа void. Нельзя получить указатель на конструктор;
2. Класс может иметь несколько конструкторов с разными параметрами для разных видов инициализации (при этом используется механизм перегрузки);
3. Конструктор, который можно вызвать без параметров, называется конструктором по умолчанию;
4. Параметры конструктора могут иметь любой тип, кроме этого же класса. Можно задавать значения параметров по умолчанию. Их может содержать только один из конструкторов;
5. Если программист не указал ни одного конструктора, компилятор создает его автоматически (кроме случая, когда класс содержит константы и ссылки, поскольку их необходимо инициализировать). Такой конструктор вызывает конструкторы по умолчанию для полей класса и конструкторы базовых классов;
6. Конструкторы не наследуются;
7. Конструктор не может быть константным, статическим и виртуальным (нельзя использовать модификаторы const, virtual и static) ;
8. Конструкторы глобальных объектов вызываются до вызова функции main. Локальные объекты создаются, как только становится активной область их действия. Конструктор запускается и при создании временного объекта (например, при передаче объекта из функции).
При объявлении объектов вызывается один из конструкторов. При отсутствии инициализирующего выражения в объявлении объекта вызывается конструктор по умолчанию, при инициализации другим объектом того же типа – конструктор копирования, при инициализации полей – один из явно определенных конструкторов инициализации (т.е. конструкторов, которым передаются параметры для инициализации полей объекта).
Шаблоны функций
При создании функций иногда возникают ситуации, когда две функции выполняют одинаковую обработку, но работают с разными типами данных (например, одна использует параметры типа int, а другая типа float). С помощью механизма перегрузки функций можно использовать одно и то же имя для функций, выполняющих разные действия и имеющих разные типы параметров. Однако, если функции возвращают значения разных типов, то тогда следует использовать для них уникальные имена.
Шаблон определяет набор операторов, с помощью которых ваши программы позже могут создать несколько функций. Программы часто используют шаблоны функций для быстрого определения нескольких функций, которые с помощью одинаковых операторов работают с параметрами разных типов или имеют разные типы возвращаемых значений. Шаблоны функций имеют специфичные имена, которые соответствуют имени функции, используемому вами в программе. После того как программа определит шаблон функции, она в дальнейшем может создать конкретную функцию, используя этот шаблон для задания прототипа, который включает имя данного шаблона, возвращаемое функцией значение и типы параметров.
Шаблоны классов
Шаблон класса позволяет задать класс, параметризованный типом данных. Передача классу различных типов данных в качестве параметра создает семейство родственных классов. Наиболее широкое применение шаблоны находят при создании контейнерных классов. Контейнерным называется класс, который предназначен для хранения каким-либо образом организованных данных и работы с ними. Преимущество использования шаблонов состоит в том, что как только алгоритм работы с данными определен и отлажен, он может применяться к любым типам данных без переписывания кода.
Дата | Выполнено, % |
---|---|
2020-05-18 23:45:37 | 10 |
2020-05-14 15:49:07 | 100 |
2020-05-18 16:16:37 | 80 |
2020-05-18 20:45:34 | 100 |