Реализация необходимых классов
о возможных логических ошибках, но он понимает, что данный метод должен возвращать значение типа TCard. Поэтому при компиляции будет получено предупреждение Function should return a value (Функция или метод должны возвращать значение), а предупреждения — это всегда плохо.
TCard TPack::GetCard() { int i;
for( i = 0; i < PACK_TOTAL; i ++ ) if( Cards[i]-Is.) { Cards[i].Is = false;
return Cards[i];
}
ShowMessage("Запрошена карта из пустой колоды");
return Cards[0];
}
Иногда бывает необходимо выяснить, какая карта хранится в некоторой позиции внутри колоды. Этому поможет короткий метод
TCard TPack::GetIndexCard(int i) { return Cards[i]; }
который по индексу 1 возвращает соответствующий элемент массива Cards. По сути, он аналогичен простому обращению к массиву Cards, просто колода скрыта в разделе protected, поэтому напрямую к ней обращаться нельзя.
Добавление карты в колоду
С первого взгляда может показаться, что добавить карту в колоду можно, просто найдя первый элемент массива Cards со значением переменной Is, равным false (не в колоде), и сразу записав в нее переданную в качестве параметра карту. Однако это не так — ведь каждому элементу массива Cards соответствует строго определенная карта с конкретным значением и мастью (например, но индексу 0 располагается туз треф). Поэтому надо поступить по-другому — найти в Cards карту, значение и масть которой совпадает с добавляемой картой, и изменить переменную Is соответствующего элемента на true, после чего прервать цикл (ведь дальше выполнять его не надо, это пустая трата времени) и покинуть метод. А вот если все элементы в
195