-
Notifications
You must be signed in to change notification settings - Fork 0
/
player.cpp
121 lines (99 loc) · 1.97 KB
/
player.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
#include "blackjack.h"
#include "deck.h"
#include "player.h"
/*static*/
Player* Player::Create(void* info)
{
//ToDo: Create a UT version as per info
return new Player();
}
Player::Player()
{
m_CardVal = 0;
m_nCardIdx = PLYR_CARD_IDX_RESET;
m_Cards[m_nCardIdx] = (BYTE) PLYR_CARD_TERM;
//memset(m_Cards, 0, sizeof(m_Cards));
}
Player::~Player()
{
}
int Player::Init()
{
m_CardVal = 0;
m_nCardIdx = PLYR_CARD_IDX_RESET;
m_Cards[m_nCardIdx] = PLYR_CARD_TERM;
return BJ_ERR_SUCCESS;
}
int Player::Hit(BYTE card)
{
if (m_nCardIdx >= (PLYR_MAX_CARDS - 1)) {
return BJ_ERR_PROGRAM_ERR;
}
if (card <= 0) {
return BJ_ERR_PROGRAM_ERR;
}
m_Cards[m_nCardIdx++] = card;
m_Cards[m_nCardIdx] = PLYR_CARD_TERM;
return Score();
}
int Player::Score()
{
const BYTE* hand = GetHand();
BYTE card = 0;
int score = 0;
int aces = 0;
while ((card = (BYTE) *hand) != PLYR_CARD_TERM) {
switch (card) {
case 1:
//got an ace
card = 11;
aces++;
break;
case 11:
case 12:
case 13:
card = 10;
break;
}
score += card;
hand++;
}
while ((score > 21) && (aces > 0)) {
score -= 10;
aces--;
}
return score;
}
int Player::Stand()
{
//Do we have to do anything?
return BJ_ERR_SUCCESS;
}
const BYTE* Player::GetHand()
{
return (const BYTE*) m_Cards;
}
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
///////////////////////////
/*static*/
Dealer* Dealer::Create(void* info)
{
//ToDo: Create a UT version as per info
return new Dealer();
}
Dealer::Dealer()
{
//calls default constructor for ::player
}
Dealer::~Dealer()
{
}
int Dealer::Stand()
{
//dealer cannot not stand
//ToDo: get clarty
return BJ_ERR_PROGRAM_ERR;
}