Ivan Arkhipov 8dc39feb88 Version 0.3.1. Merged effects | 6 vuotta sitten | |
---|---|---|
assets | 6 vuotta sitten | |
include | 6 vuotta sitten | |
res | 6 vuotta sitten | |
source | 6 vuotta sitten | |
ui | 6 vuotta sitten | |
.gitignore | 6 vuotta sitten | |
README.md | 6 vuotta sitten | |
client.pro | 6 vuotta sitten |
Разработчики:
Дизайнеры:
Honourished представляет собой тактическую пошаговую стратегию с элементами rpg. В данный момент идёт разработка первого сценария игры: свободного сражения между двумя игроками. Сражение представляет собой последовательные действия игроков над их юнитами (предварительно выбранными) на поле из шестиугольников. За основу была взята механика боёв игры Heroes of Might & Magic III. Игроку доступны для выбора 2 расы: "Люди" и "Мёртвые", каждая из которых обладает собственным набором юнитов и разветвлённой системой их улучшения. Каждый юнит имеет уникальный набор способностей (умений), характеристик и специфики поведения.
Список доступных версий для установки с их описаниями и ссылками для скачивания доступен по ссылке: http://git.gi1dor.ru/GooseHouse/game-client/releases
Выполнить команду:
sudo apt-get -f install ./honourished-0.3.0dev-linux.deb
honourished
sudo apt-get install libqt5core5a libqt5dbus5 libqt5glib-2.0-0 libqt5gstreamer-1.0-0 libqt5gui5 libqt5multimedia5 libqt5network5 libqt5svg5 libqt5widgets5 libqt5multimedia5 libqt5gstreamer-1.0-0 libqt5multimedia5-plugins gstreamer1.0-nice gstreamer1.0-plugins-good
dpkg -i ./goosehouse-game.deb
В этой папке содержатся все графические файлы, элементы интерфейса, озвучка и остальные ресурсы, связанные с проектом. Они собираются на этапе сборки проекта в специальные файлы ресурсов, которые программа загружает и использует в процессе выполнения.
Эта папка содержит в себе все .h файлы приложения - все интерфейсы классов приложения (исключения - .h файлы, связанные с .ui сценами, они хранятся вместе с этими сценами)
Здесь находятся все файлы реализации классов приложения, кроме тех, что завязаны на .ui файлах (аналогично с .h файлами, последние хранятся вместе с .ui сценами)
В папке ui размещены все файлы графических сцен проекта. Каждая сцена состоит из 3-х файлов - .ui, .cpp и .h. Одна логическая сцена (главное меню, к примеру), может состоять из нескольких физических, которые накладываются друг на друга (сцена анимированного фона, сцена меню, расположенного по центру)
В ней находятся специальные файлы .qrc, содержащие информацию о тех файлах из /аssets, которые будут собраны в файлы ресурсов (.gtr)
Это основной файл qmake проекта, именно в нём прописаны скрипты сборки ресурсов, указаны собираемые файлы исходных кодов, подключаемые библиотеки и system-specific указания системе сборки qmake.
Графическая часть: весь графический интерфейс приложения разделён на несколько сцен - групп элементов, одновременно отображающихся в определённый момент времени. Для каждой сцены создаётся её класс + файл графического интерфейса (.ui) для QtCreator, который при сборке преобразуется в заготовку кода, пригодную для компиляции. Каждая сцена наследуется от класса-прототипа Scene, который предоставляет интерфейс для инициализации сцены и передачи в неё аргументов для инициализации (именно посредством передачи аргументов осуществляется взаимодействие между сценами. Напрямую они никак не связаны. Для инициализации и переключения сцен создан класс-синглтон GuiSceneManager. Инициализация игровых ресурсов и графического интерфейса также является сферой ответственности класса GuiSceneManager и выполняется при первом вызове GuiSceneManager::getInstance (происходит в main.cpp). Ответственный: Архипов Иван
Звуковое оформление реализуется посредством использования внутренних библиотек Qt (Низкоуровневые библиотеки QSound + QPhonon и их высокоуровневая абстракция в виде QMediaPlayer). Для управления звуками созданы 2 класса: класс-синглтон SoundEngine (основной поток звука + весь интерфейс взаимодействия) и класс AsyncSound. Последний представляет собой объект для работы с "мгновенными" звуками (выстрел, звук наведения мыши на элемент и т.п.). Создание асинхронного звука также происходит в классе SoundEngine. Управление объектом AsyncSound разделяется между классом SoundEngine и объектом, вызвавшим звук. После того, как воспроизведение звука заканчивается, SoundEngine сбрасывает с себя владение объектом, и если вызывавший объект также сбросил владение, то объект AsyncSound удаляется. В противном случае время жизни объекта AsyncSound будет равно времени жизни указателя на него у класса, вызвавшего звук. Ответственный: Архипов Иван
Фабрика классов: Фабрика классов представляет собой гибкий инструмент для создания элементов и управления ими через заданный прототип. Это значительным образом упрощает управление игровыми объектами, коих создаётся множество (пример: юниты, эффекты и умения), т.к. фабрика скрывает процесс инициализации объектов и возвращает сразу готовый к использованию абстрактный интерфейс. Ответственный: Боков Аркадий
Игровая механика:
Управление игровым процессом происходит в классе-синглтоне GameManager. Его задача - инициализация и подготовка игрового процесса, хранение информации о действиях игроков и юнитах, передача хода (класс UnitsQueue) и построение игрового поля (классы Cell) Ответственные: Боков Аркадий, Кологерманский Егор, Архипов Иван
Игрок: За работу с игроками отвечает синглтон-класс PlayerManager. Он управляет количеством игроков, он же хранит у себя объекты классов Player и возвращает по требованию указатели на них. Класс Player содержит в себе информацию об игроке, указатель на расу игрока и указатели на юнитов. Предоставляет интерфейс для добавления, удаления и/или получения списка юнитов, смены расы или иных параметров игрока. Ответственный: Архипов Иван
Клетки: Класс Cell является мощной структурой, которая функционирует одновременно как и графический, так и логический элемент. В его ведении находятся отрисовка шестиугольника клетки, доступ к соседним клеткам и алгоритмы подсчёта расстояния до других клеток и поиска препятствий для перемещения или выстрела в другие клетки. Клетки создаются единой матрицей с собственной индексацией в процессе инициализации игры в классе GameManager. Ответственный: Кологерманский Егор
Расы и юниты: Аналогично связке PlayerManager-Player для работы с расами в игре используется связка классов RaceManager-Race. RaceManager создаёт и хранит у себя единственные (уникальные) объекты рас и передаёт классу Player по требованию указатель на расу. Класс Race отвечает за создание юнитов заданной расы. Его задача - получить список юнитов (из соответв. директории в /assets), инициализировать фабрику юнитов и создавать их по требованию. Объекты каждой расы существуют в единственном экземпляре в классе RaceManager. Класс Unit претерпел серьёзные изменения с момента реализации первого задания. Первоначально предполагалось, что у каждого юнита будет прописана его логика основного взаимодействия с окружающим миром (перемещение, стандартная атака), которые будут варьироваться в зависимости от механики юнита (абстрактный пример: перемещение грифонов не учитывает препятствия, т.к. они летают. Атака лучников может производиться на расстоянии >1 клетки от цели). В настоящий момент мы перешли к идее "Всё в мире - это умение (см. раздел эффекты и умения)", которая предполагает, что абсолютно все действия юнита - это умения, а все изменения, которые могут происходить с юнитами и клетками - это эффекты. В таком подходе структура класса Unit стала очень легковесной и сводится, по сути, к простому хранению характеристик и наложенных эффектов. Отвественный: Боков Аркадий
Умения и эффекты: Умения и эффекты предоставляют главный функционал динамического изменения состояния юнитов. Каждое действие юнита (перемещение, атака, fireball, выстрел из лука) - это умение. Структурно умение представляет собой набор накладываемых эффектов и механику их наложения. Именно умение распределяет эффекты по юнитам и клеткам в соответствии с тем, как этого требует концепция умения (например: умение "Армагеддон" накладывает эффекты мгновенного урона, горения, смены анимации на всех юнитов). За создание эффектов и умений отвечает класс SpellManager. Эффектом является любое фундаментальное действие, происходящее с юнитом. Изменение характеристики (дебафф/нанесение урона), смена анимации, перемещение (длительная смена координат), создание временного объекта (создание и полёт фаерболла, стрел), наложение другого эффекта и т.п. - всё это находится в ведении эффекта. Эффекты делятся условно на несколько специализаций: моментальные эффекты, длительные, отложенные, эффекты-на-юнитах, эффекты-на-клетках. Длительные эффекты могут обрабатываться после каждого действия или хода. (В одном ходе юнита может быть несколько действий. Действие == умение: перемещение, атака, кинуть фаерболл). Ответственный: Батманов Игорь