10. Обобщение — мать учения
Переменная Suit хранит масть (договоримся, что масти будут нумероваться так: 0 — трефы, 1 — бубны, 2 — червы, 3 — пики). Переменная Value — значение карты (0 — туз, 1 — двойка,..., 9 — десятка,..., 12 — король).
Значение каждой карты изменять во время работы программы некорректно. Правильный подход — исходно сформировать колоду из 52 переменных класса TCard, каждая из которых будет иметь оригинальное значение, которое в дальнейшем менять не потребуется. Поэтому переменные Suit и Value спрятаны в разделе protected — это значит, что извне методов класса TCard к ним обращаться нельзя. Однако надо разрешить считывать их установленные раз и навсегда значения с помощью методов GetSuitQ и GetValueQ. Задавать такие значения будет метод InitQ.
А вот переменная Is размещена в открытой (public) части класса и свободно доступна для изменения. Так сделано для удобства — ведь карты будут постоянно браться из колоды и возвращаться в нее обратно. Переменная Is равна true, если данная карта находится в колоде.
Класс «Колода»
Описание колоды тоже будет достаточно простым:
class TPack
{
private:
TCard Cards[PACK_TOTAL];
public:
TPack() ;
void Shuffles-void AddCard(TCard card) ;
TCard GetCard() ;
TCard GetIndexCard(int i) ;
bool IsCardO ;
};
В классе имеется массив из числа карт, определенноге константой PACK_TOTAL (она будет описана чуть позже). Этот массив извне класса «Колода» недоступен. Конструктор TPackQ создаст колоду, метод ShuffleQ — перетасует , метод GetCardQ вернет верхнюю карту, удалив ее из колоды (на
188