Алгоритм тасования карт в карточных играх компании Microsoft. Данный алгоритм написан на языке программирования С++ и реализован в среде программирования Microsoft Visual C++.
Code
#define BLACK 0 // COLOUR(card)
#define RED 1
#define ACE 0 // VALUE(card)
#define DEUCE 1
#define CLUB 0 // SUIT(card)
#define DIAMOND 1
#define HEART 2
#define SPADE 3
#define SUIT(card) ((card) % 4)
#define VALUE(card) ((card) / 4)
#define COLOUR(card) (SUIT(card) == DIAMOND || SUIT(card) ==HEART)
#define MAXPOS 21
#define MAXCOL 9 // includes top row as column 0
CARD card[MAXCOL][MAXPOS]; // current layout of cards, CARDs are
ints
{
int i, j; // generic counters
int col, pos;
int wLeft = 52; // cards left to be chosen in shuffle
CARD deck[52]; // deck of 52 unique cards
for (col = 0; col < MAXCOL; col++) // clear the deck
for (pos = 0; pos < MAXPOS; pos++)
card[col][pos] = EMPTY;
/* shuffle cards */
for (i = 0; i < 52; i++) // put unique card in each deck loc.
deck[i] = i;
srand(gamenumber); // gamenumber is seed for rand()
for (i = 0; i < 52; i++)
{
j = rand() % wLeft;
card[(i%8)+1][i/8] = deck[j];
deck[j] = deck[--wLeft];
}
}