diff options
author | zedarider <ymherklotz@gmail.com> | 2016-07-20 15:52:52 +0200 |
---|---|---|
committer | zedarider <ymherklotz@gmail.com> | 2016-07-20 15:52:52 +0200 |
commit | b0040d9d0578085576a8793d49a99c228f9d8e07 (patch) | |
tree | 120434a561106ec01e2a9e4f18b3e478c7ca1fb1 /src | |
parent | 647c9aa28cd751360f14c6925cd160beea7f4b8a (diff) | |
download | Cardeval-b0040d9d0578085576a8793d49a99c228f9d8e07.tar.gz Cardeval-b0040d9d0578085576a8793d49a99c228f9d8e07.zip |
cardeval class added with tinyxml2 support
Diffstat (limited to 'src')
-rw-r--r-- | src/cardeval.cpp | 121 | ||||
-rw-r--r-- | src/main.cpp | 45 |
2 files changed, 162 insertions, 4 deletions
diff --git a/src/cardeval.cpp b/src/cardeval.cpp new file mode 100644 index 0000000..e1e6f5b --- /dev/null +++ b/src/cardeval.cpp @@ -0,0 +1,121 @@ +/* + + description: This is the class file for the header file that includes + all the functions. + + author: Yann Herklotz <ymherklotz@gmail.com> + date created: 18-07-2016 + filename: cardeval.cpp + + */ + +#include "../include/cardeval.hpp" + +using namespace tinyxml2; + +CardEval::CardEval() { + card_doc.LoadFile("resources/CardDefs.xml"); +} + +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 program is executed from main program directory + card_doc.LoadFile("resources/CardDefs.xml"); + } else if(std::strncmp(argv[0], "./xxx", 2)) { + // when program is executed directly + card_doc.LoadFile("../resources/CardDefs.xml"); + } + } else if(argc == 2) { + // if arguments are given to the program + card_doc.LoadFile(argv[1]); + } else { + // otherwise exit with errorcode + exit_with_error(); + } +} + +CardEval::~CardEval() { + +} + +void CardEval::getCards(std::vector<cardStruct> &cardDeck) { + // load root node from the file into memory + XMLElement* root_el = card_doc.FirstChildElement("CardDefs"); + + // loops through the root node, which means it loops through the cards + for(XMLElement* ent_iterator = root_el->FirstChildElement("Entity"); ent_iterator != NULL; + ent_iterator = ent_iterator->NextSiblingElement("Entity")) { + + cardStruct card_info; + + // iterates through the card information in tags + for(XMLElement* tag_iterator = ent_iterator->FirstChildElement("Tag"); + tag_iterator != NULL; tag_iterator = tag_iterator->NextSiblingElement("Tag")) { + + // add information to the cardinfo + if(tag_iterator->Attribute("name", "CardName")) { + // if tag is cardname + card_info.card_name = tag_iterator->FirstChildElement("enUS")->GetText(); + + } else if(tag_iterator->Attribute("name", "Collectible") && + tag_iterator->Attribute("value", "1")) { + card_info.is_collectible = true; + + } else if(tag_iterator->Attribute("name", "CardType")) { + get_type(tag_iterator->Attribute("value")); + + } else if(tag_iterator->Attribute("name", "Class")) { + get_class(tag_iterator->Attribute("value")); + } + } + } +} + +void CardEval::exit_with_error() { + std::exit(EXIT_FAILURE); +} + +char CardEval::get_type(std::string type_str) { + int type_int = std::stoi(type_str); + + switch(type_int) { + case 4: + return 'm'; + case 5: + return 's'; + case 7: + return 'w'; + default: + return '\0'; + } +} + +std::string CardEval::get_class(std::string class_str) { + int class_int = std::stoi(class_str); + + switch(class_int) { + case 2: + return "druid"; + case 3: + return "hunter"; + case 4: + return "mage"; + case 5: + return "paladin"; + case 6: + return "priest"; + case 7: + return "rogue"; + case 8: + return "shaman"; + case 9: + return "warlock"; + case 10: + return "warrior"; + default: + return ""; + } +} diff --git a/src/main.cpp b/src/main.cpp index 8562b2f..e855621 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -1,16 +1,53 @@ /* - description: + description: This is the main cpp file for the cardeval project. author: Yann Herklotz <ymherklotz@gmail.com> - date created: DD-MM-YYYY + date created: 18-07-2016 + filename: main.cpp */ #include <iostream> +#include <string> + +#include <tinyxml2.h> + +using namespace std; +using namespace tinyxml2; int main(int argc, char** argv) { - std::cout << "executing " << argv[0] << std::endl; - std::cout << "arguments given: " << argc-1 << std::endl; + cout << "executing " << argv[0] << endl; + cout << "arguments given: " << argc-1 << endl; + + XMLDocument doc; + doc.LoadFile("resources/CardDefs.xml"); + + XMLElement* entityElement = doc.FirstChildElement("CardDefs"); + for(XMLElement* elIterator = entityElement->FirstChildElement("Entity"); elIterator != NULL; elIterator = elIterator->NextSiblingElement("Entity")) { + bool setCardName = false; + bool setCollectible = false; + bool setMinion = false; + bool written = false; + string cardName = ""; + for(XMLElement* tagIterator = elIterator->FirstChildElement("Tag"); tagIterator != NULL; tagIterator = tagIterator->NextSiblingElement("Tag")) { + if(tagIterator->Attribute("name", "CardName")) { + setCardName = true; + cardName = tagIterator->FirstChildElement("enUS")->GetText(); + } else if(tagIterator->Attribute("name", "Collectible") && tagIterator->Attribute("value", "1")) { + setCollectible = true; + } else if(tagIterator->Attribute("name", "CardType") && tagIterator->Attribute("value", "10")) { + setMinion = true; + } + + if(setCardName && setCollectible && setMinion && !written) { + cout << cardName << endl; + written = true; + } if(tagIterator == nullptr) { + + } + } + } + return 0; } |