Files
fishing-game/README.md
T

66 lines
7.1 KiB
Markdown

# 🎣 Рыбалка
Браузерная мобильная игра про рыбалку. Один HTML-файл, без зависимостей — просто открой в браузере и играй.
| Меню | Клёв | Вываживание | Улов |
|---|---|---|---|
| ![меню](screenshots/shot-menu.png) | ![клев](screenshots/shot-bite.png) | ![вываживание](screenshots/shot-reel.png) | ![улов](screenshots/shot-card.png) |
## Как играть
Управление одним пальцем (вертикальный экран):
1. **Держи палец** — заряжается мощность броска, **отпусти** — кидаешь удочку. Чем дальше, тем реже, но ценнее рыба.
2. Когда поплавок нырнул и появилась **«!**» — быстро нажми экран, чтобы зацепить. У редких рыб окно на подсечку всего доли секунды.
3. **Вываживание**: держишь палец — втягиваешь, но растёт нагрузка на шнур (жёлтая полоса справа). Рыба периодически **тянет** (⚡, с вибрацией) — отпусти в этот момент, иначе шнур лопнет. Полоса снизу — оставшаяся дистанция: доведи рыбку до лодки. Чем крупнее рыба, тем сильнее рвёт и дольше тянет.
4. **У каждой рыбы свой вес**, продажа — по цене за кг своего вида (от 20 до 1500 🪙/кг). Крупная рыба = большие деньги.
5. **У удочек есть предел веса** (3–40 кг): зацепишь более тяжёлую — шнур лопнет почти мгновенно. Чем лучше удочка и приманка, тем выше шанс зацепить крупную. Новый максимум по виду отмечен бейджем «🏆 РЕКОРД!» на карточке улова.
6. На монеты — новые удилища и приманки в магазине 🛒.
7. **Награды 🎯**: три квеста дня (уловы, монеты, забросы) с наградой за выполнение; стрик входов — ежедневная награда растёт до дня 7, «щит» прощает один пропуск в неделю; 17 достижений 🏅 с постоянными бонусами (+% к монетам, окно подсечки, нагрузка шнура).
8. **День/ночь**: полный цикл суток ~5 минут (утро → день → вечер → ночь). Ночью свой состав рыб — сом, щука и окунь активнее, но без 🪯 фонарика из лавки клёва не будет.
9. **Осётр-босс**: при поимке осётра есть шанс встретить босса. Бой идёт в 3 фазы — босс «рвёт и уходит», и каждая следующая фаза глубже; удерживай, чтобы втащить. Награда ×5 к цене.
## Возможности
- 8 видов рыб с собственным весом (0.05–40 кг) и ценой за кг (5 уровней редкости)
- Удилища: предел веса, прочность шнура, скорость подсечки, бонус на крупную рыбу
- Приманки: частота клёва, дальность броска, шанс редких и крупных
- Цикл дня и ночи (~5 мин на сутки): ночью своя таблица рыб (сом/щука/окунь активнее), без 🪯 фонарика ночью клёва нет
- Босс-рыба — Осётр-босс (шанс при поимке осётра): 3 фазы «рвёт и уходит», награда ×5, достижение «Босс-рыбак»
- Квесты дня (3 шт, генерация по дню), стрик входов со «щитом», 17 достижений с бонусами
- Дневник рыбака — коллекция, максимальный улов по каждому виду, статистика
- Магазин с вкладками: Снасти 🎣, Дневник 📔, Награды 🎯, Достижения 🏅
- Прогресс и коллекция сохраняются в `localStorage` (старые сейвы мигрируются автоматически)
- Сброс всего прогресса кнопкой 🗑️ в HUD — через диалог подтверждения (настройка звука при сбросе сохраняется)
- Звуки на WebAudio, вибрация на телефоне
- Вся графика нарисована на Canvas — внешних ресурсов нет
## Документация
[📋 Процесс разработки](docs/DEVLOG.md) — этапы (ТЗ → прототип → автотесты → публикация), инструменты, найденные баги, гигиена секретов и как развивать игру дальше.
## Запуск
Просто открой [index.html](index.html) в браузере (десктоп или телефон). Для локальной разработки:
```bash
python3 -m http.server 8000
# → http://localhost:8000
```
## Тесты
Автотест прогоняет весь геймплей (бросок, подсечка, все исходы вываживания, магазин, дневник, сохранение, shiny-рыба, near-miss, миграция сейва, квесты, стрик, достижения, день/ночь с фонариком, босс-рыба в 3 фазы) в headless Chromium:
```bash
cd tests
npm install # ставит puppeteer-core
node test.js # 54 проверки
```
Нужен установленный Chromium (`executablePath` в `test.js` при необходимости поправить).
Есть и браузерный плейтест «вживую» во встроенном браузере Orca: `node tests/orca-playtest.js` (из каталога репо, требует запущенный Orca app) — полный геймплей, проверка консоли и pageerror; детали в [docs/BROWSER-TESTING.md](docs/BROWSER-TESTING.md).
Скриншоты состояний — `tests/shots.js` (headless, запускать из каталога `tests/`, кадры пишутся в текущий каталог): без аргументов снимает все кадры; `node shots.js menu boss` — только выбранные (прогон всё равно полный, пропускается лишь сохранение остальных); `node shots.js --list` — список кадров. Свежие скрины для README копируются в `screenshots/`.