Roguelike — это довольно популярный жанр компьютерных игр, назван в честь игры Rogue, 1980 года выхода.
Жанр игры: Roguelike
Количество игроков: однопользовательская локальная игра
Операционная система: Windows 10/ Ubuntu Unix
Графика: 2D
ОЗУ: 1GB
Свободное место на диске: 512MB
Управление: мышь, клавиатура
Общие требования:
- Наличие меню;
- Предоставление собственноручной статистики игроку;
- Необходимость сохранения прогресса игрока;
- Загрузка и генерация уровня;
- Слабосвязанная архитектура компонент.
Игра не использует торговые марки или другую собственность, подлежащую лицензированию.
- Игра расчитана на реиграбельность
- Бот - «робот», неодушевленный участник игры под управлением компьютера
- Лут - предметы, которые можно подбирать в инвентарь
- ПКМ - правая кнопка мыши
- ЛКМ - лева кнопка мыши
Программный язык разработки - Java
Платформа разработки - Intellij Idea
Ограничие частоты кадров - 30 FPS
- Возможность загрузить уровень из файла
- Возможность процедурно сгенерировать уровень
- Игрок может перемещаться по карте
- Персонаж игрока обладает характеристиками: здоровье, опыт, броня, атака. В процессе игры данные характеристики могут изменяться.
- Песронаж игрока обладает инвентарем. Инвентарь делится на две части. Обычный инвентарь и инвентарь надетых вещей.
- Предметы находящиеся в инвентаре надетых вещей влияют на характеристики персонажа
- Рюкзак обладает лимитом находящихся в нем вещей
- Предметы находятся на карте и их можно поднимать
- В мире находятся интерактивные объекты с которыми можно взаимодействовать
Система осуществляет взаимодействие с игроком через графический интерфейс. Пользователь ожидает от системы интуитивную понятность в игре, а также геймплей соответсвующий жанру Roguelike.
- UI - компонент который отвечает за ввод пользователем в систему, а также отображает вывод системы.
- Engine - компонент отвечающий за обработку игровых событий, а также преобразованием их в системный вывод. Компонент Engine состоит из двух дочерних компонент.
-
- Render - компонента отвечающая за преобразование игрового состояния в системный выход. Также отвечает за оптимизацию вывода.
-
- Game Processer - компонента которая создает и манипулирует игровыми объектами.
- World - компонента мира. Отвечает за карту и другие состояния уровня.
- Map Generator - компонента отвечающая за генерацию уровней.
- Pawn - компонента (объект) персонажа, которая может управляться как пользователем, так и ботом. В зависимоти от ситуации может содержать в себя различные вспомогательные компоненты, расширяющие возможности пешки. Основные компоненты:
-
- Inventory Component - добавляет пешке инвентарь. Отвечает за возможность хранить и пользоваться подбираемыми объектами.
-
- Param Component - добавляет пешке изменяемые характеристики. Отвечает за возможность повышать уровень и улучшать характеристики.
-
- Combat Component - добавляет пешке возможность атакавать.
- Item - компонента (объект) отвечающая за предметы с которыми можно взаимодействовать. Содержит компоненту:
-
- Interact Component - предоставляющая интерфейс для взаимодействия.
- Engine - класс отвечающий за хранение игровых сущностей, их генерацию и процессинг между ними. Содержит в себе экземпляр карты уровня, список предметов и список пешек.
- Map - класс отвечающий за игровую карту. Карта будет считываться из некоторого генеруемого файла сохранения. Так как карта состоит из тайлов, карта содержит в себе список всех экземпляров тайлов из которых она состоит.
- Tile - класс олицетворяющий собой единицу карты. Содержит такую информацию как ID, тип тайла (например проходимый, или непроходимый), текстура, а также координата расположения тайла.
- Map Save - класс/структура олицетворяющая собой сохранения карты. Возможно сохранение в файл на устройстве.
- Map Generator - класс отвечающий за генерацию сохранения карты. На выходе выдает экземпляр Map Save.
- Item - класс отвечающий за предмет, с которым можно взаимодействовать. Содержит в себе некоторый ID и количество.
- Controller - абстрактный класс контролера над пешкой. Нужно для того, чтобы позволять одному и тому же контроллеру, управлять различными пешками, используя одно и тоже управление. Например игрок может передвигаться на AWSD персонажем, а потом передать управление пешке "Машина", и управлять этой машиной при помощью тех же клавиш.
- AI Controller - реализация класса Controller, содержащая в себе алгоритмы поведения Behaviour, имитирующие управление пешкой компьютером.
- Player Controller - реализация класса Controller, интерпритирующая команды пользователя в команды, понятные пешке.
- Pawn - абстрактный класс пешки. Может управляться при помощи контролера. Может передвегаться по миру, а также быть уничтожена. По этой причине содержит в себе экземпляр контролера, название, здоровье, а также скорость.
- Bot - реализация пешки, которая управляется при помощи AI Controller.
- Player - реализация пешки, которая управляется при помощи игрока. Содержит в себе дополнительные компоненты, расширяющие возможности пешки, такие как инвентарь.
Набор всех возможных уникальных предметов доступных в игре будет храниться в файловой базе данных на диске системы и подгружаться в оперативную память при запуске игры. Основные параметры, которые необходимо хранить - ID для того, чтобы находить предмет в базе данных. Max Quantity - чтобы ораничить максимальное переносимое количество предметов. Type - чтобы определить возможность хранить предмет в специальных ячейках для экипировки. Action - класс интерфейса использования предмета.
- Паттерн Стратегия. В игре присутствуют различные боты-противники. Различия составляет в их характеристиках. Каждый из них обладает различной логикой поведения.
- Паттерн Наблюдатель. Контроллер в игре следит за состоянием системы, в качестве реакции на изменение состояние, передает сигнал в соответствующую ему пешку.
Игрок, попадая на игровое поле, может передвигать своего персонажа по доступному ему миру. По всей игровой локации в рандомных местах разбросаны предметы и враги. Причем, встречая на своем пути противников-ботов, он может либо поразить их, либо попытаться убежать от них.
Для генерации мира, будет использоваться алгоритм построенный на Perlin Noise.
Мир генерируется из тайлов. Каждый тайл содержи различный тип, проходимый и не проходимый. Примером непроходимого тайла может быть водоем. Текстуры шума перлина, различного разрешения будут использоваться для генерации водоемов, биомов (для определения текстуры тайла), расположения объектов и так далее.
Краткое описание: пользователь желает войти в игру.
Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами.
Предусловия: игрок желает зайти в игру, имея работоспособный компьютер.
Постусловия: пользователь смог войти в игру.
- Пользователь запускает игру.
- Приложение инициализирует запуск игры.
- Пользователю предоставляется на дисплее главное меню игры (GUI интерфейс) со следующим функциональностью:
- Играть
- Глосарий
- Настройки
- Выход
Расширения:
- Игра позволяет выйти в главное меню 3. в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь желает выйти из игры. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Пользовательский вход в игру». Постусловия: пользователь смог успешно выйти из игры.
- Пользователь в главном меню выбирает «Выход».
- Система инициализирует выход из игры, сохраняет статистику, закрывает GUI.
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь желает запустить игровой процесс. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Пользовательский вход в игру». Постусловия: пользователь смог запустить игровой процесс.
- Пользователь в главном меню выбирает раздел «Играть».
- Система заменят экран главного меню на экран игрового поля. Она на карте расставляет: противников, предметы, персонажа игрока. Более того происходит генерация ландшафта. Уведомляет с помощью сообщения игрока о том, что игра началась.
Альтернативы:
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь хочет перемещать своего персонажа по игровой карте. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Пользовательская инициализация игры». Постусловия: пользователь смог успешно управлять персонажем.
- Пользователю предоставляется управление персонажем с помощью клавиатуры, а именно однократным нажатием на клавишу: «W»(вверх относительно центра дисплея), «S»(вниз), «D»(вправо), «A»(влево).
- Игра реагирует на нажатие любой из перечисленных выше клавиш и перемещает на одно игровое поле персонажа в соответствующем направлении.
Альтернативы:
- 1.1. Пользователь нажимает и удерживает палец на клавише.
- 1.2. Персонаж начинается перемещается по направлению, заданному нажатой клавишей.
- 1.2.1. Пользователь отпускает клавишу.
- 1.2.1.1. Система перестает перемещать персонажа по игровой карте.
- 1.2.2. Пользователь не отпускает клавишу перемещения.
- 1.2.2.1. Система перестает перемещать персонажа по игровой карте, так как предмет, ландшафтный элемент или граница карты не позволяет это сделать.
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь желает атаковать своим персонажем противника. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Управление персонажем». Постусловия: пользователь смог атаковать противника с помощью своего персонажа.
- Пользователь перемещает своего персонажа по карте с помощью управления с клавиатуры, ему на пути встречается враг.
- Когда персонаж попадает в заданный активный радиус противника, то противник начинает двигаться навстречу пользователю.
- Пользователь направляет персонажа на врага.
- Враг попал в радиус атаки персонажа.
- С помощью ЛКМ пользователь совершает атаку по врагу.
- Значение здоровья противника уменьшается на одну условную единицу.
Альтернативы:
- 3.1. Пользователь может направить своего персонажа в противоположную сторону от приближающегося противника.
- 3.1.1. Если скорость персонажа больше скорости бота, то по итогу выхода персонажа из активного радиуса врага, он уснет.
- 3.1.2. В противном случае враг атакует персонажа, в следствии чего он потеряет условную единицу здоровья.
- 5.1. Персонаж пользователя не атакует бота.
- 5.1.2. Если персонаж попал в радиус атаки противника, то враг атакует его.
- 5.1.1. Если персонаж вне радиуса атаки врага, никто не получает урона.
- 5.1.2.1. Если у персонажа перед атакой более одной единицы здоровья, то после успешной атаки он теряет одну условную единицу здоровья.
- 5.1.2.2. В противном случае персонаж пользователя умирает (прецедент «Смерть персонажа»).
- 6.1. После совершения атаки, враг остался с нулевым значением здоровья. Бот становится неактивным и через заданное время исчезает с игрового поля.
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: персонажа пользователя умирает. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Персонаж атакует противника». Постусловия: игра закончилась.
- Противник наносит урон персонажу .
- Персонаж теряет последнюю условную единицу здоровья.
- Игра отключает возможность управления персонажа игроком. После чего персонаж пропадает с поля. Игра уведомляет пользователя о том, что персонаж умер и игра закончилась.
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь желает подобрать с помощью персонажа предмет. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Управление персонажем». Постусловия: Пользователь смог подобрать предмет с помощью персонажа.
- Пользователь перемещает вплотную к предмету персонажа.
- Предмет начинает светится. Игра с помощью сообщения уведомляет пользователя о том, что он может его подобрать с помощью клавиши «E».
- Пользователь нажимает клавишу «Е», после чего предмет помещается в активный инвентарь.
- Предмет исчезает с игрового поля.
Альтернативы:
- 3.1. Если активный инвентарь заполнен полностью, то предмет попадает в рюкзак.
- 3.2. Заполнен как активный инвентарь, так и рюкзак.
-
- 3.2.1. Игра уведомляет о том, что невозможно подобрать предмет из-за нехватки места в рюкзаке.
- 3.2.1.1. Пользователь заходит в раздел рюкзак,нажимая клавишу «B», выбирает мышкой (ПКМ) предмет, который хочет вынуть из рюкзака. Нажимает на клавишу «F».
- 3.2.1.2. Предмет появляется на соседнем игровом поле от персонажа, таким образом, что он не перекрывает новый предмет.
- 3.2.1.3. Пользователь нажимает клавишу «Е».
- 3.2.1.4. Желаемый предмет исчезает с игрового поля и «перемещается в рюкзак».
- 3.1.1. Пользователь может поменять предмет из инвентаря на предмет из рюкзака.
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: пользователь желает изменить активный предмет персонажа на предмет из его рюкзака. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Подбор предмета». Постусловия: пользователь смог успешно заменил предмет.
- Пользователь нажимает мышкой (ПКМ) на предмет, который хочет заменить, в активном инвентаре.
- В активном инвентаре предмет начинает светиться, символизируя таким образом, что он выбран.
- Затем пользователь нажимает клавишу «В».
- На экране появляется раздел рюкзака.
- Игрок выбирает предмет (ПКМ), на который хочет заменить выбранную ранее вещь.
- Выбранная вещь начинает светиться в разделе рюкзака, символизируя то, что она выбрана.
- Пользователь нажимает клавишу «E».
- Раздел рюкзака пропадает с экрана. Желаемый предмет появляется на месте старого в поле активного инвентаря.
Альтернативы:
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.
Краткое описание: после смерти противника, на его месте возникает одна условная единица здоровья. Заинтересованность людей и их требования: игрок, работоспособное приложение, исправный компьютер с девайсами. Предусловия: прецедент «Персонаж атакует противника». Постусловия: лут успешно выпал с противника после его кончины.
- Пользователь нанес критический урон врагу.
- Враг умирает, то есть исчезает с игрового поля, а на его месте с заданной вероятностью может появиться изображение сердца.
- Если пользователь с помощью своего персонажа подберет его, то он может поднять свой уровень здоровья на одну условную единицу. За убийство бота персонаж получает одну условную единицу опыта.
Альтернативы:
Расширения:
- Игра позволяет выйти в главное меню в любой момент.
- Игра может предварительно завершится в случае обесточивания компьютера или полном разряжении батареи.
Открытые вопросы:
- В случае непредвиденного завершения, после ребута, игра должна локально сохранить хоть какое-то состояние, для восстановлении статистики игрока.