Skip to content
 
 

Latest commit

 

History

47 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Гра "Шашки"

Опис функціональності

🖥️ Інтерфейс користувача (UI)

  1. Головне меню:
    • Вибір стилю: Класичні шашки або Стилізовані
    • Вибір противника (комп'ютер або людина)
    • Вибір кольору шашок (чорні, білі або рандом)
    • Вибір складності (тільки проти комп'ютера)
  2. Меню під час гри:
    • Нова гра
    • Збереження гри (у JSON-файл)
    • Завантаження збереженої гри
    • Турнірний режим
    • Переглянути статистику
    • Скасувати останній хід
    • Вихід з програми
  3. Ігрове поле:
    • Дошка 8x8 з класичними кольорами
    • Відображення шашок обох гравців, у т.ч. дамок
    • Підсвічування можливих ходів вибраної шашки
    • Вказівка, чия черга ходу
    • Окреме оформлення шашок у режимі "Хвостики" (анімована ковбаса та кіт)
  4. Екран завершення гри:
    • Виведення переможця гри
    • Варіанти дій: почати нову гру або вийти з програми

🎯 Ігрова логіка

  1. Початок гри:
    • Ініціалізація поля та розміщення шашок
    • Можливість обрати гравця, який ходить першим
    • Якщо гравець обрав чорні шашки проти AI — AI робить перший хід
  2. Механіка гри:
    • Рух шашок лише по діагоналі
    • Можливість захоплення шашки суперника
    • Автоматичне перетворення в дамку на останньому ряду
    • Обов’язкове взяття: якщо можна "бити" — хід без взяття не дозволяється
    • Дамка може ходити в усіх напрямках по діагоналі, включно з багатоходовими захопленнями
    • Якщо є ще одне захоплення — автоматично надається можливість продовжити комбінацію
    • Чергування ходу між гравцями або гравцем і AI
  3. Завершення гри:
    • Перемога: якщо у суперника немає ходів або немає шашок
    • Нічия при патовій ситуації
  4. Гра з комп'ютером:
    • Реалізовано AI з 4 рівнями складності (легкий, середній, складний, профі)
    • AI надає пріоритет захопленням, багатоходовим комбінаціям, та униканню вразливих позицій

💾 Збереження та завантаження гри

  • Збереження в JSON-файл: поточна дошка, шашки, активний гравець, дамки, хід
  • Завантаження гри: з меню
  • Історія ходів зберігається для можливості їх скасування

🧩 Додаткові функції

  1. Турнірний режим:
    • Вибір кількості ігор (від 2 до 100)
    • Автоматичне чергування партій
    • Підрахунок перемог кожної сторони
    • Завершальний екран з результатом турніру та переможцем
  2. Скасування ходу:
    • Гравець може повернути останній хід
    • У режимі проти AI — відкат двох останніх ходів (гравця та AI)
  3. Ведення статистики:
    • Кількість перемог білих шашок, чорних шашок, нічиїх
    • Сумарний час гри
    • Дата останньої гри
    • Зберігання у файл stats.dat та завантаження
  4. Різні стилі гри:
    • Класичні шашки (чорні та білі)
    • Стиль "Хвостики" (ковбаса та хвостики)
    • Передача стилю

Запуск Локально

Вимоги

  • .NET Framework 4.7.2 або новіше
  • Windows OS

Встановлення

  1. Клонуйте репозиторій
  2. Відкрийте CheckersGame.sln у Visual Studio
  3. Зіберіть і запустіть проект

📐 Programming Principles

Принцип Реалізація Коментар
SRP (Single Responsibility Principle) Game, GameController, GameSaver, MainForm Кожен клас відповідає за свою окрему відповідальність
OCP (Open/Closed Principle) AIService підтримує додавання нових стратегій без змін старих Добре структурований метод GetBestMove()
LSP (Liskov Substitution Principle) Piece, Move використовуються взаємозамінно Всі компоненти гри очікувано поводяться
ISP (Interface Segregation Principle) Класи не мають зайвих методів Інтерфейси не перевантажені
DIP (Dependency Inversion Principle) Частково — залежності створюються в контролері Можна покращити через DI
DRY Clone()12, SaveState() Уникає дублювання логіки
KISS Простий, логічний код Чіткий поділ між UI, логікою та збереженням
YAGNI Впроваджено лише необхідні функції Немає зайвих абстракцій
Encapsulation Поля в Piece, Приватні поля в Board, тощо Доступ лише через методи

🎨 Design Patterns

Патерн Приклад Коментар
MVC (Model-View-Controller) MainForm (View), GameController (Controller), Game, Board (Model) Класична архітектура
Command (спрощений) Undo через GameState Історія команд у стеку
Observer (через події) GameController.OnGameFinished Інформування про завершення гри
Strategy (частково) AI через switch-case по складності Можна винести в окремі класи
Template Method MakeMove() у Game Послідовність дій ходу
Factory (потенційно) Можна винести створення AI за рівнями Ще не реалізовано явно
DTO GameState, MoveInfo, PieceInfo Для передачі даних без поведінки
Singleton (імпліцитний) GameStatistics.LoadFromFile(...) Один об'єкт статистики зберігається/читається

🛠️ Refactoring Techniques

Техніка Приклад Коментар
Extract Method DrawBoard(), DrawPieces(), DrawValidMoves() Полегшення читабельності
Extract Class AIService, GameSaver, TournamentManager Розділення обов'язків
Encapsulate Field _pieces в Board Прямий доступ заборонений
Replace Magic Number Board.Size, CellSize Покращена зрозумілість
DTO (Data Transfer Object) MoveInfo, PieceInfo Для серіалізації
Clone Instead of Manual Copy Piece.Clone(), Board.Clone() Для збереження станів
Use of Stack for Undo _history в Game Проста реалізація історії гри
Early Return if (IsGameOver) return;1234 Зниження вкладеності

📌 Рекомендації

  • 🔁 Впровадити DI-контейнер (наприклад Autofac або Microsoft.Extensions.DependencyInjection)
  • ♟️ Винести логіку AI по рівнях у окремі стратегії (Strategy Pattern)
  • 🏭 Використати Factory Pattern для створення AI, гри, налаштувань
  • 📊 Можна реалізувати Observer/EventAggregator для розширення подій

🔢 Code Stats

Кількість рядків коду


📸 Скріншоти

🎮 Головне меню гри (Нова гра)

Головне меню

♟️ Ігрове поле (класичний стиль)

Ігрове поле — класика

🐾 Ігрове поле (стиль "Хвостики")

Ігрове поле — хвостики

🗂️ Вигляд меню під час гри

Меню під час гри

✨ Підсвічування ходу шашки

Підсвічування ходу шашки

🥇 Виведення переможця

Переможець

📊 Статистика гравця

Статистика

🛠️ Налаштування турніру

Налаштування

🏆 Проведення турніру

Турнір

🏁 Завершення турніру

Результати турніру

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages