Техническое задание на дипломный проект
1. Цели и задачи проекта
Цель:
Спроектировать и разработать полноценный программный комплекс для прототипа 2D-игры в жанре RPG. Проект направлен на демонстрацию глубоких знаний в области объектно-ориентированного программирования, алгоритмизации, а также реализации сложных игровых механик, включая физическую модель, искусственный интеллект противников и систему развития персонажа.
Задачи:
- Проектирование и архитектура: Разработать архитектуру программного комплекса, включая основные классы и их взаимодействие.
- Разработка базовых систем: Создать графическое ядро, систему анимации и систему управления персонажем.
- Реализация игровых механик: Разработать боевую систему, систему столкновений, систему прокачки персонажа и базовый искусственный интеллект для противников.
- Оптимизация и тестирование: Применить методы оптимизации производительности (включая использование пула объектов) и провести тестирование игровых механик.
- Наполнение контентом: Создать один или несколько игровых уровней, добавить графические и звуковые ресурсы.
- Написание пояснительной записки: Описать теоретическую часть проекта, архитектуру, ход разработки и полученные результаты.
2. Требования к продукту
- Жанр: 2D-RPG.
- Сеттинг: Средневековое фэнтези.
- Платформа: Windows.
- Технологии: C++ (объектно-ориентированный подход), SFML.
- Используемые ресурсы: Набор спрайтов персонажа, врагов, фонов и интерактивных объектов.
3. Игровые механики и функционал
3.1. Управление и персонаж
- Управление: Движение с помощью клавиш WASD. Взаимодействие с миром и атаки будут реализованы с помощью мыши и специальных кнопок.
- Анимации: Персонаж имеет анимации движения (влево, вправо), прыжка и простоя.
- Характеристики: Персонаж обладает набором характеристик, включая здоровье (HP), уровень, опыт, силу атаки и защиту.
3.2. Боевая система
- Ближний бой: Персонаж атакует мечом. Атака имеет радиус и наносит урон.
- Урон: Расчёт урона будет производиться на основе характеристик персонажа и противника.
- Гибель: При достижении HP=0, персонаж или противник погибает и запускается соответствующая анимация смерти.
3.3. Искусственный интеллект (ИИ) противников
- Текущая реализация: ИИ скелета, который имеет анимацию простоя и начинает преследовать и атаковать игрока при приближении.
- Будущая реализация: ИИ будет включать состояния "патрулирование", "преследование" и "атака".
3.4. Система физики и столкновений
- Обнаружение: Будет реализована система столкновений с использованием Axis-Aligned Bounding Box (AABB).
- Обработка: Система будет обрабатывать столкновения между:
- Персонажем и врагами (для нанесения урона).
- Персонажем и объектами окружения (стены, деревья).
- Текущее состояние: Персонажи свободно проходят друг через друга. Это ключевая задача для реализации.
3.5. RPG-элементы
- Опыт и уровень: Персонаж будет получать опыт за убийство врагов, что приведёт к повышению уровня и улучшению характеристик.
- Интерактивность с миром: Включает в себя такие механики, как толкание таранов при осаде крепости, открытие дверей, взаимодействие с NPC и сундуками.
4. Архитектура и структура проекта
Классы и их назначение:
- Game: Основной класс, управляющий игровым циклом.
- Game State Machine: Управление состояниями игры (меню, игра, пауза).
- Player, Enemy, NPC: Классы для игровых сущностей.
- EntityManager: Управление всеми игровыми объектами.
- Animation: Класс для работы со спрайтами и анимациями.
- Level, LevelFactory: Для создания и загрузки уровней.
- CollisionManager: Ответственный за обработку столкновений.
- Resource Manager: Управление загрузкой текстур, шрифтов и звуков.
- CameraManager: Управление камерой, следящей за персонажем.
Оптимизация: Будет реализован пул объектов для врагов и других сущностей, что позволит снизить нагрузку на память и процессор, избегая постоянного создания и уничтожения объектов.
Игровая концепция
Магия
Свитки (функции/блоки кода): Игрок находит свитки, которые содержат готовые "заклинания" — например, свиток с заклинанием "огненный шар", "левитация" или "лечение". Каждый свиток — это готовая функция, которую можно использовать.
Руны (переменные/аргументы): Руны выступают в качестве переменных или аргументов, которые можно вставить в свиток для изменения его свойств. Например, руна "Усиление" увеличивает урон от огненного шара, а руна "Дальность" — дальность полёта.
Сборка заклинаний (составление алгоритма): Самое интересное начинается, когда игрок находит пустые свитки и руны. Используя верстак или магический алтарь, игрок может комбинировать руны в правильной последовательности, чтобы создать новое заклинание.
- Например, чтобы получить "огненный шар", нужно собрать следующую последовательность рун: [Огонь] + [Шар] + [Применить].
- Для более сложных заклинаний, таких как "Огненный шар, который рикошетит от стен", игрок должен будет добавить руну: [Огонь] + [Шар] + [Рикошет] + [Применить].
Примеры задач для игрока
Задача: Игрок находит дверь, которую можно открыть только с помощью электрического разряда.
Решение: Игроку нужно найти руны "Молния" и "Ключ", а затем собрать их в свиток, чтобы получилось заклинание [Молния] + [Ключ]. После этого свиток можно применить к двери.
Задача: Игрок хочет, чтобы магический мост поднимался автоматически, когда он подходит к нему.
Решение: Он находит руны "Цикл" и "Условие" и собирает заклинание [Если] [Игрок_близко] [То] [Поднять_мост] [Повторять]. Это учит игрока использовать условия и циклы в простейшей форме.
Такой подход делает игровой процесс увлекательным, так как позволяет игроку экспериментировать и создавать свои собственные "коды" для решения задач.