logo Use CA10RAM to get 10%* Discount.
Order Nowlogo

Implement a C++ Linked List Use dynamic memory in classes,the Character class is a simple class for storing a name, a role (Tank, DPS, or Heals),

INSTRUCTIONS TO CANDIDATES
ANSWER ALL QUESTIONS

CPP FILE :

// driver.cpp
// Testing driver for Assignment 1

#include <iostream>
#include <locale>
#include <string>

// You will provide this header
#include "party.h"
using std::cin;
using std::getline;
using std::cout;
using std::endl;
using std::string;
using std::locale;
using std::tolower;

int main()
{
   // For use with std::tolower (see documentation)
   std::locale loc;

   // Our empty PartyFinder
   PartyFinder finder;

   string prompt;
   do
   {
       // Name
       string charName;
       cout << "What is the Character's name? ";
       getline(cin, charName); // Using getline allows spaces in name

       // Level
       int lvl = 0;
       do
       {
           cout << "What is the character's level [1-80]? ";
           cin >> lvl;
       } while (lvl <= 0 || lvl > 80);

       // Role
       char role;
       do
       {
           cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Flush newlines
           cout << "What is the character's Role: (T)ank, (D)PS, (H)eals? ";
           cin >> role;
           role = tolower(role, loc);
       } while (role != 't' && role != 'd' && role != 'h');

       // Add to Party Finder. If popped, print Party; otherwise, indicate
       // where we are in queue
       Character newPC(charName, lvl, role);
       Party party = finder.add(newPC);
       if (!party.isEmpty())
       {
           // New party formed. Print the members
           cout << "Party formed!" << endl;
           party.print();
       }

       // Display wait status.
       cout << "Current queue: " << endl;
       finder.print();

       // Continue?
       cout << "Are there more Characters [Y/N]? " << endl;
       cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n'); // Flush newlines
       getline(cin, prompt);
   } while (tolower(prompt[0], loc) == 'y');

   return 0;
}

 

Party.h :

#include <string>
using namespace std;

class Character{
private:
   string name;  
   int level;
   char role;
public:
   //initialize
   Character(string,int,char);
   ~Character();
   //getters
   string getName();
   int getLevel();
   char getRole();
};

// class to hold character object and nevigate in linked list
class Node{
public:
   Character data;
   Node *next;
   //constructor to initialize data
   Node(Character d):data(d),next(NULL){}
};

//linkedlist class to store characters
class MyLinkedList{
public:
   Node *root;
   MyLinkedList();
   MyLinkedList(Character);
   ~MyLinkedList();
   //adds a character to the list
   void add(Character);
   //removes character from the list
   void remove();
};

class Party{
private:
   Character *tank;
   Character *dps1;
   Character *dps2;
   Character *heals;
   bool party;
public:
   // default constructor for empty party
   Party();
   // constructor to form party
   Party(Character *,Character *,Character *,Character *);
   ~Party();
   bool isEmpty();//return true if party is formed
   void print();//prints list of characters in party
};

class PartyFinder{
private:
   // linkedlists to hold character queue
   MyLinkedList *tank;
   MyLinkedList *dps;
   MyLinkedList *heals;
public:
   PartyFinder();
   ~PartyFinder();
   //adds a character to list if lists can form party it returns the
   //party formed and removes characters from list that formed the party
   //if party doesnt form it returns empty party
   Party add(Character);
   void print();
};


Party.cpp:

#include "party.h"
#include <iostream>
using namespace std;

Character::Character(string _name, int _level, char _role):name(_name),level(_level),role(_role){
}

Character::~Character(){
}

string Character::getName(){
   return name;
}

int Character::getLevel(){
   return level;
}
char Character::getRole(){
   return role;
}

MyLinkedList::MyLinkedList(){
   root = NULL;
}

MyLinkedList::MyLinkedList(Character c){
   root = new Node(c);
}

MyLinkedList::~MyLinkedList(){
}

void MyLinkedList::add(Character c){
   if(root==NULL){
       root = new Node(c);
   }
   else{
       Node *temp = root;
       while(temp->next!=NULL){
           temp = temp->next;
       }
       temp->next = new Node(c);
   }
}

void MyLinkedList::remove(){
   root = root->next;
}

Party::Party(){
   party = true;
}

Party::Party(Character *_tank,Character *_dps1,Character *_dps2,Character *_heal){
   party = false;
   tank = _tank;
   dps1 = _dps1;
   dps2 = _dps2;
   heals = _heal;
}

Party::~Party(){
}

bool Party::isEmpty(){
   return party;
}

void Party::print(){
   cout<< "Tank: "<< tank->getName() <<", level "<< tank->getLevel() <<endl;
   cout<< "DPS: "<< dps1->getName() <<", level "<< dps1->getLevel() <<endl;
   cout<< "DPS: "<< dps2->getName() <<", level "<< dps2->getLevel() <<endl;
   cout<< "Heals: "<< heals->getName() <<", level "<< heals->getLevel() <<endl;
}

PartyFinder::PartyFinder(){
   tank = new MyLinkedList();
   dps = new MyLinkedList();
   heals = new MyLinkedList();
}

PartyFinder::~PartyFinder(){
}

Party PartyFinder::add(Character c){
   char role = c.getRole();
   if(role=='t'){
       tank->add(c);}
   else if(role=='d'){
       dps->add(c);}
   else{
       heals->add(c);}
   if(tank->root!=NULL){
       if(dps->root!=NULL){
           if(dps->root->next!=NULL){
               if(heals->root!=NULL){
                   Party p(&tank->root->data,&dps->root->data,&dps->root->next->data,&heals->root->data);
                   tank->remove();
                   dps->remove();
                   dps->remove();
                   heals->remove();
                   return p;
               }
           }
       }
   }
   else{
       return Party();
   }
}

void PartyFinder::print(){
   cout<<"Tanks in queue: "<<endl;
   if(tank->root!=NULL){
       Node *temp = tank->root;
       while(temp!=NULL){
           cout<<"        ";
           cout<<temp->data.getName()<<", level "<<temp->data.getLevel()<<endl;
           temp = temp->next;
       }
   }
   else{
       cout<<"        ";
       cout<<"No Tanks"<<endl;
   }
   cout<<"DPS in queue: "<<endl;
   if(dps->root!=NULL){
       Node *temp = dps->root;
       while(temp!=NULL){
           cout<<"        ";
           cout<<temp->data.getName()<<", level "<<temp->data.getLevel()<<endl;
           temp = temp->next;
       }
   }
   else{
       cout<<"        ";
       cout<<"No DPS"<<endl;
   }
   cout<<"Heals in queue: "<<endl;
   if(heals->root!=NULL){
       Node *temp = heals->root;
       while(temp!=NULL){
           cout<<"        ";
           cout<<temp->data.getName()<<", level "<<temp->data.getLevel()<<endl;
           temp = temp->next;
       }
   }
   else{
       cout<<"        ";
       cout<<"No Heals"<<endl;
   }
}

Related Questions

. Introgramming & Unix Fall 2018, CRN 44882, Oakland University Homework Assignment 6 - Using Arrays and Functions in C

DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma

. The standard path finding involves finding the (shortest) path from an origin to a destination, typically on a map. This is an

Path finding involves finding a path from A to B. Typically we want the path to have certain properties,such as being the shortest or to avoid going t

. Develop a program to emulate a purchase transaction at a retail store. This program will have two classes, a LineItem class and a Transaction class. The LineItem class will represent an individual

Develop a program to emulate a purchase transaction at a retail store. Thisprogram will have two classes, a LineItem class and a Transaction class. Th

. SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of Sea Ports. Here are the classes and their instance variables we wish to define:

1 Project 1 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of

. Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of Sea Ports. Here are the classes and their instance variables we wish to define:

1 Project 2 Introduction - the SeaPort Project series For this set of projects for the course, we wish to simulate some of the aspects of a number of

Ask This Question To Be Solved By Our ExpertsGet A+ Grade Solution Guaranteed

expert
Um e HaniScience

622 Answers

Hire Me
expert
Muhammad Ali HaiderFinance

939 Answers

Hire Me
expert
Husnain SaeedComputer science

646 Answers

Hire Me
expert
Atharva PatilComputer science

642 Answers

Hire Me