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;
}
}
DescriptionIn this final assignment, the students will demonstrate their ability to apply two ma
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. Thisprogram will have two classes, a LineItem class and a Transaction class. Th
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
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