feat: Initial commit Plants vs Zombies Web Edition v2.4

- 5 Biomes: Day, Night, Pool, Fog, Roof (25 Campaign levels)
- Minigames: Wall-nut Bowling, I Zombie, Roguelike, Boss Rush & Dr. Zomboss
- Systems: Zen Garden, Workshop Crafting, Almanac, Tree of Wisdom, Achievements
- Backend: REST API + SQLite Accounts & Save Synchronization
- Infrastructure: Nginx HTTPS & Docker deployment
This commit is contained in:
2026-09-17 09:30:52 +00:00
commit 6457a8904e
50 changed files with 14486 additions and 0 deletions
+184
View File
@@ -0,0 +1,184 @@
# Plants vs. Zombies (ai.qpid.pro) — Backlog & To-Do List
## Текущий статус: v1.7 Released (Production)
- [x] Разведка окружения и настройка DNS (`ai.qpid.pro` -> `31.77.203.213`)
- [x] Docker + Nginx + Certbot контейнеризация
- [x] SSL Let's Encrypt автоматизация и скрипт обновления
- [x] Базовый игровой движок на HTML5 Canvas (5x9 сетка, дорожки)
- [x] Газонокосилки (по одной на каждую линию)
- [x] Экономика солнца (падающее солнце + подсолнухи)
- [x] Базовые растения: Подсолнух, Горохострел, Ледяной горохострел, Стеноорех, Вишневая бомба, Лопата
- [x] Базовые зомби: Обычный, Зомби с конусом, Зомби с ведром, Зомби с флагом
- [x] Боевая система: регистрация урона, эффекты замедления, частицы взрывов
- [x] 4 волны с предупреждающими баннерами и экранами победы/поражения
- [x] Web Audio API синтезатор звуковых эффектов
---
## 🎯 Спринт v1.1: Мобильная адаптация, UX и Музыка (Released)
- [x] **Исправление багов**:
- [x] Зомби корректно продолжают движение после съедения растения (сброс флага `isEating` при гибели или отсутствии цели)
- [x] Peashooter стреляет только по живым целям (`!z.toRemove`)
- [x] **Сенсорное управление (Touch Controls)**
- [x] Тач-события `touchstart`, `touchmove`, `touchend` для смартфонов
- [x] Автоматический сбор солнц свайпом (проведение пальцем по экрану)
- [x] Увеличенные хитбоксы интерактивных элементов для мобильных пальцев
- [x] **Графика и рендеринг (HiDPI / Retina)**
- [x] Поддержка `window.devicePixelRatio` для четкости Canvas на смартфонах и 4K дисплеях
- [x] Адаптивное масштабирование `#game-container` через CSS `aspect-ratio` и `max-width: 98vw`
- [x] **Фоновое музыкальное сопровождение**
- [x] Синтез 8-битной полифонической темы *«Grasswalk»* на Web Audio API
- [x] Кнопка включения/выключения музыки `btn-music` на панели HUD
- [x] **Локальные сохранения рекордов**
- [x] Сохранение очков и лучшего рекорда в `localStorage`
- [x] Отображение рекорда на стартовом, победном и финальном экранах
---
## 🌻 Спринт v1.2: Тактический арсенал и Новые зомби (Released)
- [x] **Новые растения**
- [x] Картофельная мина (Potato Mine) — 25 ☀️, время взведения 14 сек, взрыв Spudow!
- [x] Повторитель (Repeater) — 200 ☀️, двойной залп горохом
- [x] Зубастик (Chomper) — 150 ☀️, моментальное заглатывание зомби и жевание
- [x] Халапеньо (Jalapeno) — 125 ☀️, выжигание всей горизонтальной полосы огнем
- [x] **Новые зомби**
- [x] Зомби с шестом (Pole Vaulter) — быстрый бег, перепрыгивание через 1-е растение с шестом
- [x] Зомби с газетой (Newspaper Zombie) — газета поглощает урон, ярость при уничтожении газеты
- [x] Зомби-футболист (Football Zombie) — тяжелый шлем, высокая скорость
- [x] **Индикатор волны (HUD)**
- [x] Шкала волны с визуальным индикатором прогресса
---
## 🌙 Спринт v1.3: Новые биомы (Ночь и Бассейн) (Released)
- [x] **Ночной газон (Night Stage)**
- [x] Отключение падения солнца с неба
- [x] Грибная экономика: Солнцегриб (Sun-shroom) и Дымогриб (Fume-shroom с пробивающими спорами)
- [x] Надгробия на поле и растение Могилоед (Grave Buster)
- [x] Ночной темный визуальный фон газона и подъем зомби из могил
- [x] **Бассейн (Pool Stage)**
- [x] 6 дорожек (две центральные дорожки с анимированной водой)
- [x] Растение Кувшинка (Lily Pad) для посадки наземных юнитов на воду
- [x] Водные зомби на кругах (Ducky Tube Zombies)
- [x] Плавающие очистители бассейна (Pool Cleaners)
---
## 🛒 Спринт v1.4: Кампания, Прогрессия и Магазин Дэйва (Released)
- [x] **Карта уровней (1-1 ... 1-10)**
- [x] Поэтапная кампания с автоматическим переходом на новый уровень
- [x] Автоматическая смена биома: День (1-5) -> Ночь (6-8) -> Бассейн (9-10)
- [x] **Экономика монет и Магазин Безумного Дэйва**
- [x] Выпадение серебряных (10), золотых (50) и алмазных (200) монет из поверженных зомби
- [x] Интерфейс магазина: покупка 6-го слота под семена (500 💰), садовых грабель (150 💰)
- [x] Механика грабель: автоматическое уничтожение первого зомби на газоне
- [x] **Профили игроков**
- [x] Сохранение монет, апгрейдов магазина, разблокированных уровней и рекорда в `localStorage`
---
## 🏆 Спринт v1.5: Режимы игры и Мини-игры (Released)
- [x] **Бесконечный режим (Endless Survival)**
- [x] Бесконечные волны с постоянно возрастающей интенсивностью и флагами
- [x] Отслеживание числа отбитых флагов и рекорда
- [x] **Мини-игра: Боулинг орехами (Wall-nut Bowling)**
- [x] Конвейерная подача орехов и вишен бесплатно
- [x] Механика рикошета катящихся орехов по диагоналям при ударе о зомби
- [x] Переключатель режимов прямо на стартовом экране («Приключение», «Выживание», «Боулинг», «Я, Зомби»)
---
## 🚀 Спринт v1.6: Исправление «Я, Зомби», Навбар без наложений, Меню, Профили/Гость и Автономное Test API (Released)
- [x] **Исправление бага режима «Я, Зомби»**:
- [x] Устранение мгновенной ложной победы: синхронная расстановка обороны газона без асинхронных задержек `setTimeout`
- [x] Размещение 5 целевых подсолнухов в колонке 0 и защитной линии растений (Горохострелы, Повторители, Стеноорехи, Мины)
- [x] Начисление +150 солнца за каждый съеденный подсолнух со звуковым эффектом
- [x] Корректное условие поражения: солнце < 50 и отсутствие живых зомби на газоне при уцелевших подсолнухах
- [x] Отключение автоматических волн и газонокосилок в режиме зомби
- [x] Проход зомби до левого края газона считается захватом мозгов и не вызывает проигрыш
- [x] **Полная переработка интерфейса (Устранение наложений элементов)**:
- [x] Создание независимой верхней панели `.top-nav-bar` на Flexbox над игровым холстом
- [x] Исключение абсолютного позиционирования кнопок поверх игрового Canvas, шкалы волн и слотов семян
- [x] Равномерное размещение элементов: слева «🏠 Меню» и плашка профиля; справа кнопки скорости «⚡ 1x/2x», музыки «🎵 Вкл/Выкл» и звука «🔊 Вкл/Выкл»
- [x] **Главное меню и перезапуск**:
- [x] Кнопка «🏠 Меню» доступна в любой момент игры: ставит игру на паузу и открывает окно выбора режима, уровня и магазина
- [x] Кнопки «В МЕНЮ» на экранах поражения и победы для мгновенного перезапуска или смены сценария
- [x] **Система авторизации и профилей (Логин/Пароль + Гость)**:
- [x] Реализована система `PvZAuth` в `js/systems/auth.js`
- [x] Модальное окно авторизации игрока: вход / быстрая регистрация по логину и паролю
- [x] Режим «Гость»: полноценная сессионная игра без сохранения прогресса на диск
- [x] Изоляция данных пользователя: сохраненные монеты, открытые уровни и покупки магазина привязаны к аккаунту
- [x] Индикатор текущего статуса игрока в верхнем тулбаре
- [x] **Автономное тестирование игры (Test API & CLI Runner)**:
- [x] Встроенный движковый API `window.PvZTestAPI` в `js/utils/test_api.js` (симуляция тиков, спавн сущностей, проверка боя, мины, косилок, победы в «Я, Зомби» и авторизации)
- [x] Автономный CLI скрипт `scripts/test_game.py` с 46 автоматическими проверками HTTP/2, статики, синтаксиса и бизнес-логики
---
## 🛠️ Спринт v1.7: Локация «Садовая Мастерская» — Крафт, 3 Уровня прокачки растений и Пассивные перки (Released)
- [x] **Новая игровая локация «Сад-Мастерская» (Garden Workshop & Lab)**:
- [x] Отдельный интерактивный экран/модальное окно Сада с верстаком прокачки и деревом перков
- [x] Переход в Сад одной кнопкой из верхнего меню и стартового окна («🧪 Сад-Мастерская»)
- [x] **Система ремесленных материалов (Drop & Craft)**:
- [x] Сбор ресурсов в процессе боя во всех режимах игры:
- 🧪 **Био-гумус (Bio-Humus)** — выпадает из поверженных базовых зомби
- ⚙️ **Зомби-детали (Scrap Metal)** — выпадает из бронированных врагов (ведра, конусы, футболисты)
- ☀️ **Солнечная эссенция (Sun Essence)** — накапливается за активный сбор солнечных капель
- 💎 **Алмазные кристаллы (Crystals)** — редкий дроп из волн флагов и элиты
- [x] Визуальные летающие дропы материалов с физикой падения, анимацией и подсветкой
- [x] Сбор материалов кликом мыши или автосбором через перк магнетизма
- [x] **Система 3 уровней прокачки каждого растения (Tier 1 ➔ Tier 2 ➔ Tier 3)**:
- [x] Индивидуальный прогресс каждого растения за монеты + материалы:
- **Горохострел**:
- *Ур. 1*: Базовый горох (урон 20)
- *Ур. 2 («Скорострел»)*: Урон 25, скорость атаки +20%, шанс крита 15% (x2 урон)
- *Ур. 3 («Плазменный стрелок»)*: Плазменный шар пробивает первого зомби насквозь и ранит идущего сзади
- **Подсолнух**:
- *Ур. 1*: Базовое солнце (25 ☀️)
- *Ур. 2 («Крупный подсолнух»)*: Дает 35 ☀️, ускоренное появление
- *Ур. 3 («Благодатный свет»)*: Каждая генерация солнца лечит +30 HP соседним растениям
- **Стеноорех**:
- *Ур. 1*: 400 HP
- *Ур. 2 («Каменный монолит»)*: 700 HP + поглощение 15% урона
- *Ур. 3 («Шипованный бастион»)*: 1000 HP + возврат 30% урона атакующим зомби при каждом укусе
- **Картофельная мина**:
- *Ур. 1*: Взведение 15 сек, взрыв в 1 клетке
- *Ур. 2*: Быстрое взведение всего за 6 сек
- *Ур. 3 («Атомный Spudow»)*: Взрыв по площади 3x3 клетки + лавовая зона
- **Повторитель, Ледяной горох, Зубастик** — расширенные деревья прокачки до 3 уровней
- [x] Визуальное отображение уровней: звездочки (★★ / ★★★) над карточками в колоде и световые ауры на газоне
- [x] **Пассивные Перки Садовника (Глобальное дерево технологий)**:
- [x] 5 пассивных улучшений профиля:
- 🧲 *«Магнитный газон»* — увеличенный радиус автосбора монет, солнц и лута (до полного экрана на ур. 3)
- ☀️ *«Стартовый капитал»* — старт каждого боя с +50/+100/+150 ☀️
- ⏳ *«Ускоренный полив»* — сокращение кулдауна семян на -10%/-20%/-30%
- 🛡️ *«Упорные корни»* — запас здоровья всех посадок +20%/+35%/+50%
- 🍀 *«Золотая рука»* — шанс дропа золотых монет и редких материалов повышен на +30%/+60%/+100%
- [x] Сохранение уровней растений, ресурсов и купленных перков в профиле игрока (`PvZAuth`)
---
## 🪴 Спринт v1.8: Дзен-Сад (Пассивный доход и улитка Стинки) и Альманах (Запланировано)
- [ ] **Дзен-Сад (Zen Garden)**:
- [ ] Выращивание растений в горшках (лейка, удобрения, граммофон)
- [ ] Пассивный доход монет каждые несколько часов (начисление монет за время отсутствия)
- [ ] Улитка Стинки (Stinky the Snail) пылесосит монеты при подкармливании шоколадом
- [ ] **Альманах пригородных растений и зомби (Suburban Almanac)**:
- [ ] Энциклопедия с описанием, статистикой и лором всех персонажей
- [ ] Секретный Зомби-Йети (дроп 4 алмазов)
---
## 🎲 Спринт v1.9: «Садовый Рогалик» и Достижения (Запланировано)
- [ ] **Режим «Садовый Рогалик» (Garden Roguelike)**:
- [ ] Драфт семян и выбор 1 из 3 мощных реликвий после каждой волны (молнии, яд, взрывы)
- [ ] **Система Достижений (30+ ачивок с наградами)**:
- [ ] Зал трофеев в профиле игрока
---
## 👑 Спринт v2.0: Туман, Крыша, Босс Зомбосс и Лидерборды (Запланировано)
- [ ] **Биомы Туман и Крыша** с катапультами
- [ ] **Дерево Мудрости** и клавиатурные чит-коды (`mustache`, `future`, `dance`, `pinata`)
- [ ] **Финальный босс Доктор Зомбосс** на гигантском Zombot
- [ ] **Глобальные таблицы лидеров**