Skip to content

Latest commit

 

History

71 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

⚓ SEA-BATTLE-GAME

Морський бій нового покоління — Java Swing, кампанія, магазин, статистика та власний ШІ

License Java Version Java Swing Platform Status


🎯 Про проєкт

Класична настільна гра "Морський бій", переосмислена як повноцінний десктопний застосунок: кампанія з 8 рівнями, магазин косметики за монети, три рівні складності ШІ (включно з тим, що "вираховує" напрямок вашого корабля), і чотири додаткові режими для тих, хто вже пройшов усе інше.

Уся гра — одне повноекранне вікно. Жодних окремих спливаючих вікон під час переходів між меню, кампанією чи боєм — усе перемикається миттєво й плавно.

Мова використана у грі - англійська (для зручності)


✨ Основні можливості

  • Кампанія на 8 рівнів — наростаюча складність, гандикапи для гравця, ворожі боси-флагмани та нагороди монетами за проходження.
  • Розумний ШІ трьох рівнів — від чистого рандому до алгоритму, який після двох влучань вираховує напрямок корабля і "веде вогонь по лінії".
  • Режим "Залп" — кількість пострілів за хід дорівнює кількості кораблів, що ще лишились у флоті.
  • Магазин скінів — 6 варіантів забарвлення кораблів, куплені за монети з кампанії, застосовуються одразу у всіх режимах.
  • 5 режимів гри — класика проти ШІ/друга, кампанія, охота на час (5 хв), арена (3 бої поспіль без поразок), щоденний виклик.
  • Персональна статистика — перемоги, серії перемог, точність, загальний час у грі.
  • Повноекранний режим в одному вікні — усі екрани на CardLayout, без відкривання нових JFrame. *Анімації та частинки — спалах і розліт частинок при потопленні корабля, програмно синтезовані звукові ефекти без зовнішніх аудіофайлів.
  • ️ Drag & Drop розстановка — перетягування та обертання кораблів мишею при підготовці до бою.

🛠 Стек технологій

Категорія Технології
Мова Java 21 (records, pattern matching у switch)
GUI Java Swing (кастомна тема, власна відмальовка компонентів)
Звук javax.sound.sampled — тони синтезуються програмно в рантаймі
Збереження даних Локальні .properties-файли (без бази даних)
Інструменти Git, IntelliJ IDEA / Eclipse, javac

Проєкт свідомо без бекенду й без бази даних — це офлайн-гра, весь прогрес зберігається локально на диску гравця.


🎮 Режими гри

Режим Опис
Гра проти комп'ютера Класичний бій 1×1, на вибір 3 рівні складності ШІ
Гра з другом Локальний PvP на одному пристрої, по черзі розставляють флоти
Кампанія 8 рівнів із унікальними умовами: гандикап, залп, бос-флагман
Охота на час 5 хвилин — знищ максимум кораблів супротивника
Арена 3 поєдинки поспіль без жодної поразки — ризик заради нагороди
Щоденний виклик Один бій на день із фіксованими умовами

Рівні складності ШІ

Рівень Поведінка
🟢 Легко Стріляє повністю випадково по всій дошці
🟡 Середньо Парність клітин + добиває сусідні клітини після влучання
🔴 Складно Після 2 влучань вираховує напрямок і веде вогонь по лінії корабля

🚀 Швидкий старт

Виконайте ці команди у терміналі для локального запуску проєкту:

1. Клонування репозиторію

git clone https://github.com/JPSSProgramming/sea-battle-game.git
cd sea-battle-game

2. Компіляція

javac -encoding UTF-8 -d out $(find src -name "*.java")

3. Запуск

java -cp out org.sea.battle.game.Main

Потрібна JDK 21+. Перевірити версію: java -version.

Через IDE

Відкрийте папку як Java-проєкт у IntelliJ IDEA / Eclipse, переконайтесь що обрано JDK 21, і запустіть org.sea.battle.game.Main.


⌨️ Керування

Дія Клавіша / дія миші
Обрати / розмістити корабель ЛКМ по резерву → ЛКМ по дошці
Повернути корабель перед розміщенням R
Повернути вже розміщений корабель ПКМ по кораблю
Перемістити розміщений корабель Затиснути ЛКМ і перетягнути
Постріл по супернику ЛКМ по клітині ворожої дошки
Вийти в головне меню з будь-якого екрана Esc

🗂️ Структура проєкту

src/org/sea/battle/game/
├── Main.java
├── controller/     # Drag&Drop, обертання кораблів
├── model/          # AI, GameLogic, Player, Ship, Level, ...
├── utils/          # Theme, ProgressStore, SoundManager, ParticleSystem, ...
└── view/           # MainWindow, NavigationManager, усі екрани-панелі

Детальний опис архітектури (єдине вікно + CardLayout + NavigationManager) — у Wiki репозиторію.


💾 Збереження прогресу

Прогрес зберігається локально, без хмари й акаунтів:

~/.seabattle/progress.properties   # монети, розблоковані рівні, скіни
~/.seabattle/stats.properties      # статистика ігор

📄 Ліцензія

Розповсюджується під ліцензією MIT. Деталі — у файлі LICENSE.

About

Sea Battle game built with Java 21 & Swing. Features an 8-level campaign, customizable AI, skin store, and offline progress.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages