-
Notifications
You must be signed in to change notification settings - Fork 0
/
hand.cpp
128 lines (111 loc) · 2.23 KB
/
hand.cpp
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
#include "hand.h"
#include "card.h"
#include <cstdlib>
#include <algorithm>
#include <random>
#include <chrono>
#include <ctime>
#include <iostream>
Hand::Hand(int given_deck_size)
{
activeCards = static_cast<struct Card**>(malloc(sizeof(struct Card*) * given_deck_size));
wonCards = static_cast<struct Card**>(malloc(sizeof(struct Card*) * given_deck_size));
deckSize = given_deck_size;
endActiveIdx = -1;
endWonIdx = -1;
seed = 0;
}
void Hand::printCards()
{
int i;
std::cout << "Active cards:\n";
for (i = 0; i <= endActiveIdx; i++)
{
std::cout << "Suit: " << (activeCards[i]->suit) << "\tNumber: " << (activeCards[i]->number) << "\n";
}
std::cout << "Won cards:\n";
for (i = 0; i <= endWonIdx; i++)
{
std::cout << "Suit: " << (wonCards[i]->suit) << "\tNumber: " << (wonCards[i]->number) << "\n";
}
}
int Hand::scoreHand()
{
int score{ 0 };
int i;
for (i = 0; i <= endActiveIdx; i++) {
score += wonCards[i]->number;
}
return score;
}
void Hand::AddWonCard(struct Card* card)
{
wonCards[++endWonIdx] = card;
return;
}
void Hand::AddActiveCard(struct Card* card)
{
activeCards[++endActiveIdx] = card;
return;
}
void Hand::ClearCards(void)
{
int i;
for (i = 0; i < deckSize; i++)
{
activeCards[i] = nullptr;
wonCards[i] = nullptr;
}
endActiveIdx = -1;
endWonIdx = -1;
return;
}
void Hand::StartRound()
{
struct Card* card;
card = GetWonCard();
while (card != nullptr)
{
AddActiveCard(card);
card = GetWonCard();
};
Shuffle();
return;
}
int Hand::TotalCards()
{
return (endWonIdx + endActiveIdx + 2);
}
struct Card* Hand::GetActiveCard()
{
if (endActiveIdx > -1)
{
return activeCards[endActiveIdx--];
}
else
{
return nullptr;
}
}
struct Card* Hand::GetWonCard()
{
if (endWonIdx > -1)
{
return wonCards[endWonIdx--];
}
else
{
return nullptr;
}
}
void Hand::Shuffle()
{
if (endActiveIdx > -1) {
seed += 1;
std::shuffle(activeCards, (activeCards + endActiveIdx), std::default_random_engine(seed));
}
}
int Hand::handSize()
{
return endActiveIdx + 1;
}