-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCharacter.cpp
More file actions
220 lines (182 loc) · 4.96 KB
/
Copy pathCharacter.cpp
File metadata and controls
220 lines (182 loc) · 4.96 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
/************************************************************
** Author: Peter Nguyen
** CS162-400, Assignment 4
** Date: 5/22/15
** Description: Character abstract class implementation file
************************************************************/
#include "Character.hpp"
#include <cstdlib>
#include <ctime>
#include <string>
#include <iostream>
using std::cout;
using std::string;
/************************************************************
** Character::combat
** Description: Loops combat between an attacker and
** defender until one of them dies; returns the winner
** Parameters: Character& defender
************************************************************/
Character* Character::combat(Character* defender)
{
int damage = 0, // Damage taken by defender
attk = 0, // Attack roll of current attacker
updateStrPts = 0, // Strength points minus damage
round = 1; // Current round
cout << "\n**************** " << getName() << " vs. ";
cout << defender->getName() << " ****************\n\n";
// Loop while attacker and defender are alive
while ( (getStrengthPts() > 0) &&
(defender->getStrengthPts() > 0) )
{
cout << "- ROUND " << round << " -\n";
round++;
// Attacker attacks, update defender's strength points
attk = attack(defender);
cout << "> " << getName() << " attacks ";
cout << defender->getName();
cout << " (Attack: " << attk << ")\n";
damage = defender->defense(attk);
updateStrPts = defender->getStrengthPts() - damage;
defender->setStrengthPts(updateStrPts);
cout << defender->getName() << " takes ";
cout << damage << " damage (" << updateStrPts;
cout << " strength points remaining)\n\n";
if (defender->getStrengthPts() > 0)
{
// Defender attacks, update attacker's strength points
attk = defender->attack(defender);
cout << "> " << defender->getName() << " attacks ";
cout << getName();
cout << " (Attack: " << attk << ")\n";
damage = defense(attk);
updateStrPts = getStrengthPts() - damage;
setStrengthPts(updateStrPts);
cout << getName() << " takes ";
cout << damage << " damage (" << updateStrPts;
cout << " strength points remaining)\n\n";
}
}
// Declare and return the winner
if (defender->getStrengthPts() <= 0)
{
cout << "* " << defender->getName() << " is killed!\n";
cout << "* " << getName() << " wins!\n\n";
return this;
}
else
{
cout << "* " << getName() << " is defeated!\n";
cout << "* " << defender->getName() << " wins!\n\n";
return defender;
}
}
/************************************************************
** Character::rollDice
** Description: Returns a random die roll depending on the
** number of sides of the die
** Parameters: int numSides
************************************************************/
int Character::rollDice(int numSides)
{
int roll = 0;
static int seedIncrement = 0;
unsigned seed;
seed = time(0) + seedIncrement++; // Ensures a different
srand(seed); // seed value each time
// function is called
roll = rand() % numSides + 1;
return roll;
}
/************************************************************
** Character::heal
** Description: Restores 5 strength points
** Parameters: none
************************************************************/
void Character::heal()
{
int restorePoints = 0;
restorePoints = getStrengthPts() + 5;
// Cap healing at Character's max strength points
if (restorePoints > strengthDefault)
restorePoints = strengthDefault;
setStrengthPts(restorePoints);
}
/******* Set function definitions *******/
void Character::setName(std::string nme)
{
name = nme;
}
void Character::setType(Creature tp)
{
type = tp;
}
void Character::setStrengthPts(int str)
{
strengthPts = str;
}
void Character::setAttackDice(int attkD)
{
attackDice = attkD;
}
void Character::setAttackSides(int attkS)
{
attackSides = attkS;
}
void Character::setDefenseDice(int defD)
{
defenseDice = defD;
}
void Character::setDefenseSides(int defS)
{
defenseSides = defS;
}
void Character::setArmor(int arm)
{
armor = arm;
}
void Character::setTourneyPts(int tp)
{
tourneyPoints = tp;
}
/******* Get function definitions *******/
std::string Character::getName()
{
return name;
}
Creature Character::getType()
{
return type;
}
int Character::getStrengthPts()
{
return strengthPts;
}
int Character::getAttackDice()
{
return attackDice;
}
int Character::getAttackSides()
{
return attackSides;
}
int Character::getDefenseDice()
{
return defenseDice;
}
int Character::getDefenseSides()
{
return defenseSides;
}
int Character::getArmor()
{
return armor;
}
int Character::getStrengthDef()
{
return strengthDefault;
}
int Character::getTourneyPts()
{
return tourneyPoints;
}