- Українська:
README.md - English:
README.en.md
Цей невеликий додаток являє собою набір з двох настільних ігор "Шахи" і "Шашки".Гра в обох випадках розрахована як і на двох гравців (з одного пристрою) так і на партію з ШІ.Гра має кілька рівнів складності, зручний інтерфейс та цікавий дизайн.
Уся гра — одне повноекранне вікно. Жодних окремих спливаючих вікон під час переходів між меню, кампанією чи боєм — усе перемикається миттєво й плавно.
Мова використана у грі - англійська (для зручності)
| Компонент | Технологія | Деталі та інженерні рішення |
|---|---|---|
| Мова & Платформа | Java 21 (LTS) | Сучасний синтаксис: switch-вирази зі стрілковим синтаксисом, паттерн-матчинг (case KING -> ...) та виведення типів var. |
| Графічний інтерфейс | Pure Java Swing | Zero-Dependency UI: Жодних зовнішніх фреймворків (без JavaFX чи FlatLaf). Архітектура єдиного вікна (AppFrame) з CardLayout для миттєвого перемикання екранів. |
| Дизайн & L&F | Customized Nimbus | Базовий Nimbus LookAndFeel, повністю кастомізований через UIManager для підтримки глибокої темної теми із золотими акцентами. |
| Векторна графіка | Java 2D (Graphics2D) | Кастомне відмалювання UI-елементів з нуля: закруглені кнопки (RoundedButton), картки меню з тінями (MenuCard) та градієнтні фони (GradientPanel). |
| Візуалізація фігур | Native Unicode (Serif) | Фігури малюються шрифтовими символами (♔, ♛, ♜, ♟). Це виключає потребу в растрових ассетах і зберігає чіткість при будь-якій роздільній здатності. |
| Асинхронність | SwingWorker | Фонове виконання складних обчислень штучного інтелекту (Minimax / Negamax з alpha-beta відсіканням) без блокування головного UI-потоку. |
| Збірка проєкту | Direct javac CLI | Збірка напряму через стандартний компілятор Java без конфігураційного оверхеду Maven чи Gradle. |
| Архітектура даних | In-Memory State | Автономний offline-first підхід без прив'язки до баз даних або локальних файлів збереження. |
.
├── src/
│ └── com/
│ └── boardgames/
│ ├── Main.java # Точка входу (запуск AppFrame)
│ │
│ ├── ui/ # Спільні UI-компоненти та стилізація
│ │ ├── AppFrame.java # Єдине вікно застосунку (CardLayout)
│ │ ├── MenuPanel.java # Стартове меню вибору гри
│ │ └── theme/ # Кастомні теми, закруглені кнопки та градієнти
│ │
│ ├── checkers/ # Незалежний модуль: Українські шашки
│ │ ├── model/ # Модель стану (Board, Piece, Move, PlayerColor)
│ │ ├── logic/ # Валідація ходів, обов'язкові взяття, правила
│ │ ├── ai/ # ШІ (Minimax / Negamax з alpha-beta)
│ │ └── ui/ # Отрисовка дошки, діалоги налаштувань
│ │
│ └── chess/ # Незалежний модуль: Класичні шахи
│ ├── model/ # Модель стану (ChessBoard, ChessPiece, Side)
│ ├── logic/ # Шах/мат, рокіровка, en passant, правило 50 ходів
│ ├── ai/ # ШІ (Iterative Deepening, MVV-LVA, фоновий потік)
│ └── ui/ # Отрисовка дошки Unicode-символами, перетворення пішаків
│
├── out/ # Згенеровані .class файли (після компіляції)
└── README.md
Штучний інтелект у грі зроблено у грі дуже якісно, завдяки чому при виборі вищої складності гра стає досить важкою
| Рівень | Глибина / Час | Особливості поведінки |
|---|---|---|
| Новачок | 2 кроки / ~0.3 с | Оцінює лише базовий матеріал; періодично робить випадкові ходи з топ-3 для імітації людських помилок. |
| Легкий | 3–4 кроки / ~0.5 с | Починає враховувати контроль центру та просування пішаків/шашок. |
| Середній | 5–6 кроків / ~1.0 с | Збалансована гра; використовує ітеративне поглиблення (Iterative Deepening). |
| Складний | 7–8 кроків / ~2.5 с | Глибокий аналіз з Alpha-Beta відсіканням та впорядкуванням ходів (MVV-LVA). |
| Експерт | 9+ кроків / ~5.0 с | Максимальна глибина розрахунку з жорстким часовим лімітом для складних позицій. |
- JDK 21 або новіша версія.
# 1. Клонувати репозиторій
git clone https://github.com/JPSSProgramming/chees-game.git
cd board-games
# 2. Запустити застосунок
java -cp out com.boardgames.Main- Гра не зберігає стан партії між перезапусками застосунку (БД - відсутня)
- В поточній версії немає виводу історії ходів (PGN) на екран
- В шахах відсутня автоматична перевірка на трикратне повторення позиції (реалізовано лише правило 50 ходів)
- Перетворення шашки на дамку відбувається після завершення всього ходу, а не посеред ланцюжка взяттів(невелике спрощення)
Розповсюджується під ліцензією MIT. Деталі — у файлі `LICENSE`.