This repository was archived by the owner on Jan 13, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcharacter.cc
executable file
·152 lines (112 loc) · 2.88 KB
/
character.cc
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
#include "character.h"
#include "variable.h"
#include <cmath>
#include <cstdlib>
#include <map>
#include <ctime>
using namespace std;
Character::Character(char type, int r, int c): type(type), maxhp(charMap[type][0]), hp(charMap[type][1]), atk(charMap[type][2]), def(charMap[type][3]), gvalue(charMap[type][4]), potionABS(charMap[type][5]), halfgold(charMap[type][6]), r(r), c(c) {}
Character::~Character(){};
int Character::getAtk(){
return atk;
}
int Character::getDef(){
return def;
}
void Character::setCoordinates(int r, int c){
this->r = r;
this->c = c;
}
int Character::getRow(){
return r;
}
int Character::getGold(){
return halfgold;
}
int Character::getColumn(){
return c;
}
void Character::increaseGold(int n){
halfgold += gvalue * n;
}
void Character::increaseHP(int n){
hp += n;
if (hp < 0) hp = 0;
if (hp > maxhp) hp = maxhp;
}
int Character::getHP(){
return hp;
}
int Character::getPotABS(){
return potionABS;
}
char Character::getType(){
return type;
}
void Character::setType(char type){
this->type = type;
}
Player* Player::instance = NULL;
Player::Player(int r, int c, char type): Character(type, r, c){}
void Player::action(Character* &c){}
void Player::cleanup(){
delete instance;
instance = 0;
}
Player* Player::getInstance(int r, int c, char type){
if(!instance){
instance = new Player(r, c, type);
atexit(cleanup);
}
return instance;
}
bool Player::attack(Character &c){
int damage = ceil((100 * getAtk() / (100 + c.getDef())));
c.increaseHP(-1*damage);
return true;
}
Enemy::Enemy(char type, int r, int c): Character(type, r, c), hostile(charMap[type][7]){}
void Enemy::action(Character* &c){}
bool Enemy::attack(Character &c){
if(hostile == 1 && abs(c.getRow() - getRow()) <= 1 && abs(c.getColumn() - getColumn()) <= 1)
{
srand(time(NULL));
int random = rand() % 2;
int damage = -1;
if (random == 0)
damage = 0;
else if(random == 1)
damage = ceil((100 *getAtk() / (100 + c.getDef())));
c.increaseHP(-1*damage);
return true;
}
return false;
}
void Enemy::changeHostility(){
hostile = 1;
}
Dragon::Dragon(int r, int c, Dhorde* myhorde): Enemy('D', r, c), myhorde(myhorde){}
bool Dragon::attack(Character &c){
int row = c.getRow();
int col = c.getColumn();
int hrow = myhorde->getRow();
int hcol = myhorde->getColumn();
if(abs(hrow - row) <= 1 && abs(hcol - col) <= 1 && abs(getRow() - row) <= 1 && abs(getColumn() - col) <= 1){
srand(time(NULL));
int random = rand() % 2;
int damage = -1;
if (random == 0)
damage = 0;
else if(random == 1)
damage = ceil((100 *getAtk() / (100 + c.getDef())));
c.increaseHP(-1*damage);
return true;
}
return false;
}
void Dragon::notifyHorde(){
myhorde->setNullDragon();
}
Dragon::~Dragon(){
notifyHorde();
}