Skip to content

Latest commit

 

History

History
111 lines (75 loc) · 2.74 KB

File metadata and controls

111 lines (75 loc) · 2.74 KB

CardData

Что это: неизменяемая структура данных одной карты (readonly struct): Suit, Rank, IsJoker, IsRedJoker. Поддержка сравнения и проверки на козырь. Пространство имён/файл в модуле Cards.

Как использовать: создавать через конструктор или из DeckConfig; передавать в ICardView.SetData(CardData, faceUp). См. «Свойства» и «Создание» ниже.


Описание

CardData — readonly struct, представляющий одну карту. Поддерживает сравнение, проверку на козырь и работу с джокерами.


Свойства

Свойство Тип Описание
Suit Suit Масть карты
Rank Rank Ранг (достоинство) карты
IsJoker bool Является ли картой джокером
IsRedJoker bool Красный джокер (true) или чёрный (false)

Создание

// Обычная карта
var aceOfSpades = new CardData(Suit.Spades, Rank.Ace);

// Джокер
var redJoker = CardData.CreateJoker(isRed: true);
var blackJoker = CardData.CreateJoker(isRed: false);

Методы сравнения

CompareTo (для «Пьяницы»)

int result = card1.CompareTo(card2);
// > 0 — card1 старше
// < 0 — card1 младше
// = 0 — равны

Beats (для «Дурака»)

bool beats = defendCard.Beats(attackCard, trump: Suit.Hearts);

Логика:

  • Козырь бьёт не-козырь
  • Не-козырь не бьёт козырь
  • Одинаковая масть — сравнение по рангу
  • Разные масти без козыря — false

CanCover

Алиас для Beats():

bool canCover = card.CanCover(attackCard, trump);

HasSameRank / HasSameSuit

// Для подкидывания в «Дураке»
if (card.HasSameRank(tableCard))
    Debug.Log("Можно подкинуть");

Операторы

// Сравнение по рангу
if (card1 > card2) { }
if (card1 >= card2) { }
if (card1 < card2) { }
if (card1 <= card2) { }

// Равенство
if (card1 == card2) { }
if (card1 != card2) { }

Строковое представление

var card = new CardData(Suit.Hearts, Rank.Queen);

card.ToString();              // "Q♥"
card.ToLongEnglishString();   // "Queen of Hearts"

См. также