1: /*
2: * Copyright (c) 1980 Regents of the University of California.
3: * All rights reserved. The Berkeley software License Agreement
4: * specifies the terms and conditions for redistribution.
5: */
6:
7: #ifndef lint
8: static char sccsid[] = "@(#)cards.c 5.1 (Berkeley) 5/30/85";
9: #endif not lint
10:
11: #include <stdio.h>
12: #include "deck.h"
13:
14:
15: /*
16: * initialize a deck of cards to contain one of each type
17: */
18:
19: makedeck( d )
20:
21: CARD d[];
22: {
23: register int i, j, k;
24: long time();
25:
26: i = time( (long *) 0 );
27: i = ( (i&0xff) << 8 ) | ( (i >> 8)&0xff ) | 1;
28: srand( i );
29: k = 0;
30: for( i = 0; i < RANKS; i++ ) {
31: for( j = 0; j < SUITS; j++ ) {
32: d[k].suit = j;
33: d[k++].rank = i;
34: }
35: }
36: }
37:
38:
39:
40: /*
41: * given a deck of cards, shuffle it -- i.e. randomize it
42: * see Knuth, vol. 2, page 125
43: */
44:
45: shuffle( d )
46:
47: CARD d[];
48: {
49: register int j, k;
50: CARD c;
51:
52: for( j = CARDS; j > 0; --j ) {
53: k = ( rand() >> 4 ) % j; /* random 0 <= k < j */
54: c = d[j - 1]; /* exchange (j - 1) and k */
55: d[j - 1] = d[k];
56: d[k] = c;
57: }
58: }
59:
60:
61:
62: /*
63: * return true if the two cards are equal...
64: */
65:
66: eq( a, b )
67:
68: CARD a, b;
69: {
70: return( ( a.rank == b.rank ) && ( a.suit == b.suit ) );
71: }
72:
73:
74:
75: /*
76: * isone returns TRUE if a is in the set of cards b
77: */
78:
79: isone( a, b, n )
80:
81: CARD a, b[];
82: int n;
83: {
84: register int i;
85:
86: for( i = 0; i < n; i++ ) {
87: if( eq( a, b[i] ) ) return( TRUE );
88: }
89: return( FALSE );
90: }
91:
92:
93:
94: /*
95: * remove the card a from the deck d of n cards
96: */
97:
98: remove( a, d, n )
99:
100: CARD a, d[];
101: int n;
102: {
103: register int i, j;
104:
105: j = 0;
106: for( i = 0; i < n; i++ ) {
107: if( !eq( a, d[i] ) ) d[j++] = d[i];
108: }
109: if( j < n ) d[j].suit = d[j].rank = EMPTY;
110: }
111:
112:
113:
114: /*
115: * sorthand:
116: * Sort a hand of n cards
117: */
118: sorthand(h, n)
119: register CARD h[];
120: int n;
121: {
122: register CARD *cp, *endp;
123: CARD c;
124:
125: for (endp = &h[n]; h < endp - 1; h++)
126: for (cp = h + 1; cp < endp; cp++)
127: if ((cp->rank < h->rank) ||
128: (cp->rank == h->rank && cp->suit < h->suit)) {
129: c = *h;
130: *h = *cp;
131: *cp = c;
132: }
133: }
Defined functions
eq
defined in line
66; used 2 times
isone
defined in line
79; used 1 times
remove
defined in line
98; used 11 times
Defined variables
sccsid
defined in line
8;
never used