Текстовый квест-симулятор специалиста по информационной безопасности (SOC-аналитика).
Обнаружена аномалия в сетевом трафике. Ваше время на реагирование ограничено. Удачи, инженер.
CyberShield: Incident Response — это интерактивное веб-приложение, погружающее пользователя в атмосферу работы Центра мониторинга и реагирования на инциденты (SOC). Вы берете на себя роль дежурного инженера по безопасности.
Проект построен на архитектуре конечного автомата (Finite State Machine), где каждая сцена — это объект с текстом, техническими данными и вариантами выбора. Игрок проходит через цепочку решений, чтобы локализовать и нейтрализовать угрозу.
engine.js управляет data.js).Игрок начинает с получения алерта об аномалии в сети. От его решений зависит финал.
| Сценарий | Описание | Исход |
|---|---|---|
| start | Обнаружена аномалия. Войти в систему или игнорировать? | Вход → monitorИгнор → fail_shutdown |
| monitor | Сервер под DDoS-атакой. Фильтровать трафик или отключить сервер? | Фильтр → analysisОтключить → neutral_end |
| analysis | Найден скрытый скрипт в БД. Удалить или исследовать? | Удалить → victoryИсследовать → fail_virus |
| victory | Угроза нейтрализована. Победа! | Рестарт → start |
| neutral_end | Атака остановлена, но компания понесла убытки. | Рестарт → start |
| fail_shutdown | Игнорирование привело к уничтожению системы. | Рестарт → start |
| fail_virus | Вирус перехватил управление. Данные зашифрованы. | Рестарт → start |
cybershield/
├── index.html # Главная страница
├── assets/
│ ├── css/
│ │ └── style.css # Все стили (терминал, кнопки, анимации)
│ └── js/
│ ├── data.js # Сценарий (объект scenario)
│ └── engine.js # Движок (отрисовка, эффект печати, переходы)
└── README.md
Так как проект использует только статические файлы (HTML/CSS/JS), для запуска достаточно открыть index.html в браузере.
git clone https://github.com/yourusername/cybershield.git
cd cybershield
# Открыть index.html в браузере
Или просто дважды кликнуть по index.html.
# Установить Live Server (если используешь VS Code)
# ПКМ по index.html -> Open with Live Server
data.js)Все сцены описаны в объекте scenario. Каждая сцена содержит:
{
stage: "1/5", // Текущий этап
message: "текст...", // Сообщение с переносами \n
options: [ // Варианты выбора
{ text: "КНОПКА", next: "следующая_сцена" }
]
}
engine.js)updateGame(sceneKey) — загружает сцену по ключу, обновляет прогресс и запускает эффект печати.typeEffect() — посимвольно выводит текст с задержкой 20 мс.drawButtons(options) — создает кнопки выбора после завершения печати.style.css)Чтобы добавить новую сцену, просто добавь объект в scenario:
const scenario = {
// ... существующие сцены
new_scene: {
stage: "3/5",
message: "> НОВОЕ СОБЫТИЕ...",
options: [
{ text: "ДЕЙСТВИЕ А", next: "next_scene" },
{ text: "ДЕЙСТВИЕ Б", next: "another_scene" }
]
}
};
Затем укажи next в одной из существующих сцен, чтобы вести на "new_scene".