Файл: ИСТОРИЯ ВОЗНИКНОВЕНИЯ И РАЗВИТИЯ ЯЗЫКА С, С++ и Java (ЯЗЫКИ ПРОГРАММИРОВАНИЯ C, C++, Java).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 30.03.2023

Просмотров: 151

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

После создания компонета, необходимо создать указатель на структуру данных UnitAsset, для того чтобы иметь возможность обращаться к ней, и получать атрибуты состояний. Также, объявляется основная публичная функция SetDestroyingStatus:

После этого компонент отображается в редакторе, есть возможность создания компонента для объекта, и установка ссылки на базу данных UnitAsset:

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

Я добавил ряд приватных переменных для работы. В переменной UnitHealthAttributes будет храниться набор состояний объекта, полученный из UnitAsset, с целью сократить количество обращений к базе данных. UnitHealthStateArray будет использоваться для упорядоченного хранения состояний и правильного переключения, т.к. контейнер TMap< > не гарантирует возвращение ключей в процессе перебора в каком-либо порядке. [21] Также это гарантирует правильность исполнения кода, в случае если данные будут неверно изменены в редакторе пользователем компонента. Переменная Owner хранит ссылку на объект, который владеет компонентом, а переменная OwnerCurrentState хранит текущее состояние объекта.

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

Инициализируем приватные переменные в функции BeginPlay(), которая запускается при создании объекта на сцене:

Для инициализации данных UnitHealthAttributes вызывается функция GetUnitHealthStates из UnitAsset с параметром Owner. Таким образом возвращается набор состояний для объекта, если таковые существуют в базе. Далее, генерируется и упорядочивается список состояний в UnitHealthStateArray.

Алгоритм изменения состояний объекта:

Проверяется в первую очередь, не уничтожен ли объект в рамках игровых условностей, т.е. имеет ли он HealthPoints > 0, и вызывается соответствующая функция, в случае срабатывания условия. Далее, определяется текущее состояние объекта и, если оно изменилось, запускается соответствующая функция смены состояния.


Функции SetStatusHigher и SetStatusLower отличаются тем, что при ухудшении состояния срабатывает функция SpawnParticleEffect, и проигрываются различные звуковые эффекты. Также, перед выполнением инструкций повсеместно проводится проверка на нулевой указатель, для обеспечения безопасности операций.

В последующих функциях используется шаблонный компонент, предоставляемый UE4 AActor::FindComponentByClass< > [24], он позволяет найти необходимые компоненты. Если компоненты были найдены, и имеется новый вариант в атрибутах, происходит выполнение замены.

Функции смены 3D модели и анимации:

Функции смены материала и функция создания и визуализации эффекта частиц:

Функция проигрывания звуковых эффектов:

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

Я описал всю логику в нашем компоненте, скомпилировал проект и протестировал его работу на юнитах в проекте. Для этого я подключил вызов функции SetDestroyingStatus в тех функциях, где происходит изменение значений HealthPoint объекта, в базовом классе, от которого наследуют все целевые объекты в проекте - UnitBase.

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

ЗАКЛЮЧЕНИЕ

В данной курсовой работе был раскрыт вопрос развития языков программирования, в первой главе была представлена информация об аспектах исторического развития языков С, С++ и Java, их особенностях и задачах проектирования. А также предпосылках их возникновения, их возможностях и преимуществах, которые предоставляются разработчикам. Во второй главе была решена практическая задача, которая продемонстрировала возможности применения одного из этих языков в современных приложениях, с использованием передовых средств разработки. Раскрываются аспекты эволюции языка С++ и возможности использования улучшений, привнесенных в современный стандарт языка. Конечно, отдельно каждый из этих языков представляет собой целую экосистему из стандартных библиотек, расширений и фреймворков. Они используются для реализации задач в разных сферах, где-то пересекаются, где-то являются единственно предпочтительным вариантом. Однако, безусловно, каждый из них является уникальным, мощным и современным инструментом для разработчика. Каждый из них занимает особое положение среди языков программирования в историческом смысле. Можно убедиться, что несмотря на свою богатую историю, эти языки не перестают развиваться. Улучшаются их конструкции и возможности, для решения самых передовых задач, таким образом позволяя данным языкам программирования неизменно оставаться популярными и востребованными.