Skip to content

Latest commit

 

History

History
95 lines (50 loc) · 9.1 KB

File metadata and controls

95 lines (50 loc) · 9.1 KB

Первое задание: CLI текстовый квест

Необходимо создать консольное приложение, которое реализует простой текстовый квест. Пользователь будет взаимодействовать с игрой через текстовые команды в терминале.

Описание проекта

1. Начало игры:

Пользователь запускает скрипт, после чего игра выводит вступительный текст с описанием начальной ситуации и списком действий.

2. Выбор действий:

На каждом этапе пользователю предлагается выбор из нескольких действий. Например, могут быть такие действия:

  • Направо
  • Налево
  • Осмотреться (получить список всех предметов, с которыми можно взаимодействовать)

3. Реализация логики игры:

В зависимости от выбора пользователя, игра должна выводить различные текстовые описания и предоставлять новые выборы. Можно учесть несколько ветвлений сценария, чтобы пользователю было интересно исследовать разные пути.

4. Конец игры:

Игра может завершиться несколькими способами (например, победа, поражение или нейтральный конец). Важно, чтобы игра отслеживала статус пользователя и корректно завершала сессию.

Пример готового текстового квеста:

Квест «Вампиры! (часть 1)». Этот пример в веб формате, можно поиграть, чтобы получить представление о текстовых квестах.

Требования

  1. Код должен быть написан на TypeScript. Использовать фреймворки и внешние библиотеки не требуется. Разрешено использование только стандартных возможностей среды выполнения Node.js (например, для чтения/записи файлов, взаимодействия с консолью и выполнения скрипта). Основной упор сделайте на использование TypeScript для строгой типизации каждого этапа игры, чтобы структура оставалась понятной и легко поддерживалась.

  2. Нужно использовать паттерн Model-View-Controller (MVC) и объектно-ориентированное пограммирование (ООП).

  3. Каждое действие в игре должно быть представлено в виде объекта с описанием и результатом. Например, переходы между шагами игры должны быть легко управляемы через объекты.

  4. Состояние игры не должно содержать информацию о конкретных сценариях. Вместо этого, используйте отдельные объекты для каждого сценария. Это обеспечит лёгкость в добавлении новых сценариев без значительных изменений кода.

  5. Новые сценарии должны добавляться без необходимости вносить изменения в основную логику игры. Структура кода должна позволять просто подключать новые элементы или ветки.

  6. Задание не требует сохранения прогресса или взаимодействия с базами данных. Однако ваш код должен быть спроектирован так, чтобы в будущем можно было легко добавить эти функции.

  7. Нужно протестировать логику игры.

  8. Файл README.md должен содержать краткое описание проекта и инструкцию по запуску и тестированию проекта.

Сценарий

К заданию прилагается сценарий игры "Таинственный лес". Можно полностью опираться на него или можно использовать его как пример для создания своего (небольшого) сценарий.

Тестирование

Нужно написать юнит тесты, чтобы убедиться в правильности логики работы игры. Основной функционал, который нужно протестировать:

  • Игра должна корректно изменять своё состояние в зависимости от действий игрока.

    Пример: Проверьте, что при выборе действия "Направо" состояние игры меняется с "Начало" на "Поворот направо".

  • Действия игрока должны выполняться корректно, возвращать правильное описание и вести к правильному следующему шагу.

    Пример: Создайте действие "Переход через мост" и проверьте, что его выполнение возвращает правильное сообщение и ведет к шагу "Конец".

  • Игра должна правильно отображать информацию для игрока, включая доступные действия и результаты их выполнения.

    Пример: Проверьте, что при выполнении действия "Перейти через мост" представление выводит сообщение "Мост обрушился под вами".

  • В случае ошибочного ввода от игрока игра должна отображать сообщение об ошибке и список доступных действий.

    Пример: Проверьте, что при некорректном выборе действия выводится сообщение об ошибке и разрешенные действия.

Подсказки и ресурсы

Для написания проекта могут понадобится следующие теоретические знания:

1. Паттерн MVC (Model-View-Controller):

Это основной паттерн, который применяется в проекте. Он разделяет приложение на три части: модель (состояние игры), представление (то, как информация показывается пользователю) и контроллер (логика обработки действий пользователя). Это упрощает сопровождение и расширение приложения.

2. Паттерн State (Состояние):

Игра управляется состоянием, которое хранит текущий шаг и сценарий. В зависимости от выбора действия игроком состояние игры изменяется, и это влияет на последующие действия.

3. Паттерн Command (Команда):

Каждое действие игрока в виде объектов можно рассматривать как реализацию паттерна Command. Эти действия представляют команды, которые игрок выполняет, и они инкапсулируют логику выполнения (например, переход на следующий шаг).