Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
zmx0142857
GitHub Repository: zmx0142857/mini-games
Path: blob/master/c/poker/0.1/poker-0-1.cpp
363 views
1
/*
2
Name: Poker_0.1
3
Author: zmx0142857
4
Copyright:
5
Link:
6
Description: simple card game program
7
8
Use index:
9
<back> 0
10
♥ A~K: 1 ~ 13
11
♦ A~K: 14 ~ 26
12
♣ A~K: 27 ~ 39
13
♠ A~K: 40 ~ 52
14
Joker: 53 ~ 54
15
16
Use margin:
17
18
╓──────┐
19
║A │
20
║♠ │
21
║ │
22
║ │
23
╙──────┘
24
*/
25
26
#include <iostream>
27
#include <stdexcept>
28
#include <cstdlib>
29
using namespace std;
30
31
class Poker;
32
class Card
33
{
34
friend class Poker;
35
friend ostream& operator<<(ostream &, const Card &);
36
37
public:
38
Card(char d, bool v = true): data(d), visible(v)
39
{ if (d < 1 || d > 54) throw invalid_argument("No such card!"); }
40
41
char color() const;
42
43
private:
44
// function member
45
Card(const Card &); // class Card is uncopyable
46
Card& operator=(const Card &);
47
char index() const;
48
49
// static member
50
static const char style_ascii[15*9][11];
51
52
// data member
53
char data;
54
bool visible;
55
};
56
57
class Poker
58
{
59
typedef Card Deck[54];
60
61
friend bool operator==(const Card &, const Card &);
62
friend bool operator!=(const Card &, const Card &);
63
friend bool operator<(const Card &, const Card &);
64
friend bool operator>(const Card &, const Card &);
65
friend bool operator<=(const Card &, const Card &);
66
friend bool operator>=(const Card &, const Card &);
67
68
public:
69
Poker()
70
71
private:
72
char value(Card) const;
73
74
Deck data;
75
76
};
77
78
//----------Initialize Static Const Member------------
79
80
const char Card::style_ascii[15*9][11] = { // 15 cards, height = 9, width = 11
81
82
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
83
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
84
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
85
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
86
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
87
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
88
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
89
{'|', ' ', '@', '@', '@', '@', '@', '@', '@', ' ', '|' },
90
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '_', '|' },
91
92
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
93
{'|', 'A', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
94
{'|', '$', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
95
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
96
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
97
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
98
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
99
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
100
{'|', '_', '_', '_', '_', '_', '_', '_', '_', 'A', '|' },
101
102
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
103
{'|', '2', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
104
{'|', '$', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
105
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
106
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
107
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
108
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
109
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
110
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '2', '|' },
111
112
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
113
{'|', '3', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
114
{'|', '$', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
115
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
116
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
117
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
118
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
119
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
120
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '3', '|' },
121
122
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
123
{'|', '4', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
124
{'|', '$', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
125
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
126
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
127
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
128
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
129
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
130
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '4', '|' },
131
132
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
133
{'|', '5', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
134
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
135
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
136
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
137
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
138
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
139
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
140
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '5', '|' },
141
142
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
143
{'|', '6', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
144
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
145
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
146
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
147
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
148
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
149
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
150
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '6', '|' },
151
152
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
153
{'|', '7', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
154
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
155
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
156
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
157
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
158
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
159
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
160
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '7', '|' },
161
162
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
163
{'|', '8', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
164
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
165
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
166
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
167
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
168
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
169
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
170
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '8', '|' },
171
172
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
173
{'|', '9', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
174
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
175
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
176
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
177
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
178
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
179
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', '$', '|' },
180
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '9', '|' },
181
182
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
183
{'|', '1', '0', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
184
{'|', '$', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
185
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
186
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
187
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', ' ', '|' },
188
{'|', ' ', ' ', ' ', ' ', '$', ' ', ' ', ' ', ' ', '|' },
189
{'|', ' ', ' ', '$', ' ', ' ', ' ', '$', ' ', '$', '|' },
190
{'|', '_', '_', '_', '_', '_', '_', '_', '1', '0', '|' },
191
192
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
193
{'|', 'J', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
194
{'|', '$', ' ', '|', ' ', '+', '+', ' ', ' ', ' ', '|' },
195
{'|', ' ', ' ', '|', '(', '\"',',', ')', ' ', ' ', '|' },
196
{'|', ' ', ' ', 'C', '/', ' ', ' ', '\\','7', ' ', '|' },
197
{'|', ' ', ' ', '/', '_', '_', '_', '_', '\\',' ', '|' },
198
{'|', ' ', ' ', '|', '|', ' ', ' ', '|', ' ', ' ', '|' },
199
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
200
{'|', '_', '_', '_', '_', '_', '_', '_', '_', 'J', '|' },
201
202
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
203
{'|', 'Q', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
204
{'|', '$', ' ', ' ', ' ', '@', '@', '@', ' ', ' ', '|' },
205
{'|', ' ', ' ', ' ', '(', '"', ',', '@', '@', ' ', '|' },
206
{'|', ' ', ' ', '*', '/', ' ', ' ', '\\','7', ' ', '|' },
207
{'|', ' ', ' ', '/', '_', '_', '_', '_', '\\',' ', '|' },
208
{'|', ' ', ' ', ' ', '|', ' ', ' ', '|', ' ', ' ', '|' },
209
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
210
{'|', '_', '_', '_', '_', '_', '_', '_', '_', 'Q', '|' },
211
212
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
213
{'|', 'K', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
214
{'|', '$', ' ', '|', ' ', 'w', 'w', ' ', ' ', ' ', '|' },
215
{'|', ' ', ' ', '|', '(', '"', ',', ')', ' ', ' ', '|' },
216
{'|', ' ', ' ', 'T', '/', ' ', ' ', '\\','7', ' ', '|' },
217
{'|', ' ', ' ', '/', '_', '_', '_', '_', '\\',' ', '|' },
218
{'|', ' ', ' ', ' ', '|', ' ', ' ', '|', ' ', ' ', '|' },
219
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '$', '|' },
220
{'|', '_', '_', '_', '_', '_', '_', '_', '_', 'K', '|' },
221
222
{' ', '_', '_', '_', '_', '_', '_', '_', '_', '_', '\0'},
223
{'|', 'J', 'o', 'k', 'e', 'r', ' ', ' ', ' ', ' ', '|' },
224
{'|', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', '|' },
225
{'|', ' ', ' ', ' ', '\\','A', '/', ' ', ' ', ' ', '|' },
226
{'|', ' ', ' ', '_', '(','\x81',')', '$', ' ', ' ', '|' },
227
{'|', ' ', ' ', ' ', 'V', 'I', 'V', ' ', ' ', ' ', '|' },
228
{'|', ' ', ' ', ' ', '/', ' ', '\\',' ', ' ', ' ', '|' },
229
{'|', ' ', ' ', 'J', ' ', ' ', ' ', 'L', ' ', ' ', '|' },
230
{'|', '_', '_', '_', '_', '_', '_', '_', '_', '_', '|' },
231
232
};
233
234
//---------Methods--------------
235
236
char Card::color() const
237
{
238
switch (data)
239
{
240
case 53:
241
return 6; // ♠
242
case 54:
243
return 3; // ♥
244
default:
245
return (data - 1) / 13 + 3;
246
}
247
}
248
249
char Card::index() const
250
{
251
switch (data)
252
{
253
case 53: case 54:
254
return 14;
255
default:
256
return (data - 1) % 13 + 1;
257
}
258
}
259
260
//---------------Friends------------------
261
262
ostream& operator<<(ostream &os, const Card &cd)
263
{
264
const char val = (cd.visible ? 9 * cd.index() : 0);
265
for (size_t i = 0; i != 9; ++i)
266
{
267
for (size_t j = 0; j != 11; ++j)
268
{
269
if (Card::style_ascii[val + i][j] == '$')
270
os << cd.color();
271
else
272
os << Card::style_ascii[val + i][j];
273
}
274
os << '\n';
275
}
276
return os;
277
}
278
279
int main()
280
{
281
system("mode con cp select=437");
282
system("cls");
283
284
int demand;
285
while (cin >> demand)
286
try
287
{
288
cout << Card(demand);
289
}
290
catch (invalid_argument err)
291
{
292
cerr << err.what() << endl;
293
}
294
295
return 0;
296
}
297
298