aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorzedarider <ymherklotz@gmail.com>2016-07-20 15:52:52 +0200
committerzedarider <ymherklotz@gmail.com>2016-07-20 15:52:52 +0200
commitb0040d9d0578085576a8793d49a99c228f9d8e07 (patch)
tree120434a561106ec01e2a9e4f18b3e478c7ca1fb1 /src
parent647c9aa28cd751360f14c6925cd160beea7f4b8a (diff)
downloadCardeval-b0040d9d0578085576a8793d49a99c228f9d8e07.tar.gz
Cardeval-b0040d9d0578085576a8793d49a99c228f9d8e07.zip
cardeval class added with tinyxml2 support
Diffstat (limited to 'src')
-rw-r--r--src/cardeval.cpp121
-rw-r--r--src/main.cpp45
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;
}