forked from JohnAnthony/TROG
-
Notifications
You must be signed in to change notification settings - Fork 0
/
enemy.cpp
83 lines (72 loc) · 1.81 KB
/
enemy.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
#include "geometry.hpp"
#include "gui.hpp"
#include <sstream>
#include <ncurses.h>
#include <cstdlib>
Enemy::Enemy(void) {}
Enemy::Enemy(unsigned int inLVL, char inSymbol, Color inCol, int inSight,
int hp, int mp, int str, int tou, int att, int def, int mag, int wil,
int inMV, unsigned int inXP, const char *inName, const char *inDescript) {
this->symbol = inSymbol;
this->colour = inCol;
this->sight_range = inSight;
this->maxHP = this->curHP = hp;
this->MP = mp;
this->STR = str;
this->TOU = tou;
this->ATT = att;
this->DEF = def;
this->MAG = mag;
this->WIL = wil;
this->mv_cost = inMV;
this->XP_value = inXP;
this->name = inName;
this->descriptor = inDescript;
this->isActive = false;
this->mv_energy = 0;
this->Level = inLVL;
}
std::string
Enemy::Description(void) {
std::stringstream ss;
char c;
c = this->descriptor[0];
if (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u')
ss << "an ";
else
ss << "a ";
ss << this->descriptor << " " << this->name;
return ss.str();
}
void
Enemy::Attack(Character *c) {
GUI gui;
std::stringstream ss;
int dmg;
ss << "The " << this->descriptor << " " << this->name << " attacks ";
ss << c->name;
// The attack
dmg = rand() % this->ATT - rand() % c->curDEF;
if (dmg <= 0)
ss << " but misses";
else {
dmg += rand() % (int)(this->STR) - rand() % c->curTOU;
//The damage
if (dmg <= 0)
ss << " but it does no damage";
else {
ss << " and does " << dmg << " damage";
c->curHP -= dmg;
}
}
gui.AddMessage(ss.str());
}
void
Enemy::TakeDamage(int amt) {
this->curHP -= amt;
this->isActive = true;
}
bool
Enemy::isAlive(void) {
return curHP > 0;
}