-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathHuman.cpp
More file actions
329 lines (313 loc) · 8.61 KB
/
Human.cpp
File metadata and controls
329 lines (313 loc) · 8.61 KB
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
#include "stdafx.h"
#include ".\human.h"
/************************
Andre Vernon
Spades Program
HUMAN HEADER FILE
************************/
/*
-A check of no face cards and no spades
(bool playableHand)
[if( suit == 4 or card > 10 or card == 11) playable = true;
-All players have a turn
(bool myTurn)
[if(firstHand == true) user is first
else if( the player that won that hand
public:
Human();
Human(int seat);
~Human();
//------------------------------------------VIRTUALS--------------------------------------------------------------//
//ALL VOID VIRTUAL FUNCTIONS
virtual void setBid();
virtual void setCollectTrick(vector<Card*>& cardsWon);
virtual void setPlayACard();
Virtual void setPlayACard(Card* c)
virtual void print();
//ALL RETURNING A VALUE VIRTUAL FUNCTIONS
virtual int getBid();
virtual void getPlayACard();
virtual vector<Card*>& getCollectTrick(int trickNum);
private:
int p_BidNum;
Card* p_Card2play;
vector<vector<Card*>*> p_CardsWon;
int p_TricksWon;
*/
/************************************************************************************/
/*****************************
NAME: Human
FUNCTION: CONSTRUCTOR
TYPE: HUMAN CONSTRUCTOR
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
Human::Human()
: Player(),
p_TricksWon(0),
p_BidNum(0)
{}
/************************************************************************************/
/*****************************
NAME: Human
FUNCTION: CONSTRUCTOR WITH SEAT
TYPE: HUMAN CONSTRUCTOR
ARGUEMENTS: seat -HOLDS PLAYER POSITION AT GAME TABLE
RETURNS: NONE
******************************/
Human::Human(int seat)
: Player(seat),
p_TricksWon(0),
p_BidNum(0)
{}
/************************************************************************************/
/*****************************
NAME: ~Human
FUNCTION: DECONSTRUCTS
TYPE: HUMAN DECONSTRUCTOR
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
Human::~Human()
{};
/************************************************************************************/
/*****************************
NAME: setBidToZero
FUNCTION: SETS BIDS TO ZERO
TYPE: VOID
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
void Human::setBidToZero()
{
p_BidNum = 0; //SETS BID AT DESIRED NUMBER
}
/************************************************************************************/
/*****************************
NAME: setBid
FUNCTION: SETS BID EQUAL TO A NUMBER
TYPE: VOID
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
void Human::setBid()
{
string BidInput = "400";
cout << "What is your bid (*maximum is 13*): ";
while(true)
{
getline(cin, BidInput);
stringstream mystream(BidInput);
//cout << "Enter exit";
//cin >> mystream; //2021/05/12 CAUSES AN OPPERATOR ERROR
if(BidInput == "exit")//mystream == "exit" || mystream == "EXIT") //IF THE PLAYER TYPES "EXIT" THEN THE PROGRAM WILL CLOSE
{
exit(1);
}
else if(mystream >> p_BidNum)
{
if(p_BidNum < 14)
{
break;
}
else
{
cout << "Sorry you have input an invalid number for your bid." << endl;
cout << "Please try again." << endl;
system("pause");
system("cls");
}
}
}
}
/************************************************************************************/
/*****************************
NAME: setCollectTrick
FUNCTION: COLLECTS CARDS THAT USER HAS WON
TYPE: VOID
ARGUEMENTS: cardWon - HOLDS ADDRESS OF 4 CARD POINTERS
RETURNS: NONE
******************************/
void Human::setCollectTrick(vector<Card*>& cardsWon)
{
p_CardsWon.push_back(&cardsWon);
p_TricksWon++;
}
/************************************************************************************/
/*****************************
NAME: setTrickCountToZero
FUNCTION: CLEARS THE VECTOR OF CARD POINTERS
TYPE: VOID
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
void Human::setTrickCountToZero()
{
p_CardsWon.resize(0);
}
/************************************************************************************/
/*****************************
NAME: print
FUNCTION: DISPLAYS ON SCREEN USER HAS BEEN CREATED
TYPE: VOID
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
void Human::print()
{
cout << "I AM HUMAN... BORN TO DESTROY ALL SENTINAL BEINGS IN SPADES." << endl;
}
/************************************************************************************/
/*****************************
NAME: getBid
FUNCTION: RETRIEVES THE BID OF A PLAYER
TYPE: INT
ARGUEMENTS: NONE
RETURNS: p_BidNum -RETRIEVES THE BID OF A PLAYER
******************************/
int Human::getBid()
{
return p_BidNum;
}
/************************************************************************************/
/*****************************
NAME: setPlayACard
FUNCTION: FUNCTION CALLED WHEN LEADING TO PLAY A CARD
TYPE: VOID
ARGUEMENTS: NONE
RETURNS: NONE
******************************/
void Human::setPlayACard()
{
bool HaveCard = false;
string suitOfcard = "love";
string cardValue;
cout << "Which card would you lead with to play: ";
cin >> suitOfcard >> cardValue;
_strupr_s((char*)suitOfcard.c_str(), suitOfcard.size()+1); //TAKES THE STRING OF suitOfcard AND MAKES IT UPPERCASE
if(suitOfcard == "EXIT") //IF THE PLAYER TYPES "EXIT" THEN THE PROGRAM WILL CLOSE
{
exit(1);
}
if(cardValue == "exit")
{
exit(1);
}
else if(cardValue == "ace" || cardValue == "ACE")
{
cardValue = "Ace";
}
else if(cardValue == "king" || cardValue == "KING")
{
cardValue = "King";
}
else if(cardValue == "queen" || cardValue == "QUEEN")
{
cardValue = "Queen";
}
else if(cardValue == "jack" || cardValue == "JACK")
{
cardValue = "Jack";
}
for(unsigned int i = 0; i < getHand().size(); i++)
{
if(getHand()[i]->getSuitOfCard() == suitOfcard && //IF THIS HAND HAS ANY IN THAT SUIT
getHand()[i]->getValueOfCard() == cardValue && //IF SUIT HAS ANY OF THAT VALUE
!getHand()[i]->getBeenPlayed()) //IF THE CARD HASN'T BEEN PLAYED
{
HaveCard = true;
getHand()[i]->setbeenPlayed(HaveCard);
p_Card2play = getHand()[i]; //HAVE THIS CARD EQUAL THE CARD THAT IS DESIRED TO PLAY
break;
}
}
if(!HaveCard)
{
cout << ">>>> Could not locate card <<<<\n Card could've been played or is not in this hand.\n Please lead with a different card. d(^_^o)\n" << endl;
setPlayACard();
}
}
/************************************************************************************/
/*****************************
NAME: setPlayACard
FUNCTION: GIVES THE NUMBER OF A CARD IN THE GROUP-USED
WHEN NOT LEADING TO PLAY A CARD
TYPE: VOID
ARGUEMENTS: c -POINTER TO SET'S LEADING PLAYER'S CARD
RETURNS: NONE
******************************/
void Human::setPlayACard(Card* c)
{
bool HaveCard = false;
string suitOfcard;
string cardValue;
cout << "Choose a card: ";
cin >> suitOfcard >> cardValue;
strupr((char *) suitOfcard.c_str());
if(suitOfcard == "EXIT")
{
exit(1);
}
if(cardValue == "exit")
{
exit(1);
}
else if(cardValue == "ace" || cardValue == "ACE")
{
cardValue = "Ace";
}
else if(cardValue == "king" || cardValue == "KING")
{
cardValue = "King";
}
else if(cardValue == "queen" || cardValue == "QUEEN")
{
cardValue = "Queen";
}
else if(cardValue == "jack" || cardValue == "JACK")
{
cardValue = "Jack";
}
for(unsigned int i = 0; i < getHand().size(); i++)
{
if(getHand()[i]->getSuitOfCard() == suitOfcard && //IF THIS HAND HAS ANY IN THAT SUIT
getHand()[i]->getValueOfCard() == cardValue && //IF SUIT HAS ANY OF THAT VALUE
!getHand()[i]->getBeenPlayed()) //IF THE CARD HASN'T BEEN PLAYED
{
HaveCard = true;
getHand()[i]->setbeenPlayed(HaveCard);
p_Card2play = getHand()[i]; //HAVE THIS CARD EQUAL THE CARD THAT IS DESIRED TO PLAY
break;
}
}
if(!HaveCard)
{
cout << ">>>> Could not locate card <<<<\n Card could've been played or is not in this hand.\n Please select again. d(^_^o)\n" << endl;
setPlayACard(c);
}
}
/************************************************************************************/
/*****************************
NAME: getCollectTrick
FUNCTION: THIS IS A POINTER TO THE COLLECTION
OF CARDS THE PLAYER HAS WON
TYPE: VECTOR POINTER OF A VECTOR OF CARD POINTERS
ARGUEMENTS: NONE
RETURNS: p_CardsWon - RETURNS THE A DOUBLE VECTOR
******************************/
vector< vector<Card*> *> Human::getCollectTrick()
{
return p_CardsWon;
}
/************************************************************************************/
/*****************************
NAME: getPlayACard
FUNCTION: RETURNS THE CARD CHOSEN BY THE USER
TYPE: CARD POINTER
ARGUEMENTS: NONE
RETURNS: p_Card2play - RETURNS A POINTER OF A CARD
******************************/
Card* Human::getPlayACard()
{
return p_Card2play;
}