ции очередной карты, увеличивая его каждый раз после такой инициализации на единицу.
Итоговый вариант конструктора колоды запишется следующим образом:
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