Створення інтерактивної гри "CatRobber" з головоломками, ігровими механіками, системою збереження прогресу та користувацьким інтерфейсом для літньої практики (частина 2).
CatRobber — це 2D-гра, розроблена на Java з використанням JavaFX, де гравець керує персонажем-котом, який проникає в локації (будинок, музей, банк), розв’язує головоломки, уникає поліції та камер безпеки, а також взаємодіє з об’єктами для досягнення мети. Проєкт реалізує складну систему управління грою, збереження прогресу, звуковий супровід, користувацький інтерфейс із магазином та інтерактивними вікнами, а також різноманітні головоломки для розблокування дверей.
- GameObject: Базовий клас для всіх ігрових об’єктів, що реалізує інтерфейси
Positioned,Renderable,Interactable,AnimatableтаSavableдля уніфікованого управління позицією, рендерингом, взаємодією, анімацією та збереженням. - Player: Клас гравця, який підтримує рух (за допомогою
InputHandler), взаємодію з об’єктами (двері, інтерактивні об’єкти), використання предметів із магазину (наприклад, зброя через клавішу 'F') та збереження стану. - Police: Ворог, який патрулює рівень і викликає тривогу при виявленні гравця. Використовує
Vector2Dдля позиціонування та руху. - SecurityCamera: Камера безпеки, яка сканує область і викликає тривогу, якщо гравець потрапляє в зону видимості. Підтримує обертання та збереження стану.
- Door: Двері, які можуть бути замкненими або пов’язаними з головоломками (
Puzzle). Відкриваються при успішному розв’язанні головоломки або використанні універсального ключа. - InteractiveObject: Об’єкти (нотатки, картини, комп’ютери), з якими гравець може взаємодіяти, відкриваючи відповідне UI-вікно (
InteractiveObjectWindow).
- Positioned: Визначає методи для роботи з позицією (
Vector2D) об’єктів. - Renderable: Забезпечує рендеринг об’єктів на JavaFX
Canvasчерезrenderметод. - Interactable: Дозволяє об’єктам обробляти взаємодію з гравцем.
- Animatable: Підтримує анімацію об’єктів через методи
updateтаrender. - Savable: Дозволяє об’єктам серіалізуватися в JSON для збереження стану.
- Puzzle: Абстрактний базовий клас для всіх головоломок, що реалізує
SavableтаInteractable. Пов’язує головоломки з дверима та викликає callback при розв’язанні. - LaserLockPuzzle: Гравець обирає один із трьох дротів для перерізання. Неправильний вибір викликає тривогу (
GameManager.alert()). - CodeLockPuzzle: Вимагає введення 4-значного коду через клавіатуру. Має 3 спроби; при вичерпанні викликається тривога.
- LockPickPuzzle: Таймінг-головоломка, де гравець рухає циліндр і натискає пробіл у "зоні успіху" для розблокування.
- GameApplication: Головний клас для запуску JavaFX-додатку, ініціалізує
GameWindow. - GameWindow: Управляє основним ігровим вікном, включаючи цикл гри (
AnimationTimer), рендеринг та обробку введення черезInputHandler. - UIManager: Координує відображення UI-компонентів (
Menu,ShopPane,InteractiveObjectWindow) через інтерфейсUIWindow. - Menu: Реалізує головне меню, заставку та вибір рівня (будинок, музей, банк) з кнопками для продовження, магазину та виходу.
- ShopPane: Інтерфейс магазину, де гравець купує предмети (Невидимість, Прискорення, Універсальний ключ, Зброя) за валюту (
GameManager.getTotalMoney()). - InteractiveObjectWindow: Відображає UI для інтерактивних об’єктів. Комп’ютер показує браузер із двома сторінками: пошуковою системою та кодом для
CodeLockPuzzle. - UIWindow: Інтерфейс для уніфікації показу/приховування UI-компонентів.
- GameManager: Центральний менеджер гри, що керує станом (
gameState,currentLevelId,totalMoney,completedLevels), взаємодією між об’єктами та тривогами. - LevelManager: Завантажує рівні (JSON-файли) через
GameLoaderта ініціалізує об’єкти гри. - SaveManager: Відповідає за збереження/завантаження стану гри в JSON-файли (
game_progress.json,player_current.jsonтощо). ВикористовуєSaveFileдля метаданих. - SoundManager: Відтворює звукові ефекти (наприклад,
CODE_LOCK_OPEN,ALERT) для головоломок і подій. - FontManager: Завантажує та керує шрифтами для UI.
- GameLoader: Завантажує JSON, зображення, аудіо та спрайт-листи, створює об’єкти гри з JSON-даних.
- InputHandler: Обробляє введення з клавіатури та миші, підтримує callback-функції для кастомної логіки.
- Vector2D: Клас для роботи з двовимірними векторами/позиціями. Підтримує додавання, множення на скаляр та обчислення евклідової відстані.
- SaveFile: Зберігає метадані збереження (шлях до файлу, ID рівня, час) у JSON-форматі.
- Технології: Java та JavaFX для рендерингу, UI та ігрових механік.
- Архітектура: Модульна структура з чітким поділом на ігрові об’єкти, UI, головоломки та утилітарні класи.
- Збереження: Використовує JSON для серіалізації стану гри через
SaveManagerтаSaveFile. - Головоломки: Інтерактивні механіки з підтримкою звуку (
SoundManager) та інтеграцією зGameManager. - UI: Кастомний інтерфейс із підтримкою власного заголовка, меню, магазину та інтерактивних вікон.
Фроленко Валерія, Борозняк Аліна, Кравченко Євгенія