init
This commit is contained in:
119
README.md
Normal file
119
README.md
Normal file
@@ -0,0 +1,119 @@
|
||||
# Дело № 260826. Исчезновение подарка — v2
|
||||
|
||||
Интерактивный веб-квест ко дню рождения. Чистые HTML/CSS/JS, без сборки и
|
||||
серверной части.
|
||||
|
||||
Это переработанная версия. Папка `../quest/` (v1) оставлена нетронутой
|
||||
для сравнения.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
1. Откройте `data.js` и заполните блок `CONFIG` вверху файла:
|
||||
|
||||
```js
|
||||
const CONFIG = {
|
||||
name: "Алиса", // имя именинницы
|
||||
caseNumber: "260826", // номер дела = дата в формате ДДММГГ
|
||||
caseDateWords: "двадцать шестое августа две тысячи двадцать шестого года",
|
||||
pvzAddress: "Москва, Кочновский пр-д, 4 к. 1. ПВЗ Озон",
|
||||
pickupCode: "АРБУЗ", // кодовое слово для запроса штрихкода
|
||||
pvzPageUrl: "", // необязательно: ссылка для QR
|
||||
songSrc: "assets/song.mp3", // необязательно: аудио песни
|
||||
};
|
||||
```
|
||||
|
||||
**Важно:** `caseNumber` и `caseDateWords` должны совпадать — номер дела
|
||||
выводится игроком из даты, записанной прописью. Если меняете дату,
|
||||
поменяйте оба поля.
|
||||
|
||||
2. (Необязательно) Положите mp3 в `assets/song.mp3`. Без файла плеер сам
|
||||
скроется, текст песни останется — загадка решается по тексту.
|
||||
|
||||
3. Откройте `index.html` или запустите статический сервер:
|
||||
|
||||
```bash
|
||||
python -m http.server 8792
|
||||
```
|
||||
|
||||
## Что изменилось по сравнению с v1
|
||||
|
||||
Главная претензия к v1: загадки выглядели как загадки, но не требовали
|
||||
думать — ответ почти всегда лежал на том же экране.
|
||||
|
||||
| Этап | Было (v1) | Стало (v2) |
|
||||
|---|---|---|
|
||||
| Номер дела | Просто перепечатать число из уведомления | Вывести из даты прописью по правилу ДДММГГ |
|
||||
| Место происшествия | Пиксель-хант: клик по еле заметному овалу | Сверить инвентарные бирки на столе со списком в описи |
|
||||
| Допрос | Свидетель дословно повторял текст улики | Построить таймлайн по журналу турникета и найти физически невозможное показание |
|
||||
| Аудио | Ответ «сюжет» был напечатан в припеве дважды | Слова `ПАУЗА` в песне нет: акростих надо собрать, а припев подсовывает ложное «ожидание» |
|
||||
| Ложный след | Тот же ответ, что и в филологии — повтор | Два независимых признака подделки: противоречие журналу и падеж; искать в сплошном тексте |
|
||||
| Финал | Журнал улик прямо показывал П-О-Д-А-Р-О-К | Заполнить форму ордера из трёх граф, каждая — из своей главы |
|
||||
|
||||
Ключевое изменение: **журнал дела из спойлера стал рабочим блокнотом**.
|
||||
Он копит установленные факты (`09:08`, `ДС-04`, `ПАУЗА`), которые
|
||||
понадобятся в финальной форме.
|
||||
|
||||
## Ответы (шпаргалка)
|
||||
|
||||
| Глава | Ответ |
|
||||
|---|---|
|
||||
| Допуск | `260826` (из даты прописью) |
|
||||
| Опись | коробка с биркой `ДС-04` (единственный предмет вне описи) |
|
||||
| Показания | Клавдия Ивановна Шлюз (вышла 09:02, вернулась 09:12, а «была на посту в 09:07») |
|
||||
| Экспертиза | Документ № 3 («согласно приказа» вместо «приказу») |
|
||||
| Запись | `ПАУЗА` (первые буквы пяти строк бриджа) |
|
||||
| Ложный след | `в 09:05` (Каверза вошёл только в 09:15) и `согласно приказа` |
|
||||
| Ордер | `09:08` · `ДС-04` · `ПАУЗА` |
|
||||
|
||||
Ввод терпим к формату: время принимает `9:08`, `09.08`, `0908`; бирка —
|
||||
`дс 04`, `ДС-04`; регистр везде не важен.
|
||||
|
||||
## Финальный экран и выдача подарка
|
||||
|
||||
Штрихкод намеренно **не показывается в квесте**. Последний шаг —
|
||||
написать организатору:
|
||||
|
||||
1. Именинница отправляет в личные сообщения кодовое слово `АРБУЗ`.
|
||||
2. В ответ вы присылаете штрихкод заказа.
|
||||
3. Она показывает штрихкод на ПВЗ по адресу с экрана.
|
||||
|
||||
Это встроено в сюжет как последняя бюрократическая процедура: «Бюро не
|
||||
хранит штрихкоды в открытом виде — они выдаются ответственному лицу под
|
||||
расписку». Инструкция выведена нумерованным списком под ордером.
|
||||
|
||||
QR-код кодирует адрес, кодовое слово и номер дела короткой строкой,
|
||||
чтобы код оставался разреженным и уверенно ловился камерой. Если указан
|
||||
`pvzPageUrl`, QR ведёт на эту страницу вместо текста.
|
||||
|
||||
Адрес и кодовое слово продублированы обычным текстом, плюс кнопка
|
||||
копирования — с запасным путём на случай, когда Clipboard API
|
||||
недоступен (например, при открытии страницы файлом).
|
||||
|
||||
## Структура
|
||||
|
||||
```
|
||||
index.html — точка входа
|
||||
styles.css — оформление
|
||||
data.js — CONFIG, FACTS и весь текст (правьте здесь)
|
||||
app.js — логика: состояния экранов, журнал, подсказки, звук
|
||||
vendor/qrcode.js — MIT-библиотека генерации QR (kazuhikoarase/qrcode-generator)
|
||||
assets/ — сюда song.mp3 (опционально)
|
||||
```
|
||||
|
||||
## Механики помощи
|
||||
|
||||
- Кнопка **«Журнал»** — все установленные факты, нужны в финале.
|
||||
- Кнопка **«Подсказка»** — до трёх уровней на каждую загадку, от намёка
|
||||
до прямого ответа.
|
||||
- Подсказки открываются и сами: после 3, 5 и 8 неверных попыток.
|
||||
- После 8 ошибок появляется ссылка «Следствие настаивает на правильном
|
||||
ответе», которая подсвечивает или подставляет ответ. Застрять нельзя.
|
||||
- Прогресс сохраняется автоматически; «Начать сначала» — внизу экрана,
|
||||
требует двойного нажатия.
|
||||
|
||||
## Проверено
|
||||
|
||||
Полное прохождение в Chrome: все главы, неверные ответы, ловушки,
|
||||
подсказки, журнал, финал с QR. Консоль чистая. Мобильная вёрстка
|
||||
проверена на ширине 361px — переполнения нет, стол со сцены получает
|
||||
горизонтальную прокрутку, чтобы бирки оставались читаемыми.
|
||||
Reference in New Issue
Block a user