Стандартная функция random() описана в заголовочном файле <stdlib.h>, который надо включить в файл CardUmt.cpp командной строкой
#i'nclude <stdlib.h>
Обратите внимание на то, что в этом методе происходит присваивание значений переменных пользовательского класса (TCard). Операция присваивания «=» в отличие от многих других в Си++ определена и для классов. В реальности при выполнении оператора
card = Cards[PACK_TOTAL-1];
происходит простое копирование блока информации, отведенного для переменной Cards[PACK_TOTAL-1], в блок, отведенный для хранения переменной card. А вот такие операции, как «<» или «= =», для пользовательских классов не определены, и их при необходимости надо описывать вручную. В принципе, можно переопределить и оператор «=», но в большинстве случаев это не/гребуется. •
Изъятие карты из колоды
По ходу игры карты из колоды могут изыматься. В действительности они никуда из массива Cards, конечно, не исчезают, только признак Is меняется на false.
«Брать» карты из колоды надо аккуратно — сверху. Для удобства допустим, что верх колоды — это карта с индексом 0. Под ней лежит карта с индексом 1 и т. д. Тогда, чтобы взять из колоды верхнюю карту, надо пробежаться по массиву Cards, начиная с нулевой карты, и проверять признак Is каждой карты. Когда найдена карта с признаком Is, равным true (то есть карта в колоде есть), его надо изменить на противоположной, и прервать цикл, использовав данную карту в качестве возвращаемого методом GetCardQ значения.
А вот если цикл закончился нормально, значит, ни одна карта не имеет признака Is, равного true, то есть ни одной карты в колоде нет. Но это означает, что метод GetCard() вызван откуда-то ошибочно. Об этом желательно сообщить разработчику, показав диалоговое окно с информацией Запрошена карта из пустой колоды. Такую строку не обязательно выделять в отдельный файл с текстовыми константами — ведь это просто информация о внутренней ошибке программы, которая будет полезна только ее создателю.
Кроме того, в конец метода GetCardQ (а он может быть достигнут только по ошибке) надо, тем не менее добавить, оператор return, возвращающий какую-нибудь карту, например, нулевую. Дело в том, что компилятор не может знать
194