Nodejs-разработка
Присоединяйтесь к нашей программе обучения
CLI текстовый квест
Необходимо создать консольное приложение, которое реализует простой текстовый квест. Пользователь будет взаимодействовать с игрой через текстовые команды в терминале.
Описание проекта
1. Начало игры:
Пользователь запускает скрипт, после чего игра выводит вступительный текст с описанием начальной ситуации и списком действий.
2. Выбор действий:
На каждом этапе пользователю предлагается выбор из нескольких действий. Например:
Направо
Налево
Осмотреться
3. Реализация логики игры:
В зависимости от выбора пользователя, игра должна выводить различные текстовые описания и предоставлять новые выборы. Можно учесть несколько ветвлений сценария, чтобы пользователю было интересно исследовать разные пути.
4. Конец игры:
Игра может завершиться несколькими способами (например, победа, поражение или нейтральный конец). Важно, чтобы игра отслеживала статус пользователя и корректно завершала сессию.
Требования
Код должен быть написан на TypeScript. Использовать фреймворки и внешние библиотеки не требуется. Разрешено использование только стандартных возможностей среды выполнения Node.js (например, для чтения/записи файлов, взаимодействия с консолью и выполнения скрипта). Основной упор сделайте на использование TypeScript для строгой типизации каждого этапа игры, чтобы структура оставалась понятной и легко поддерживалась.
Нужно использовать паттерн Model-View-Controller (MVC) и объектно-ориентированное программирование (ООП).
Каждое действие в игре должно быть представлено в виде объекта с описанием и результатом. Например, переходы между шагами игры должны быть легко управляемы через объекты.
Состояние игры не должно содержать информацию о конкретных сценариях. Вместо этого, используйте отдельные объекты для каждого сценария. Это обеспечит лёгкость в добавлении новых сценариев без значительных изменений кода.
Новые сценарии должны добавляться без необходимости вносить изменения в основную логику игры. Структура кода должна позволять просто подключать новые элементы или ветки.
Задание не требует сохранения прогресса или взаимодействия с базами данных. Однако ваш код должен быть спроектирован так, чтобы в будущем можно было легко добавить эти функции.
Нужно протестировать логику игры.
Файл README.md должен содержать краткое описание проекта и инструкцию по запуску и тестированию проекта.
Сценарий
К заданию прилагается сценарий игры "Таинственный лес". Можно полностью опираться на него или можно использовать его как пример для создания своего (небольшого) сценария.
Тестирование
Нужно написать юнит тесты, чтобы убедиться в правильности логики работы игры. Основной функционал, который нужно протестировать:
Игра должна корректно изменять своё состояние в зависимости от действий игрока.
Пример: Проверьте, что при выборе действия "Направо" состояние игры меняется с "Начало" на "Поворот направо".Действия игрока должны выполняться корректно, возвращать правильное описание и вести к правильному следующему шагу.
Пример: Создайте действие "Переход через мост" и проверьте, что его выполнение возвращает правильное сообщение и ведет к шагу "Конец".Игра должна правильно отображать информацию для игрока, включая доступные действия и результаты их выполнения.
Пример: Проверьте, что при выполнении действия "Перейти через мост" представление выводит сообщение "Мост обрушился под вами".В случае ошибочного ввода от игрока игра должна отображать сообщение об ошибке и список доступных действий.
Пример: Проверьте, что при некорректном выборе действия выводится сообщение об ошибке и разрешенные действия.
Сценарий "Таинственный лес"
Начало:
Вы просыпаетесь в центре густого леса, окруженного туманом. Единственный звук, который вы слышите, — это ветер, шелестящий в листве деревьев. Перед вами две тропинки. Одна ведет направо, другая — налево.
Подсказки и ресурсы
Для написания проекта могут понадобится следующие теоретические знания:
1. Паттерн MVC (Model-View-Controller):
Это основной паттерн, который применяется в проекте. Он разделяет приложение на три части: модель (состояние игры), представление (то, как информация показывается пользователю) и контроллер (логика обработки действий пользователя). Это упрощает сопровождение и расширение приложения.
2. Паттерн State (Состояние):
Игра управляется состоянием, которое хранит текущий шаг и сценарий. В зависимости от выбора действия игроком состояние игры изменяется, и это влияет на последующие действия.
3. Паттерн Command (Команда):
Каждое действие игрока в виде объектов можно рассматривать как реализацию паттерна Command. Эти действия представляют команды, которые игрок выполняет, и они инкапсулируют логику выполнения (например, переход на следующий шаг).