-
Notifications
You must be signed in to change notification settings - Fork 0
/
OOP - hw2.cpp
134 lines (113 loc) · 4.5 KB
/
OOP - hw2.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/*
Filename: Hw02.cpp
Programmer: Yohann Abittan
netID: yaa243
The aim of this program is to simulate medieval times through a game of warriors
*/
#include<iostream>
#include<vector>
#include<string>
#include<fstream>
using namespace std;
struct Warrior{
string name;
int strength;
};
string getFileName();
void checkFile(ifstream& ifs, string fileToRead);
void readFromFile(ifstream& ifs, vector<Warrior>& warriors);
void newWarrior(ifstream& ifs, vector<Warrior>& warriors);
void status(vector <Warrior>& warriors);
void battle(vector <Warrior>& warriors, ifstream& ifs);
string getFileName() { //can easily be changed into taking a file name
string fileToRead = "warriors (1).txt";
//cout<<"What is the name of the file you would like to read?"<<endl;
//cin>>fileToRead;
return fileToRead;
}
void checkFile(ifstream& ifs, string fileToRead) { //checks if the file opens
while (!ifs) {
cerr << "Failed to open the file, please enter the correct filename\n";
cin >> fileToRead;
}
}
void readFromFile(ifstream& ifs, vector<Warrior>& warriors) {
string cmd;//reads the command provided by the file into this variable
while (ifs >> cmd) {
if (cmd == "Battle") {//if the command is battle then the battle function is used
battle(warriors, ifs);
}
else if (cmd == "Status") {//if the command is status then the status function is used
status(warriors);
}
else if (cmd == "Warrior") {//if the command is status then the warrior function is used
newWarrior(ifs, warriors);
}
}
}
void newWarrior(ifstream& ifs, vector<Warrior>& warriors) {//creates a new warrior and adds him to the vector of warriors
Warrior newWarrior;
string warriorName;
int warriorStrength;
ifs >> warriorName >> warriorStrength;//reads the strength and name into a new warrior
newWarrior.strength = warriorStrength;
newWarrior.name = warriorName;
warriors.push_back(newWarrior);
}
void status(vector <Warrior>& warriors) {//displays the number of warriors, their names, and their strengths
cout << "There are currently " << warriors.size() << " warriors"<<endl;
for (size_t i = 0; i < warriors.size(); i++) {
cout << "Warrior: " << warriors[i].name << " and his strength is: " << warriors[i].strength << endl;
}
}
void battle(vector <Warrior>& warriors, ifstream& ifs ){//makes the two warriors fight, and outputs the result of the fight, also changes their strength if need be
string fighter1;
string fighter2;
ifs >> fighter1 >> fighter2;
for (size_t i = 0; i < warriors.size(); i++) {
if (fighter1 == warriors[i].name) {//finds which warrior is called in the vector
for (size_t j = 0; j < warriors.size(); j++) {
if (fighter2 == warriors[j].name) {//finds his opponent
if (warriors[i].strength == 0 && warriors[j].strength == 0) {//checks if theyre both dead
cout << fighter1 << " battles " << fighter2 << endl;
cout << "Oh, NO!They're both dead! Yuck!" << endl;
}
else if (warriors[i].strength == 0) {//checks if one of them is dead
cout << "He's dead" << fighter2 << endl;
}
else if (warriors[j].strength == 0) {//checks if the other one is dead
cout << "He's dead " << fighter1 <<endl;
}
if (warriors[i].strength == warriors[j].strength) {//checks if they are alive but have equal strength
cout << "Mutual Annihilation : " << fighter1 << " and " << fighter2 << " die at each other's hands" << endl;
warriors[i].strength = 0;
warriors[j].strength = 0;
}
else if (warriors[i].strength > warriors[j].strength) {//checks if the first warrior wins
cout << fighter1 << " battles " << fighter2 << endl;
cout << fighter1 << " defeats " << fighter2 << endl;
warriors[i].strength = ((warriors[i].strength) - (warriors[j].strength));
warriors[j].strength = 0;//makes the second warrior dead
}
else if (warriors[i].strength < warriors[j].strength) {//checks if the second warrior wins
cout << fighter1 << " battles " << fighter2 << endl;
cout << fighter2 << " defeats " << fighter1 << endl;
warriors[j].strength = ((warriors[j].strength) - (warriors[i].strength));
warriors[i].strength = 0;//makes the first warrior dead
}
}
}
}
}
}
int main() {
string nothing;//used as a pause function
string fileName;
ifstream ifs;
vector<Warrior> warriors;
fileName = getFileName();
checkFile(ifs, fileName);
ifs.open(fileName);
readFromFile(ifs, warriors);
cin >> nothing;
}