-
Notifications
You must be signed in to change notification settings - Fork 3
/
card.c
89 lines (84 loc) · 1.42 KB
/
card.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "holdem.h"
#include "card.h"
static const char *card_string[] = {
"[♥2]",
"[♥3]",
"[♥4]",
"[♥5]",
"[♥6]",
"[♥7]",
"[♥8]",
"[♥9]",
"[♥10]",
"[♥J]",
"[♥Q]",
"[♥K]",
"[♥A]",
"[♠2]",
"[♠3]",
"[♠4]",
"[♠5]",
"[♠6]",
"[♠7]",
"[♠8]",
"[♠9]",
"[♠10]",
"[♠J]",
"[♠Q]",
"[♠K]",
"[♠A]",
"[♦2]",
"[♦3]",
"[♦4]",
"[♦5]",
"[♦6]",
"[♦7]",
"[♦8]",
"[♦9]",
"[♦10]",
"[♦J]",
"[♦Q]",
"[♦K]",
"[♦A]",
"[♣2]",
"[♣3]",
"[♣4]",
"[♣5]",
"[♣6]",
"[♣7]",
"[♣8]",
"[♣9]",
"[♣10]",
"[♣J]",
"[♣Q]",
"[♣K]",
"[♣A]",
};
inline const char *card_to_string(card_t card)
{
return card_string[card];
}
inline void init_deck(deck_t *deck)
{
int i;
srandom(time(NULL));
for (i = 0; i < 52; i++) {
deck->cards[i] = i;
}
deck->end = 52;
}
inline int get_card(deck_t *deck)
{
int index;
if (deck->end == 0) {
return -1;
}
index = random() % (deck->end--);
if (index == deck->end) {
return deck->cards[deck->end];
}
deck->cards[index] ^= deck->cards[deck->end];
deck->cards[deck->end] ^= deck->cards[index];
deck->cards[index] ^= deck->cards[deck->end];
return deck->cards[deck->end];
}