Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Северо – Восточный федеральный университет имени М.К.Аммосова» Колледж инфраструктурных технологий Кафедра эксплуатации и обслуживания информационных систем Выпускная квалификационная работа Разработка логической игры “Головоломка” Специальность: 09.02.07 Информационные системы и программирование Выполнил: Спиридонов С.М Якутск, 2022 г. Оглавление Введение ............................................................................................................... 2 I. Анализ средств разработки игр ................................................................ 4 1.1. Виды жанров видеоигр ................................................................... 4 1.2. Анализ языков программирования .............................................. 5 1.3. Анализ движков игр ........................................................................ 9 Вывод к главе I ......................................................................................... 13 II. Практическая часть ................................................................................. 13 Вывод к Главе II ....................................................................................... 20 Заключение ....................................................................................................... 22 Введение Актуальность данной темы обусловлена тем, что необходимым условием качественного обновления интеллектуального потенциала, общества является умножение недостаточность развития логического мышления у детей и интереса педагогов к новым формам развития логического мышления у детей. Гипотеза: предполагается, что для разработки простой, доступной и увлекательной видеоигры, потребуется тщательное изучение процесса, средств и этапов разработки игрового программного обеспечения. Так, же в изучении подвергнутся подобные проекты и среды разработки. Объект исследования: процесс создания казуальной игры платформер. Предмет исследования: технологии разработки игры в среде Unity. Цель исследования: разработка приложения, которое будет легким в использовании и ярким для привлечения интереса. Задачи: Проанализировать языки программирования и различные среды для разработки приложений; Выбрать и изучить средство реализации; 2 Реализовать собственное приложение; Апробация и тестирование разработанного приложения; Этапы исследования: Анализ и подбор материалов по теме исследования; Анализ подобных приложений, сред разработки и выявление оптимальных вариантов; Разработка собственного приложения на основе исследования; Структура дипломной работы: Данная дипломная работа состоит из введения, 2 глав и выводов в конце, заключения, списка использованной литературы и приложения. В первой главе проводится анализ Жанров видеоигр, языков программирования, сред разработки игр. Во второй главе описываются технология процесса разработки игры. 3 I. Анализ средств разработки игр 1.1. Виды жанров видеоигр 1.1.1. Платформер Платформенная игра — это жанр видеоигр и поджанр экшн-игр, в которых основной целью является перемещение персонажа игрока между точками в визуализируемой среде. Платформенные игры характеризуются дизайном уровней с неровной местностью и подвесными платформами разной высоты, что требует использования способностей персонажа игрока, таких как прыжки и лазание, для навигации по среде игрока и достижения своей цели. Термин «песочница» 1.1.2. Песочница может быть более узнаваем из-за его использования в технологиях или даже в качестве открытого режима, доступного в некоторых играх. Это часто связано с выбором игрока, открытой средой и нелинейным игровым процессом. Жанр песочницы вырос из небольшой ниши, чтобы охватить огромное количество игр. В этих играх у игроков часто менее конкретные цели и пути повествования. Вместо того, чтобы победить босса и спасти принцессу, вы можете столкнуться с множеством задач, которые вы можете выполнить разными способами. Это вовлекает игроков в более захватывающий опыт, поощряя эксперименты с тем, что может быть незнакомой механикой. 1.1.3. Шутеры Шутер — еще один давний жанр, который развил несколько ранних ответвлений и разветвился на два основных поджанра: шутер от первого лица (FPS) и шутер от третьего лица (TPS). Здесь также есть много возможностей для наложения, поскольку многие современные игры позволяют вам переключаться между точками зрения от первого и третьего лица. Не только это, но и большинство игр Battle Royale — отдельный поджанр — работают 4 как шутеры от первого или третьего лица, включая Fortnite и PlayerUnknown’s Battlegrounds. 1.1.4. Многопользовательские онлайн-игры на боевых аренах (МОБА) Многопользовательские онлайн-игры на боевых аренах становятся все более популярным под жанром со множеством других стилей и имеют много общего со стратегиями в реальном времени. Существует вид сверху вниз, в котором особое внимание уделяется управлению картой и ресурсами, а также соревнованию между игроками в реальном времени. Основное различие между играми MOBA и RTS заключается в характере и роли игрока. В MOBA у вас может быть фракционная принадлежность и многие основы стратегии в реальном времени, но обычно вы управляете только одним персонажем. Это значительный контраст с большинством игр RTS, где вы создаете сообщества и командуете несколькими юнитами. 1.2. Анализ языков программирования 1.2.1. Язык программирования Java Java — язык программирования общего назначения. Относится к объектно-ориентированным языкам программирования, к языкам с сильной типизацией. Java был разработан компанией Sun Microsystems в начале 1990-х годов. Хотя Java в основном используется для интернет-приложений, это простой, эффективный язык общего назначения. Изначально Java был разработан для встроенных сетевых приложений, работающих на нескольких платформах. Это переносимый объектно-ориентированный интерпретируемый язык. Особенности Java Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM (Java Virtual 5 Machine). В этом плане Java отличается от стандартных интерпретируемых языков как PHP или Perl, код которых сразу же выполняется интерпретатором. В то же время Java не является и чисто компилируемым языком, как С или С++. Подобная архитектура обеспечивает программ на кроссплатформенность Java, благодаря и чему аппаратную подобные переносимость программы без перекомпиляции могут выполняться на различных платформах - Windows, Linux, Mac OS и т.д. Java является языком с Си-подобным синтаксисом и близок в этом отношении к C/C++ и C#. Поэтому, если вы знакомы с одним из этих языков, то овладеть Java будет легче. Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора. А это значит, что вам не надо освобождать вручную память от ранее использовавшихся объектов, как в С++, так как сборщик мусора это сделает автоматически за вас. 1.2.2. Язык программирования C# C# — это мультипарадигмальный язык программирования, который отличается строгой типизацией, императивностью, декларативностью, функциональностью, универсальностью, объектно-ориентированностью и компонентно-ориентированностью. На сегодняшний момент язык программирования C# один из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения: от небольших десктопных программок до крупных веб-порталов и вебсервисов, обслуживающих ежедневно миллионы пользователей. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, 6 события, переменные, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Особенности C# Обработка исключений предоставляет структурированный и расширяемый подход к обнаружению ошибок и восстановлению после них. Поддержка языков для асинхронных операций предоставляет синтаксис для создания распределенных систем C# поддерживает как определяемые пользователями ссылочные типы, так и типы значений. 1.2.3. Язык программирования C++ C++ — это объектно-ориентированный язык программирования общего назначения среднего уровня, который является расширением языка C, позволяющим программировать C++ в «стиле C». В некоторых ситуациях кодирование можно выполнять в любом формате, что делает C++ примером гибридного языка. Особенности С++ . C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм. . В C++ при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено. . Основным способом организации информации в C++ являются классы. В отличие от структуры (struct) языка C, которая может состоять только из 7 полей и вложенных типов, класс (class) C++ может состоять из полей, вложенных типов и функций-членов. 1.2.4. Язык программирования Python Python — это продвинутый язык программирования, интерпретируемый, объектно-ориентированный и построенный на гибкой и надежной семантике. — Python назначения с высокоуровневый динамической язык строгой программирования типизацией и общего автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости кода и его качества, а также на обеспечение переносимости написанных на нём программ. Особенности Python Язык использует динамическую типизацию вместе с подсчётом ссылок и циклический сборщик мусора для менеджмента памяти. Также есть динамические разрешения имен, которые связывают имена методов и переменных во время выполнения программы. Python предлагает поддержку функционального программирования в традициях Лиспа. Так, в Python есть функции filter, map и reduce; также из Лиспа были заимствованы понятия характеристик списков, ассоциативных массивов, множеств и генераторов списков. Стандартная библиотека содержит два модуля, реализующие инструменты, заимствованные из Haskell и Standard ML. Таблица сравнения языков программирования: Особенности Статическая Языки программирования С# C++ + + - + - - + + + +/- + + Python Java типизация Динамическая типизация Сборка мусора 8 Создание + + - - + + + + + + объектов на стеке Возможность компиляции Open-source + компилятор + (интерпретатор) 1.3. Анализ движков игр 1.3.1. Unity игровой движок, наиболее популярный среди инди-разработчиков. Его достаточно сложно освоить, но в этом помогают большое количество гайдов, документации и видеоуроков. Основной язык программирования — C#, но имеющийся функционал позволяет создавать прототипы, не написав ни единой строчки кода. Встроенный магазин ассетов содержит десятки тысяч платных и бесплатных моделей, шейдеров и прочих готовых ресурсов, что экономит время. Unity — межплатформенная среда разработки компьютерных игр[2], разработанная американской компанией Unity Technologies. Редактор Unity имеет простой Drag&Drop интерфейс, а также установкой плагинов KALI который легко настраивать, состоящий из различных окон, благодаря чему можно производить отладку игры прямо в редакторе. Движок использует для написания скриптов C#. Ранее поддерживались также Boo и модификация JavaScript, известная как UnityScript, Расчёты физики производит физический движок PhysX от NVIDIA. Графический API — DirectX. Этот игровой движок, наиболее популярный среди инди- разработчиков. Его достаточно сложно освоить, но в этом помогают большое количество гайдов, документации и видеоуроков. Основной язык программирования — C#, но имеющийся функционал позволяет создавать 9 прототипы, не написав ни единой строчки кода. Встроенный магазин ассетов содержит десятки тысяч платных и бесплатных моделей, шейдеров и прочих готовых ресурсов, что экономит время. Особенности Как правило, игровой движок предоставляет множество функциональных возможностей, позволяющих их задействовать в различных играх, в которые входят моделирование физических сред, карты нормалей, динамические тени и многое другое. В отличие от многих игровых движков, у Unity имеется два основных преимущества: наличие визуальной среды разработки и межплатформенная поддержка[4]. Первый фактор включает не только инструментарий визуального моделирования, но и интегрированную среду, цепочку сборки, что направлено на повышение производительности разработчиков, в частности, этапов создания прототипов и тестирования. 1.3.2. Unreal Engine 4 Unreal Engine — игровой движок, разрабатываемый и поддерживаемый компанией Epic Games. Первой игрой на этом движке был шутер от первого лица Unreal, выпущенный в 1998 году. Хотя движок первоначально был предназначен для разработки шутеров от первого лица, его последующие версии успешно применялись в играх самых различных жанров, в том числе стелс-играх, файтингах и массовых многопользовательских ролевых онлайниграх. Написанный на языке C++, движок позволяет создавать игры для большинства операционных систем и платформ: Microsoft Windows, Linux, Mac OS и Mac OS X; консолей Xbox, Xbox 360, Xbox One, PlayStation 2, PlayStation 3, PlayStation 4, PlayStation 5, PSP, PS Vita, Wii, Dreamcast, GameCube и др., а также на различных портативных устройствах, например, устройствах Apple (iPad, iPhone), управляемых системой iOS и прочих Особенности 10 UE4 поддерживает большое количество функций, благодаря чему в нём можно создать практически любую игру. В Unreal Engine 4 есть встроенная система визуального скриптинга, которая позволяет без особых препятствий выстраивать игровую логику даже новичкам. движка огромное сообщество пользователей, которые создают обучающие материалы, делятся друг с другом опытом и помогают решать проблемы. 1.3.3. CryEngine CryEngine — игровой движок, созданный немецкой частной компанией Crytek в 2002 году и первоначально используемый в шутере от первого лица Far Cry. «CryEngine» — коммерческий движок, который предлагается для лицензирования другим компаниям. С 30 марта 2006 года все права на движок принадлежат компании Ubisoft. Особенности CryEngine Sandbox: редактор игры в реальном времени, предлагающий обратную связь «Что Вы видите, то Вы и ИГРАЕТЕ». Рендерер: интегрированные открытые и закрытые локации без швов. Также рендерер поддерживает OpenGL и DirectX 8/9, Xbox с использованием последних аппаратных особенностей, PS2 и GameCube, а также Xbox 360. Система игрового искусственного интеллекта: включает командный интеллект и интеллект, определяемый скриптами. Возможность создания особенных врагов и их поведения, не касаясь кода C++. Construct 2 — 1.3.4. Construct 2 конструктор двумерных игр для Windows, разрабатываемый компанией Scirra. Вторая версия программы Construct Classic, вышедшей в 2007 году. Construct 2 позволяет создавать 2D-игры различных жанров и сложности без навыков программирования. Игры, сделанные на нём, могут быть доступны на PC, Mac, Linux, в браузерах с поддержкой HTML5, Android, iOS, Windows Phone, Blackberry 10, Amazon Appstore, Chrome Web Store, Facebook. Поддержка iOS и Android 11 осуществляется благодаря технологиям CocoonJS от Ludei, directCanvas от appMobi и Intel XDK, которые используют аппаратное ускорение для увеличения производительности HTML5 игр в 5-10 раз. Особенности Редактор Construct 2 написан на языке C++, а игры кодируются в Javascript. При экспорте проекта JavaScript код игры минифицируется, однако есть возможность подключить Javascript Plugin SDK и модифицировать код вручную. Construct 2 имеет «модульный дизайн», поэтому любые плагины или поведения, которые не используется в проекте, не включаются в скрипт, что помогает оптимизировать проект и сократить его вес. 12 Вывод к главе I В первой главе мы изучили самые популярные на данный момент, языки программирования, и движки для разработки игр. В итоге проведенного нами исследования, я решил, что игровой движок Unity выглядит наиболее подходящим для нашей работы, так как у него есть бесплатная лицензия, и вдобавок по нему есть огромное количество обучающих материалов в интернете. И так как на Unity используется язык C#, код мы будем писать на этом языке программирования. II. Практическая часть 2.1. Описание технологии разработки Выбор среды разработки Разработка кода управления Локации Игровые элементы Препятствия передвижение игрока Проектирование уровней Границы уровня Создание интерьера Передвижение препятствий Финиш Завершенная игра Рис 1. Проектирование игры. 13 Игровая механика В качестве главного героя в этой игре будет выступать Белый куб (рис.3.) главная цель которого добраться до финиша, путь к которому будут преграждать препятствия. Препятствия будут отличаться формой, и цветом, двигаться они будут относительно движений игрока, например, если игрок двинется на одну клетку вниз, препятствие передвинется на одну клетку влево Создаем 3D Проект. Рис 2. Пустой 3d проект 14 Добавляем нужные 3D Объекты и отрегулируем камеру игры. Игрок у нас будет белый куб и будет двигаться в одном направлении Рис 3. Расстановка Теперь нужно написать скрипт, чтобы Игрок мог двигаться. Рис 5. Скрипт игрока 15 Теперь добавив скрипт нужно назначить клавиши передвижения, игрок будет двигаться вперед и назад, так что назначим клавиши S и, W. Еще нужно заморозить ось X, чтобы препятствия, не утаскивали игрока за собой Рис 6. Панель свойств игрока Этот же скрипт добавим препятсвиям, только поменяем направление, чтобы они двигались влево и вправо, и заморозим ось Z. Рис 7. Панель свойств препятсвий 16 Создаем препятствия и финиш. Препятствия будут разделены на три вида: Черный – не будет двигаться. Темно-синий – будет двигаться, как и игрок назад и вперед. Светло-желтый – будет двигаться, влево и вправо Рис 6. Препятствия 17 Финишем у нас будет куб, стоящий у выхода, отключим у него Mesh Renderer, чтобы он стал прозрачным, и поставим галочку на Is trigger это нужно для скрипта. Рис 8. Панель свойств финиша 18 Чтобы финиш работал как надо, дополним ранее написанный скрипт движения игрока, и сделаем, так чтобы после того как игрок дотронется финиша загрузился следующий. Рис 9. Скрипт финиша. Добавим второй уровень в сборку (FileBuild Settings), перед этим дублировав первый уровень и поменяв препятствия местоположения препятствий. И проверим переход уровня. Рис 10. Настройки сборки. Теперь дело остается только за проектированием уровней. 19 формы и 2.2. Тестирование игры Проведем тестирование функциональности игры № Тестовые Тестовые Ожидаемый Фактический Статус шага шаги данные результат результат (Выпол нен/Неу дача) 1 2 Запуск Unity Пользователь Пользователь Выполне зашел зашел н Запуск игры Пользователь Пользователь Выполне в Unity с запустил игру запустил игру н помощью кнопки Play 3 4 Нажать на Клавиши “W”и Игрок и Игрок и Выполне клавиши ”S” препятствия препятствия н перемещени хорошо хорошо я вперед и реагируют на реагируют на назад заданные заданные команды команды Нажать на Клавиши препятствия препятствия Выполне клавиши “A”и ”D” выполняют выполняют н перемещени заданные заданные я влево и команды команды Коснуться Финиш Финиш Выполне игроком выполняет свою выполняет свою н финиша команду, и игрок команду, и игрок вправо 5 переходит на переходит на следующий следующий уровень 20 Вывод к Главе II Во второй главе мы провели обзор разработки нашего приложения, и провели тестирование функциональности 21 Заключение В итоге данной выпускной квалификационной работы мы разработали казуальную игру платформер. 22