Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования «Северо – Восточный федеральный университет имени М.К.Аммосова» Колледж инфраструктурных технологий Кафедра эксплуатации и обслуживания информационных систем Выпускная квалификационная работа Разработка логической игры “Головоломка” Специальность: 09.02.07 Информационные системы и программирование Выполнил: Спиридонов С.М Якутск, 2022 г. Оглавление Введение .......................................................................................................................... 3 I. Анализ средств разработки игр .......................................................................... 5 1.1. Виды жанров видеоигр .............................................................................. 5 1.2. Анализ языков программирования ........................................................ 6 1.3. Анализ движков игр................................................................................. 10 Вывод к главе I .................................................................................................... 13 II. Практическая часть ............................................................................................ 14 Вывод к Главе II .................................................................................................. 24 Заключение ................................................................................................................... 25 Список литературы..................................................................................................... 26 2 Введение Актуальность данной темы обусловлена тем, что необходимым условием качественного обновления общества является умножение интеллектуального потенциала, недостаточность развития логического мышления у детей и интереса педагогов к новым формам развития логического мышления у детей. Гипотеза: предполагается, что для разработки простой, доступной и увлекательной видеоигры, потребуется тщательное изучение процесса, средств и этапов разработки игрового программного обеспечения. Так, же в изучении подвергнутся подобные проекты и среды разработки. Объект исследования: процесс создания казуальной игры платформер. Предмет исследования: технологии разработки игры в среде Unity. Цель исследования: разработка приложения, которое будет легким в использовании и ярким для привлечения интереса. Задачи: Проанализировать языки программирования и различные среды для разработки приложений; Выбрать и изучить средство реализации; Реализовать собственное приложение; Апробация и тестирование разработанного приложения; Этапы исследования: Анализ и подбор материалов по теме исследования; Анализ подобных приложений, сред разработки и выявление оптимальных вариантов; Разработка собственного приложения на основе исследования; Структура дипломной работы: Данная дипломная работа состоит из введения, 2 глав и выводов в конце, заключения, списка использованной литературы и приложения. В первой главе проводится анализ программирования, сред разработки игр. 3 Жанров видеоигр, языков Во второй главе описываются технология процесса разработки игры. 4 I. Анализ средств разработки игр В этой главе будет проведен анализ и сравнение средств разработки игр, таких как языки программирования, жанры видеоигр, среды разработки игр. 1.1. Виды жанров видеоигр Платформер Платформенная игра — это жанр видеоигр и поджанр экшн-игр, в которых основной целью является перемещение персонажа игрока между точками в визуализируемой среде. Платформенные игры характеризуются дизайном уровней с неровной местностью и подвесными платформами разной высоты, что требует использования способностей персонажа игрока, таких как прыжки и лазание, для навигации по среде игрока и достижения своей цели. Песочница Термин «песочница» может быть более узнаваем из-за его использования в технологиях или даже в качестве открытого режима, доступного в некоторых играх. Это часто связано с выбором игрока, открытой средой и нелинейным игровым процессом. Жанр песочницы вырос из небольшой ниши, чтобы охватить огромное количество игр. В этих играх у игроков часто менее конкретные цели и пути повествования. Вместо того, чтобы победить босса и спасти принцессу, вы можете столкнуться с множеством задач, которые вы можете выполнить разными способами. Это вовлекает игроков в более захватывающий опыт, поощряя эксперименты с тем, что может быть незнакомой механикой. Шутер Шутер — еще один давний жанр, который развил несколько ранних ответвлений и разветвился на два основных поджанра: шутер от первого лица (FPS) и шутер от третьего лица (TPS). Здесь также есть много возможностей для наложения, поскольку многие современные игры позволяют вам переключаться между точками зрения от первого и третьего лица. Не только это, но и 5 большинство игр Battle Royale — отдельный поджанр — работают как шутеры от первого или третьего лица, включая Fortnite и PlayerUnknown’s Battlegrounds. Многопользовательские онлайн-игры на боевых аренах (МОБА) Многопользовательские онлайн-игры на боевых аренах становятся все более популярным под жанром со множеством других стилей и имеют много общего со стратегиями в реальном времени. Существует вид сверху вниз, в котором особое внимание уделяется управлению картой и ресурсами, а также соревнованию между игроками в реальном времени. Основное различие между играми MOBA и RTS заключается в характере и роли игрока. В MOBA у вас может быть фракционная принадлежность и многие основы стратегии в реальном времени, но обычно вы управляете только одним персонажем. Это значительный контраст с большинством игр RTS, где вы создаете сообщества и командуете несколькими юнитами. 1.2. Анализ языков программирования Язык программирования Java Java — язык программирования общего назначения. Относится к объектноориентированным языкам программирования, к языкам с сильной типизацией. Java был разработан компанией Sun Microsystems в начале 1990-х годов. Хотя Java в основном используется для интернет-приложений, это простой, эффективный язык общего назначения. Изначально Java был разработан для встроенных сетевых приложений, работающих на нескольких платформах. Это переносимый объектно-ориентированный интерпретируемый язык. Особенности Java Ключевой особенностью языка Java является то, что его код сначала транслируется в специальный байт-код, независимый от платформы. А затем этот байт-код выполняется виртуальной машиной JVM. В этом плане Java отличается от стандартных интерпретируемых языков как PHP или Perl, код которых сразу же выполняется интерпретатором. В то же время Java не является и чисто компилируемым языком, как С или С++. Подобная архитектура обеспечивает 6 кроссплатформенность и аппаратную переносимость программ на Java, благодаря чему подобные программы без перекомпиляции могут выполняться на различных платформах - Windows, Linux, Mac OS и т.д. Java является языком с Си-подобным синтаксисом и близок в этом отношении к C/C++ и C#. Поэтому, если вы знакомы с одним из этих языков, то овладеть Java будет легче. Еще одной ключевой особенностью Java является то, что она поддерживает автоматическую сборку мусора. А это значит, что вам не надо освобождать вручную память от ранее использовавшихся объектов, как С++, так как сборщик мусора это сделает автоматически за вас. Язык программирования C# C# — это мультипарадигмальный язык программирования, который отличается строгой функциональностью, типизацией, императивностью, универсальностью, декларативностью, объектно-ориентированностью и компонентно-ориентированностью. На сегодняшний момент язык программирования C# один из самых мощных, быстро развивающихся и востребованных языков в ИТ-отрасли. В настоящий момент на нем пишутся самые различные приложения: от небольших десктопных программок до крупных веб-порталов и веб-сервисов, обслуживающих ежедневно миллионы пользователей. C# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, переменные, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML. Особенности C# Обработка исключений предоставляет структурированный и расширяемый подход к обнаружению ошибок и восстановлению после них. 7 Поддержка языков для асинхронных операций предоставляет синтаксис для создания распределенных систем C# поддерживает как определяемые пользователями ссылочные типы, так и типы значений. Язык программирования C++ C++ — это объектно-ориентированный язык программирования общего назначения среднего уровня, который является расширением языка C, позволяющим программировать C++ в «стиле C». В некоторых ситуациях кодирование можно выполнять в любом формате, что делает C++ примером гибридного языка. Особенности С++ . C++ добавляет к C объектно-ориентированные возможности. Он вводит классы, которые обеспечивают три самых важных свойства ООП: инкапсуляцию, наследование и полиморфизм. . В C++ при наследовании одного класса от другого наследуется реализация класса, плюс класс-наследник может добавлять свои поля и функции или переопределять функции базового класса. Множественное наследование разрешено. . Основным способом организации информации в C++ являются классы. В отличие от структуры (struct) языка C, которая может состоять только из полей и вложенных типов, класс (class) C++ может состоять из полей, вложенных типов и функций-членов. Язык программирования Python Python — это продвинутый язык программирования, интерпретируемый, объектно-ориентированный и построенный на гибкой и надежной семантике. Python — высокоуровневый язык программирования общего назначения с динамической строгой типизацией и автоматическим управлением памятью, ориентированный на повышение производительности разработчика, читаемости 8 кода и его качества, а также на обеспечение переносимости написанных на нём программ. Особенности Python Язык использует динамическую типизацию вместе с подсчётом ссылок и циклический сборщик мусора для менеджмента памяти. Также есть динамические разрешения имен, которые связывают имена методов и переменных во время выполнения программы. Python предлагает поддержку функционального программирования в традициях Лиспа. Так, в Python есть функции filter, map и reduce; также из Лиспа были заимствованы понятия характеристик списков, ассоциативных массивов, множеств и генераторов списков. Стандартная библиотека содержит два модуля, реализующие инструменты, заимствованные из Haskell и Standard ML. Таблица сравнения языков программирования: Таблица 1. Особенности Языки программирования С# C++ + + - + - - + + Сборка мусора + +/- + + Создание + + - - + + + + + + Статическая Python Java типизация Динамическая типизация объектов на стеке Возможность компиляции Open-source компилятор + + 9 (интерпретатор) 1.3. Анализ движков игр Игровой движок Unity игровой движок Unity, наиболее популярный среди инди-разработчиков. Его достаточно сложно освоить, но в этом помогают большое количество гайдов, документации и видеоуроков. Основной язык программирования — C#, но имеющийся функционал позволяет создавать прототипы, не написав ни единой строчки кода. Встроенный магазин ассетов содержит десятки тысяч платных и бесплатных моделей, шейдеров и прочих готовых ресурсов, что экономит время. Unity — межплатформенная среда разработки компьютерных игр[2], разработанная американской компанией Unity Technologies. Редактор Unity имеет простой Drag&Drop интерфейс, а также установкой плагинов KALI который легко настраивать, состоящий из различных окон, благодаря чему можно производить отладку игры прямо в редакторе. Движок использует для написания скриптов C#. Ранее поддерживались также Boo и модификация JavaScript, известная как UnityScript, Расчёты физики производит физический движок PhysX от NVIDIA. Графический API — DirectX. Этот игровой движок, наиболее популярный среди инди-разработчиков. Его достаточно сложно освоить, но в этом помогают большое количество гайдов, документации и видеоуроков. Основной язык программирования — C#, но имеющийся функционал позволяет создавать прототипы, не написав ни единой строчки кода. Встроенный магазин ассетов содержит десятки тысяч платных и бесплатных моделей, шейдеров и прочих готовых ресурсов, что экономит время. Особенности Как правило, игровой движок предоставляет множество функциональных возможностей, позволяющих их задействовать в различных играх, в которые входят моделирование физических сред, карты нормалей, динамические тени и многое другое. В отличие от многих игровых движков, у Unity имеется два основных преимущества: наличие визуальной 10 среды разработки и межплатформенная поддержка. Первый фактор включает не только инструментарий визуального моделирования, но и интегрированную среду, цепочку сборки, что направлено на повышение производительности разработчиков, в частности, этапов создания прототипов и тестирования. 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 и прочих Особенности UE4 поддерживает большое количество функций, благодаря чему в нём можно создать практически любую игру. В Unreal Engine 4 есть встроенная система визуального скриптинга, которая позволяет без особых препятствий выстраивать игровую логику даже новичкам. движка огромное сообщество пользователей, которые создают обучающие материалы, делятся друг с другом опытом и помогают решать проблемы. CryEngine CryEngine — игровой движок, созданный немецкой частной компанией Crytek в 2002 году и первоначально используемый в шутере от первого лица Far 11 Cry. «CryEngine» — коммерческий движок, который предлагается для лицензирования другим компаниям. С 30 марта 2006 года все права на движок принадлежат компании Ubisoft. Особенности CryEngine Sandbox: редактор игры в реальном времени, предлагающий обратную связь «Что Вы видите, то Вы и играете». Рендерер: интегрированные открытые и закрытые локации без швов. Также рендерер поддерживает OpenGL и DirectX 8/9, Xbox с использованием последних аппаратных особенностей, PS2 и GameCube, а также Xbox 360. Система игрового искусственного интеллекта: включает командный интеллект и интеллект, определяемый скриптами. Возможность создания особенных врагов и их поведения, не касаясь кода C++. Игровой движок Construct 2 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 осуществляется благодаря технологиям CocoonJS от Ludei, directCanvas от appMobi и Intel XDK, которые используют аппаратное ускорение для увеличения производительности HTML5 игр в 5-10 раз. Особенности Редактор Construct 2 написан на языке C++, а игры кодируются в Javascript. При экспорте проекта JavaScript код игры минифицируется, однако есть возможность подключить Javascript Plugin SDK и модифицировать код вручную. Construct 2 имеет «модульный дизайн», поэтому любые плагины или поведения, которые не используется в проекте, не включаются в скрипт, что помогает оптимизировать проект и сократить его вес. 12 Вывод к главе I В первой главе были изучены самые популярные на данный момент, языки программирования, и движки для разработки игр. В итоге проведенного исследования, выбран игровой движок Unity, он выглядит наиболее подходящим для этой работы, так как у него есть бесплатная лицензия, и вдобавок по нему есть огромное количество обучающих материалов в интернете. И так как на Unity используется язык C#, код будет написан на этом языке программирования. 13 II. Практическая часть В практической части будет описана механика игры, и как разрабатывался этот проект. Еще будет проведено тестирования. 1.4. Описание технологии разработки Средства разработки Среда разработки: Unity; Среда написания скрипта: MS Visual Studio; Язык написания скрипта: C#; Жанр игры: Платформер; Игровая механика В качестве главного героя в этой игре будет выступать Белый куб (см. рис 3.) главная цель которого добраться до финиша, путь к которому будут преграждать препятствия. Препятствия будут отличаться формой, и цветом, двигаться они будут относительно движений игрока, например, если игрок двинется на одну клетку вниз, препятствие передвинется на одну клетку влево Выбор среды разработки Разработка кода Игровые элементы Локации управления Препятствия Проектирование передвижение игрока уровней Границы уровня Передвижение Создание интерьера Финиш препятствий Завершенная игра Рис 1. Проектирование игры. 14 1.5. Разработка кода управления. Скрипт передвижения игрока Скрипт передвижения препятствий 1.6. Проектирование уровней. 1.7. Игровые элементы. Препятствия. Границы игры Финиш 15 Для начала нужно включить Unity hub и создать 3d проект, после того как проект включится, на экране появится проект, в котором есть только освещение и камера игры. (см.рис 2) Рис.2. Пустой 3d проект Потом были добавлены нужные 3D Объекты, и регулировка камеры игры. Игрок у нас будет белый куб и будет двигаться в одном направлении вперед и назад. Чтобы игрок не упал за игровую зону, будут созданы границы уровня. (см.Рис 3) Рис 3. Расстановка объектов. 16 После добавления объектов на игровом поле был написан скрипт передвижения игрока. Для этого нужно создать скрипт C# в папке Assets. После открытия скрипта включится MS Visual Studio. (см.Рис 4) Рис 4. MS Visual Studio с скриптом передвижения игрока. После того как код был написан, его нужно перенести курсором на панель свойств игрока. После, на панели свойств появятся строки Key One и, Key Two в которых можно будет назначить клавиши передвижения, и установить скорость по нужной оси Z. Еще нужно заморозить ось X, чтобы препятствия, не утаскивали игрока за собой. (см.Рис5) 17 Рис 5. Панель свойств игрока с назначениями клавиш передвижения и координации по осям 18 Теперь нужно сделать так что бы препятствия тоже двигались. Для этого в панель свойств перпятсвия был добавлен скрипт написанный выше, только поменяем направление, чтобы они двигались влево и вправо, и заморозим ось Z.(см.Рис 6) Рис 6. Панель свойств препятсвий с назначением клавиш передвижения, и координации по осям 19 Создаем препятствия и финиш. Препятствия пока будут разделены на три вида: Черный – не будет двигаться. Темно-синий – будет двигаться, как и игрок назад и вперед. Светло-желтый – будет двигаться, влево и вправо Рис 7. Расстановка препятствий, преграждающих путь игрока к финишу. 20 Финишем у нас будет куб, находящийся у выхода. Отключим у него Mesh Renderer, чтобы он стал прозрачным, и поставим галочку на Is trigger это нужно для скрипта, и для того чтобы он был неосязаемым Рис 8. Настройка свойств финиша. 21 Чтобы финиш работал как надо, дополним ранее написанный скрипт движения игрока, и сделаем, так чтобы после того как игрок дотронется финиша загрузился следующий уровень. Рис.9. MS Visual Studio скрипт игрока с добавленным кодом финиша. Для того чтобы финиш работал, нужно создать новую сцену и добавить ее в настройки сборки игры FileBuild Settings. Новую сцену можно создать просто, дублировав начальную сцену, и поменяв местоположения и размеры объектов, находящихся на панели. Рис 10. Настройки сборки. 22 1.8. Тестирование игры Проведем тестирование функциональности игры. Таблица 2. № Тестовые Тестовые Ожидаемый Фактический Статус шага шаги данные результат результат (Выпол нен/Неу дача) 1 2 Запуск Unity Пользователь Пользователь Выполне зашел зашел н Запуск игры Пользователь Пользователь Выполне в Unity с запустил игру запустил игру н помощью кнопки Play 3 4 Нажать на Клавиши “W”и Игрок и Игрок и Выполне клавиши ”S” препятствия препятствия н перемещени хорошо хорошо я вперед и реагируют на реагируют на назад заданные заданные команды команды Нажать на Клавиши препятствия препятствия Выполне клавиши “A”и ”D” выполняют выполняют н перемещени заданные заданные я влево и команды команды Коснуться Финиш Финиш Выполне игроком выполняет свою выполняет свою н финиша команду, и игрок команду, и игрок вправо 5 переходит на переходит на следующий следующий уровень 23 Вывод к Главе II Во второй главе мы провели обзор разработки нашего приложения, и провели тестирование функциональности 24 Заключение 25 Список литературы 26 Приложение 27