Морський бій нового покоління — Java Swing, кампанія, магазин, статистика та власний ШІ
Класична настільна гра "Морський бій", переосмислена як повноцінний десктопний застосунок: кампанія з 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 влучань вираховує напрямок і веде вогонь по лінії корабля |
Виконайте ці команди у терміналі для локального запуску проєкту:
git clone https://github.com/JPSSProgramming/sea-battle-game.git
cd sea-battle-gamejavac -encoding UTF-8 -d out $(find src -name "*.java")java -cp out org.sea.battle.game.MainПотрібна JDK 21+. Перевірити версію:
java -version.
Відкрийте папку як 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.