Skip to content
 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

##Проєкт складається з двох частин:

  • ClassLibrary – містить всю ігрову логіку, моделі та сервіси.
  • WindowsFormsBlackjack – графічний інтерфейс користувача (Windows Forms).

##ClassLibrary – Логіка гри

###Моделі

  • CardData – збережена інформація про карту (Value, Suit).
  • GameSaveData – стан гри: руки, баланси, поточна ставка, стан гри.

###Гравець (Player)

  • Властивості:
    • Hand, Hands
    • Balance, CurrentBet
  • Методи:
    • PlaceBet(float)
    • WinBet(), LoseBet(), ReturnBet()
    • DoubleBet()
    • SplitHand()
    • ReceiveCard(Card)
    • ResetHand()

Сервіси

ScoreService

  • CalculateScore(Player) – обрахунок очок з урахуванням тузів.
  • IsBust(Player) – перевірка на перевищення 21.

WinEvaluator

  • GetWinner(Player, Dealer) – визначення переможця (Player, Dealer або Tie).

Енумерації

  • PlayerActionHit, Stand, Double, Split
  • GameResultPlayerWin, DealerWin, Tie, PlayerBust, DealerBust
  • GameStateNotStarted, WaitingForBet, PlayerTurn, DealerTurn, GameOver, ...

Збереження гри

GameSaver

  • Save(GameManager)
  • Load(): GameSaveData
  • DeleteSave()

Зберігає гру у savegame.json через System.Text.Json.

Візуальні карти

SpriteCard : PictureBox

  • Методи:
    • Flip()
    • SetCard(string)
    • SetFaceUp(bool)

WindowsFormsBlackjack – Графічний інтерфейс

Основна форма

  • Ініціалізація компонентів: GameManager, CardAnimator, GameSaver.
  • Завантаження збереженої гри.
  • Події:
    • OnGameStateChangedUpdateUI()
    • OnGameEndedHandleGameEnd()

Керування грою

  • Кнопки:
    • Hit, Stand, Double, Split, Start
  • Панелі:
    • GamePanel – відображення карт.
    • panelWinDesk – результат гри.

Особливості

  • ✅ Збереження/завантаження стану гри (.json)
  • ✅ Анімація
  • ✅ Можливість легкої модифікації завдяки UI

Зображення

image

Принципи програмування

Проєкт дотримується низки принципів програмування, що забезпечують чистий, підтримуваний та ефективний код:

SOLID

  • Принцип єдиної відповідальності (SRP)
    Кожен клас виконує лише одну роль: Player управляє станом гравця, ScoreService відповідає за обчислення очок, а GameSaver — за збереження гри.

  • Принцип відкритості/закритості (OCP)
    Класи можна розширювати без зміни наявного коду. Наприклад, додавання нових бонусів не потребує змін у ScoreService — достатньо нової реалізації.

  • Принцип підстановки Лісков (LSP)
    Усі похідні класи (наприклад, SpriteCard, що наслідує PictureBox) можуть замінювати базові без порушення логіки — це гарантує коректність при взаємодії з UI.

  • Принцип розділення інтерфейсу (ISP)
    Інтерфейси створюються вузькоспеціалізованими (наприклад, ICardAnimator, IGameSaver), що дозволяє класам реалізовувати лише необхідні методи.

  • Принцип інверсії залежностей (DIP)
    Класи вищого рівня (наприклад, Form1) не залежать напряму від реалізацій, а використовують абстракції (сервіси GameSaver, ScoreService), що полегшує модульність та тестування.

DRY (Don't Repeat Yourself — Не повторюй себе)

  • Повторюваний код винесено в окремі сервіси: анімація карт — в CardAnimator, логіка очок — у ScoreService, збереження — у GameSaver.

KISS (Keep It Simple, Stupid — Спрощуй)

  • Структура проста та очевидна: логіка і UI розділені, кожен клас має чітке призначення.

YAGNI (You Aren't Gonna Need It — Тобі це не знадобиться)

  • Реалізовано лише необхідні функції для гри у Blackjack: базові правила, анімації, збереження гри. Функціонал на майбутнє не додається передчасно.

Шаблони проєктування

У проєкті реалізовано кілька класичних шаблонів проєктування для зручності розширення та повторного використання:

Factory Method (Фабричний метод)

  • Створення колоди відбувається централізовано через DeckService, що дозволяє змінювати логіку ініціалізації (наприклад, додати джокери) без змін в UI.

Strategy (Стратегія)

  • Логіка оцінки виграшу (WinEvaluator) може бути замінена на іншу реалізацію (наприклад, для гри за іншими правилами) без зміни основного коду гри.

Singleton (Одинак)

  • Деякі сервіси можуть поводитися як одинак (наприклад, GameSaver або Logger), забезпечуючи глобальний доступ до єдиного екземпляра.

Observer (Спостерігач, через події)

  • Клас GameManager повідомляє інші компоненти про зміну стану гри через події (наприклад, OnGameStateChanged, OnGameEnded), що дозволяє розділити логіку та UI.

Model-View-Controller (MVC)

  • Model — логіка гри в окремій бібліотеці ClassLibrary.
  • View — інтерфейс користувача, реалізований у WindowsFormsBlackjack (Form1, SpriteCard).
  • Controller — клас GameManager, який обробляє дії користувача та оновлює стан моделі та уявлення.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages