112 lines
2.4 KiB
C++
112 lines
2.4 KiB
C++
|
#include <vector>
|
||
|
using namespace std;
|
||
|
|
||
|
#include "arena.h"
|
||
|
#include "fighter.h"
|
||
|
#include "archer.h"
|
||
|
#include "cleric.h"
|
||
|
#include "robot.h"
|
||
|
#include "util.h"
|
||
|
|
||
|
arena::~arena() {
|
||
|
fighter * f = NULL;
|
||
|
for(vector<FighterInterface *>::iterator it = fighters.begin();
|
||
|
it != fighters.end();
|
||
|
it++) {
|
||
|
f = dynamic_cast<fighter *>(*it);
|
||
|
delete f;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool arena::contains(string name) {
|
||
|
fighter * f = NULL;
|
||
|
for(unsigned int i = 0; i < fighters.size(); i++) {
|
||
|
f = dynamic_cast<fighter *>(fighters[i]);
|
||
|
if(f->getName() == name) {
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
bool arena::addFighter(string info) {
|
||
|
fighter * f = NULL;
|
||
|
|
||
|
string name;
|
||
|
string type;
|
||
|
int max_hp;
|
||
|
int strength;
|
||
|
int speed;
|
||
|
int magic;
|
||
|
|
||
|
bool worked;
|
||
|
worked = parse_n_load(info, name, type, max_hp, strength, speed, magic);
|
||
|
if(not worked) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if(contains(name)) {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
if(type == "A") {
|
||
|
f = new archer(name, max_hp, strength, speed, magic);
|
||
|
}
|
||
|
else if(type == "C") {
|
||
|
f = new cleric(name, max_hp, strength, speed, magic);
|
||
|
}
|
||
|
else if(type == "R") {
|
||
|
f = new robot(name, max_hp, strength, speed, magic);
|
||
|
}
|
||
|
|
||
|
fighters.push_back(f);
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
bool arena::removeFighter(string name) {
|
||
|
fighter * f = NULL;
|
||
|
for(vector<FighterInterface *>::iterator it = fighters.begin();
|
||
|
it != fighters.end();
|
||
|
it++) {
|
||
|
f = dynamic_cast<fighter *>(*it);
|
||
|
if(f->getName() == name) {
|
||
|
delete f;
|
||
|
fighters.erase(it);
|
||
|
return true;
|
||
|
}
|
||
|
}
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
FighterInterface * arena::getFighter(string name) {
|
||
|
fighter * f = NULL;
|
||
|
for(vector<FighterInterface *>::iterator it = fighters.begin();
|
||
|
it != fighters.end();
|
||
|
it++) {
|
||
|
f = dynamic_cast<fighter *>(*it);
|
||
|
if(f->getName() == name) {
|
||
|
return dynamic_cast<FighterInterface *>(f);
|
||
|
}
|
||
|
}
|
||
|
return NULL;
|
||
|
}
|
||
|
|
||
|
int arena::getSize() {
|
||
|
return fighters.size();
|
||
|
}
|
||
|
|
||
|
ostream & operator<<(ostream & os, arena & a) {
|
||
|
os << "[";
|
||
|
for(vector<FighterInterface * >::iterator it = a.fighters.begin();
|
||
|
it != a.fighters.end();
|
||
|
it++) {
|
||
|
os << *(dynamic_cast<fighter *>( *it));
|
||
|
if (it != a.fighters.end() - 1) {
|
||
|
os << ", ";
|
||
|
}
|
||
|
}
|
||
|
os << "]";
|
||
|
return os;
|
||
|
}
|