/* DEKMGR.C deck manager */ #include "local.h" #include "bj.h" #include "dekmgr.h" #define NCARDS (4 * 52) static short deck[NCARDS] = {0}; /* the deck */ static short nc = 0; /* subscript of next card */ static short shufpt = 0; /* subscript of shuffle point */ /* deklow - is deck at or past shuffle point ? */ bool deklow() { return (shufpt <= nc); } /* opndck - initialize the deck */ void opndek() { short varnum(); void shuffl(); void srand(); short i; short low; for (low = 0; low < NCARDS; low += 52) for (i = 0; i < 52; ++i) deck[i + low] = i; srand((unsigned)varnum()); shuffl(); } /* shuffl - shuffle the deck */ void shuffl() { short t; /* temporary for swap */ short i; /* index for loop over cards */ short j; /* index for swap */ short nfrom(); /* fn to produce random number */ for (i = 0; i < NCARDS; ++i) { j = nfrom(i, NCARDS - 1); t = deck[j], deck[j] = deck[i], deck[i] = t; } shufpt = nfrom(NCARDS - 52, NCARDS - 36); nc = 0; printf("Shuffle\n"); } /* tkcard - take a card */ short tkcard() { void shuffl(); if (NCARDS <= nc) shuffl(); return(deck[nc++]); } /* varnum - returns a varying startoff number */ short varnum() { int rand(); return((short)rand()); }