ции очередной карты, увеличивая его каждый раз после такой инициализации на единицу.

Итоговый вариант конструктора колоды запишется следующим образом:

TPack::TPack() { int card_num, pack_num, suit, value;

•card_num = 0 ;

. for(pack_num = 0; pack_num < PACK_NUM; pack_num ++) for( suit = 0; suit < SUIT_NUM; suit ++ )

for( value = 0; value < VALUE_NUM; value .++ ) (

// инициализация карты' , Cards[card_num].Init(suit, value);«

// переход к следующей карте card_num ++;

} }

После выполнения конструктора в массиве Cards окажутся 104 упорядоченные по мастям и значениям карты.

Тасуем колоду

В исходном состоянии, после создания объекта класса TPack, колода является упорядоченной, то использовать ее в пасьянсе не имеет смысла — ведь карты в ней идут по порядку, и фактор случайности в игре отсутствует. Поэтому колоду сначала надо перетасовать.

Готовых алгоритмов тасовки карточных колод очень много, но в реальности быстро добиться действительно подлинно случайного порядка последовательности объектов довольно сложно. В нашей программе "мы реализуем не самый оптимальный, но зато очень простой и быстрый алгоритм, суть которого состоит в следующем.

Сто четыре раза (размер двух колод) из общей пачки карт изымается случайная карта и меняется местами с последней (сточетвертой) картой. Как

192