aboutsummaryrefslogtreecommitdiffstats
path: root/src/cardeval.cpp
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-10-31 13:00:26 +0000
committerzedarider <ymherklotz@gmail.com>2016-10-31 13:00:26 +0000
commitabd4894e31a573a7b6e9dbcbecb61a8b8b78ec8b (patch)
treedf400eb9a5ca0017d4a458009f04f16ac89d2a24 /src/cardeval.cpp
parent16fb95a1056df76c71af9d31bd05820a6d159aa0 (diff)
downloadCardeval-abd4894e31a573a7b6e9dbcbecb61a8b8b78ec8b.tar.gz
Cardeval-abd4894e31a573a7b6e9dbcbecb61a8b8b78ec8b.zip
adding all necessary files
Diffstat (limited to 'src/cardeval.cpp')
-rw-r--r--src/cardeval.cpp151
1 files changed, 128 insertions, 23 deletions
diff --git a/src/cardeval.cpp b/src/cardeval.cpp
index 6c04d29..c3ff7b9 100644
--- a/src/cardeval.cpp
+++ b/src/cardeval.cpp
@@ -12,6 +12,14 @@
#include "../include/cardeval.hpp"
using namespace tinyxml2;
+using namespace std;
+using namespace cardeval;
+
+/*
+
+ Constructor
+
+ */
CardEval::CardEval() {
card_doc.LoadFile("resources/CardDefs.xml");
@@ -21,10 +29,10 @@ CardEval::CardEval(int &argc, char** &argv) {
// if only one argument is given
if(argc == 1) {
// use strncmp to compare parts of the string
- if(std::strncmp(argv[0], "bin/xxx", 4) || std::strncmp(argv[0], "./bin/xxx", 6)) {
+ if(strncmp(argv[0], "bin/xxx", 4) || strncmp(argv[0], "./bin/xxx", 6)) {
// if program is executed from main program directory
card_doc.LoadFile("resources/CardDefs.xml");
- } else if(std::strncmp(argv[0], "./xxx", 2)) {
+ } else if(strncmp(argv[0], "./xxx", 2)) {
// when program is executed directly
card_doc.LoadFile("../resources/CardDefs.xml");
}
@@ -35,12 +43,75 @@ CardEval::CardEval(int &argc, char** &argv) {
// otherwise exit with errorcode
exit_with_error();
}
+
+ get_cards();
+ get_stat_average();
}
CardEval::~CardEval() {
}
+/*
+
+ Public
+
+ */
+
+void CardEval::print_cards(string card_str) {
+ if(card_str == "minions") {
+ for(card_struct curr_card : minions) {
+ cout << curr_card.card_print_format();
+ }
+ } else if(card_str == "spells") {
+ for(card_struct curr_card : spells) {
+ cout << curr_card.card_print_format();
+ }
+ } else if(card_str == "weapons") {
+ for(card_struct curr_card : weapons) {
+ cout << curr_card.card_print_format();
+ }
+ } else {
+ cout << "not available" << endl;
+ }
+}
+
+void CardEval::print_stat_average() {
+ for(atk_health card_avg : card_avg_stats) {
+ cout << card_avg.prnt_str() << endl;
+ }
+}
+
+void CardEval::set_minions(vector<card_struct> &card_info) {
+ for(card_struct cards : minions) {
+ card_info.push_back(cards);
+ }
+}
+
+void CardEval::set_spells(vector<card_struct> &card_info) {
+ for(card_struct cards : spells) {
+ card_info.push_back(cards);
+ }
+}
+
+void CardEval::set_weapons(vector<card_struct> &card_info) {
+ for(card_struct cards : weapons) {
+ card_info.push_back(cards);
+ }
+}
+
+void CardEval::set_avg_stats(vector<atk_health> &stat_avg) {
+ for(atk_health stats : card_avg_stats) {
+ stat_avg.push_back(stats);
+ }
+}
+
+/*
+
+ Protected
+
+ */
+
void CardEval::get_cards() {
// load root node from the file into memory
XMLElement* root_el = card_doc.FirstChildElement("CardDefs");
@@ -55,14 +126,50 @@ void CardEval::get_cards() {
for(XMLElement* tag_iterator = ent_iterator->FirstChildElement("Tag");
tag_iterator != NULL; tag_iterator = tag_iterator->NextSiblingElement("Tag")) {
- card_info = set_card_info(tag_iterator);
+ set_card_info(tag_iterator, card_info);
}
+
+ add_card_to_vec(card_info);
+ }
+
+ // makes the vectors smaller and fit to memory
+ minions.shrink_to_fit();
+ spells.shrink_to_fit();
+ weapons.shrink_to_fit();
+}
+
+void CardEval::get_stat_average() {
+ const int atk_health_size = MAX_MANA+1;
+ atk_health atk_health_count[atk_health_size];
+
+ int card_total[atk_health_size];
+ for(int i = 0; i < atk_health_size; i++) {
+ card_total[i] = 0;
+ }
+
+ for(card_struct card_info : minions) {
+ if(card_info.cost >= 0 && card_info.cost < atk_health_size && card_info.is_collectible) {
+
+ atk_health_count[card_info.cost].atk += double(card_info.attack);
+ atk_health_count[card_info.cost].health += double(card_info.health);
+
+ card_total[card_info.cost]++;
+ }
+ }
+
+ for(int i = 0; i < atk_health_size; i++) {
+ atk_health tmp_ah;
+
+ tmp_ah.atk = atk_health_count[i].atk / double(card_total[i]);
+ tmp_ah.health = atk_health_count[i].health / double(card_total[i]);
+
+ card_avg_stats.push_back(tmp_ah);
}
}
void CardEval::exit_with_error() {
// exit the program with an error message
- std::exit(EXIT_FAILURE);
+ exit(EXIT_FAILURE);
}
void CardEval::add_card_to_vec(card_struct &in_card) {
@@ -78,8 +185,8 @@ void CardEval::add_card_to_vec(card_struct &in_card) {
}
}
-char CardEval::get_type(std::string type_str) {
- int type_int = std::stoi(type_str);
+char CardEval::get_type(string type_str) {
+ int type_int = stoi(type_str);
switch(type_int) {
// when it is a minion
@@ -97,9 +204,10 @@ char CardEval::get_type(std::string type_str) {
}
}
-std::string CardEval::get_class(std::string class_str) {
- int class_int = std::stoi(class_str);
+string CardEval::get_class(string class_str) {
+ int class_int = stoi(class_str);
+ // using switch to return the string of the cardtype
switch(class_int) {
case 2:
return "druid";
@@ -120,44 +228,41 @@ std::string CardEval::get_class(std::string class_str) {
case 10:
return "warrior";
default:
- return "";
+ return "\0";
}
}
-card_struct CardEval::set_card_info(XMLElement* tag_it) {
- card_struct tmp_card;
-
+void CardEval::set_card_info(XMLElement* tag_it, card_struct &curr_card) {
// add information to the cardinfo
if(tag_it->Attribute("name", "CardName")) {
// if tag is cardname
- tmp_card.card_name = tag_it->FirstChildElement("enUS")->GetText();
+ curr_card.card_name = tag_it->FirstChildElement("enUS")->GetText();
} else if(tag_it->Attribute("name", "Collectible") &&
tag_it->Attribute("value", "1")) {
- tmp_card.is_collectible = true;
+ curr_card.is_collectible = true;
} else if(tag_it->Attribute("name", "CardType")) {
- tmp_card.card_type = get_type(tag_it->Attribute("value"));
+ curr_card.card_type = get_type(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Class")) {
- tmp_card.class_name = get_class(tag_it->Attribute("value"));
+ curr_card.class_name = get_class(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Cost")) {
- tmp_card.cost = std::stoi(tag_it->Attribute("value"));
+ curr_card.cost = stoi(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Atk")) {
- tmp_card.attack = std::stoi(tag_it->Attribute("value"));
+ curr_card.attack = stoi(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Health")) {
- tmp_card.health = std::stoi(tag_it->Attribute("value"));
+ curr_card.health = stoi(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Rarity")) {
- tmp_card.rarity = std::stoi(tag_it->Attribute("value"));
+ curr_card.rarity = stoi(tag_it->Attribute("value"));
} else if(tag_it->Attribute("name", "Durability")) {
- tmp_card.durability = std::stoi(tag_it->Attribute("value"));
+ curr_card.durability = stoi(tag_it->Attribute("value"));
} else{
+ // do nothing
}
-
- return tmp_card;
}