/* ECP: FILEname=fig9_6.c */ /* 1*/ typedef enum { Heart, Diamond, Club, Space } SuitType; /* 2*/ typedef struct Card /* 3*/ { /* 4*/ unsigned int FaceVal; /* 5*/ SuitType Suit; /* 6*/ } Card; /* 7*/ /* Constants To Allow Multiple Decks */ /* 8*/ #define Decks 1 /* 9*/ #define CardsPerDeck 52 /*10*/ #define TotalCards ( Decks * CardsPerDeck ) /*11*/ #define MinCards 1 /* Minimum Before New Decks Needed */ /*12*/ #include /* 1*/ /* Discard Old Stack Of Cards And get New Cards */ /* 2*/ void /* 3*/ NewDeck( Card SomeCards[ ], const int NumDecks ) /* 4*/ { /* 5*/ int i, j, k; /* 6*/ /* Load Up All The Cards */ /* 7*/ for( i = 0; i < NumDecks; i++ ) /* 8*/ for( j = 0; j < 13; j++ ) /* 9*/ for( k = 0; k < 4; k++ ) /*10*/ { /*11*/ SomeCards[ 52*i + 4*j + k ].Suit = k; /*12*/ SomeCards[ 52*i + 4*j + k ].FaceVal = j + 1; /*13*/ } /*14*/ /* Shuffle */ /*15*/ for( i = 1; i < TotalCards; i++ ) /*16*/ { /*17*/ int RandCard = rand( ) % ( i + 1 ); /* Choose Random */ /*18*/ Card TmpCard = SomeCards[ i ]; /* Card And Swap */ /*19*/ SomeCards[ i ] = SomeCards[ RandCard ]; /*20*/ SomeCards[ RandCard ] = TmpCard; /*21*/ } /*22*/ }