ВВЕДЕНИЕ 4
1 Выбор средств реализации 7
1.1 Unity как среда разработки 7
1.2 Основные особенности Unity 7
1.3 Области применения Unity 8
1.4 Zenject и его применение в Unity 8
1.4.1 Основные элементы Zenject 9
1.4.2 Контейнер зависимостей (DiContainer) 9
1.4.2.1 Внедрение зависимостей ([Inject]) 10
1.4.2.2 Различные виды Bindings 11
1.4.3 Итог применения Zenject 11
2 Алгоритмы поиска путей 12
2.1 Алгоритм A* (A-Star) 12
2.2 Алгоритм Дейкстры 13
2.3 Поиск в ширину (BFS - Breadth-First Search) 15
2.4 Поиск в глубину (DFS - Depth-First Search) 16
2.5 Волновой алгоритм (Алгоритм Ли) 16
2.6 Jump Point Search (JPS) 17
2.7 Двоичное деление пространства (BSP - Binary Space Partitioning) 18
2.8 Выбор алгоритма поиска путей 19
2.9 Применение алгоритма поиска путей для построения карты 19
3 Исследование механизмов динамической компиляции кода 22
3.1 Теоретические основы динамической компиляции 22
3.2 Реализация динамической компиляции в Unity 23
3.3 Итоги реализации системы 24
4 Система управления заданиями 25
4.1 Логика контроллера управления заданиями 26
4.2 Общая схема взаимодействия компонентов заданий 27
4.3 Результат реализации системы заданий 28
5 Логика взаимодействия врагов с игроком и игровым окружением 31
5.1 Активация и начальная позиция 31
5.2 Определение зоны агрессии и преследование игрока 31
5.3 Интеграция с системой поиска путей 31
5.4 Алгоритм перемещения и анимация 32
6 Логика сохранения и загрузки уровня 34
6.1 Загрузка уровня 34
6.2 Сохранение уровня 34
7 Улучшение характеристик игрока 36
7.1 Общая структура системы 36
7.2 Механизм применения модификаторов 38
7.3 Расширяемость 38
ЗАКЛЮЧЕНИЕ 39
СПИСОК ЛИТЕРАТУРЫ 41
В образовании все чаще используются игры как инструмент для привлечения большей аудитории. Они делают обучение интерактивным, увлекательным и более эффективным.
Чтобы научиться программировать, особенно на C#, нужно практиковаться, и в этом поможет игра, которая была создана в рамках данной работы. Она делает обучение более интерактивным и эффективным за счет частого перепрохождения уровней благодаря особенностям игрового жанра - roguelike.
Roguelike - жанр компьютерных игр характерными особенностями которого являются генерируемые случайным или процедурным образом уровни и необратимость смерти персонажа, то есть в случае его гибели игрок не может загрузить игру и должен начать её заново. Игры в жанре roguelike привлекают благодаря случайным уровням и повторяемости. В нашем проекте мы соединим обучение программированию с игрой. Игроки будут решать задачи по C#, проходя случайно сгенерированные уровни. Это особенно полезно, так как дистанционное обучение сейчас очень популярно.
Актуальность темы. Рост популярности онлайн-курсов, массовых открытых онлайн-курсов, а также дистанционного образования в целом требует поиска новых, эффективных и не стандартных методов подачи материала. Игровые методы, такие как образовательные игры и симуляции, являются одним из таких решений, позволяя существенно повысить интерес студентов к обучению, особенно в технических дисциплинах. Совмещение игрового процесса и обучения программированию позволяет не только повысить мотивацию, но и закрепить знания на практике в интерактивной форме.
Практическая значимость. Разработка образовательной игры, сочетающей элементы жанра roguelike с решением задач по программированию на языке C#, позволяет повысить интерес к изучению программирования у начинающих разработчиков и упростить процесс 4
освоения основ языка благодаря большой рентабельности игры. Предоставить удобный инструмент для самоподготовки и дистанционного обучения разбавляя этот процесс изучением случайно созданной картой. Так же продемонстрировать профессиональные и практические знания в области процедурной генерации, выполнения кода в рантайме, разработки пользовательского интерфейса и применение различных подходов в разработки архитектуры проектов.
Аналоги и примеры образовательных игр. На рынке образовательных продуктов уже существуют примеры успешной интеграции игрового процесса с обучением программированию:
а) CodeCombat — интерактивная онлайн-игра, в которой пользователь управляет персонажем, программируя его поведение на языках JavaScript или Python. Обучение происходит через прохождение уровней с возрастающей сложностью. Игра направлена на развитие навыков написания синтаксически корректного кода, а также понимания базовых алгоритмов.
б) CheckiO — игры по программированию для новичков, где вы можете улучшить свои навыки кодирования через задачи и упражнения используя Python и TypeScript.
в) Human Resource Machine — игроку требуется взять контроль над небольшими офисными работниками и запрограммировать их на решение головоломок. Игра использует визуальное программирование для обучения основам программирования.
г) TIS-100 — игра, завязанная на программировании. Ваша задача в этой игре - переписать поврежденные блоки кода, игрок решает задачи используя вымышленный ассемблер.
Предлагаемый проект отличается от указанных решений использованием языка C#, а также интеграцией жанровых особенностей roguelike-игр: процедурной генерацией уровней и высоким уровнем повторяемости игрового процесса, что стимулирует учащихся к многократному прохождению и закреплению материала.
Целью проекта является. Разработать образовательную игру, которая поможет сделать обучение программированию более увлекательным и интересным.
Задачи:
а) провести детальное изучение платформы Unity с целью ее эффективного использования в разработке программного продукта;
б) разработать алгоритм процедурной генерации карты с
соблюдением условия доступности пути ко всем ключевым точкам.
в) изучить систему хранения данных в формате JSON;
г) исследовать механизмы динамической компиляции кода (выполнение кода в рантайме) и определить возможные способы реализации данной функциональности;
д) разработать логику взаимодействия игрока и врагов, появляющихся на карте;
е) разработать систему улучшения игрока во время игры с возможностью выбирать свои игровой стиль;
ж) реализовать сохранение и загрузку прогресса забега если игрок покинул игру до смерти персонажа.
В результате работы была создана гибкая, адаптивная и расширяемая система, включающая:
а) механизм динамической компиляции и выполнения кода с возможностью автоматизированного тестирования решений;
б) система хранения и обработки заданий с JSON-структурой, позволяющей легко добавлять новые задачи;
в) алгоритм выбора уровня сложности для динамического подбора задач в зависимости от уровня игрока;
г) гибкая архитектура на основе Zenject, обеспечивающая удобное управление зависимостями и повышение тестируемости проекта;
д) систему случайной генерации уровня, что добавляет интереса исследования карты, т.к. она никогда не будет одинаковой;
е) врагов, которые так же повышают интерес во время игры позволяя отвлечься от решения задач;
ж) возможность прерваться и выйти из игры сохранив состояние уровня и продолжить с момента, на котором остановился;
з) возможность улучшать персонажа для облегчения борьбы с врагами.
В результате данная игра, реализованные алгоритмы и архитектура позволяют автоматизировать проверку знаний, которые игрок выполняет в ходе прогресса по уровням, предоставляя интерактивный опыт в обучении программированию, а также не даёт игроку заскучать из-за того, что при каждом заходе на уровень карта будет уникальной, а враги мешают игроку легко пробегать от задания к заданию. Игра может быть расширена новыми функциями и механиками.
1. Андерсон Д. А. Дискретная математика и комбинаторика / Джеймс А. Андерсон ; пер. с англ. М. М. Беловой ; под ред. С. С. Шкильняка, М. Р Саит-Аметова. - Москва [и др.] : Вильямс, 2004. - 957, [1] с.: табл..
2. Землянухин В. Н. Задачи оптимизации на графах : учебное пособие / В. Н. Землянухин, Л. Н. Землянухина ; науч. ред. Г. Ю. Рябых. - Ростов-на-Дону : Донской гос. технический ун-т, 2010. - 175 с.
3. Документация по Json.NET (Newtonsoft.Json) // Newtonsoft. - URL: https://www.newtonsoft.com/json/help/html/Introduction.htm(дата обращения: 23.01.2025).
4. Официальная документация по Roslyn API // Microsoft Learn. -
URL: https://learn.microsoft.com/en-us/dotnet/csharp/roslyn-sdk/ (дата
обращения: 11.10.2024).
5. Официальная документация по Unity // Unity Technologies. - URL: https://docs.unity3d.com/(дата обращения: 18.09.2024).
6. Unity (игровой движок) // Wikipedia. - URL: https://ru.wikipedia.org/wiki/Unity_(игровой_движок) (дата обращения: 18.09.2024).
7. Официальная документация по Zenject // GitHub. - URL: https://github.com/modesttree/Zenject(дата обращения: 01.10.2024).
8. A* Pathfinding in Unity // YouTube. - URL:
https://www.youtube.com/watch?v=alU04hvz6L4&t=16s(дата обращения:
01.11.2024).