I am studying for a degree in "Bachelor of Engineering in Information and Communication Technologies." I am currently on vacation, just after we started learning C++ at the end of the semester. I wanted to be ahead of the next semester, so I decided to try to use these classes and to make a text-based game.
I would like to know what I could do better. Should I remove or add some class functions? Should I do something differently, maybe not even related to classes?
Main.cpp
#include "MobClass.h"
#include "Player.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <windows.h>
using namespace std;
player battle(player account);
player calcEXP(player account,classMob monster);
player levelUp(player account);
void death();
int main()
{
string name;
int option1;
cout << "Welcome, please enter your name\n";
cin >> name;
string location[4] = {"in a hole","in a cave","in the mauntains","in a castle"};
player account(name,location[0],1,0);
cout <<"\nWelcome "<<account.getName() << " you find your self " << account.getArea() << "\nand you are not sure how you ended up here\n";
while (1)
{
Sleep(500);
cout <<"write 1 to walk forward or 2 to walk left or 3 to walk right\n";
cin >> option1;
if (option1 >=1 && option1 <=3)
{
Sleep(50*(option1));
srand(time(NULL));
if (rand() %3 == option1-1){
account = battle(account);
}
}
else{
cout << "\n#@#Error#@# Please enter a number between 1 and 3\n\n";
cin.clear();
cin.ignore();
}
}
return 0;
}
player battle(player account)
{
string option;
string location[4] = {"in a hole","in a cave","in the mauntains","in a castle"};
string monsters[5][3] = {{"worm","lizard","snake"},{"rat","snake","trolls"},{"Dragon","Dragon","Dragon"},{"Evil knight","The mad king","Joffrey Baratheon"}};
Sleep(20);
srand(time(NULL));
int ranM = (rand() % 3); //random monster
int ranD = (rand() % 5)+1; //random diff
classMob monster(monsters[account.getLevel()-1][ranM],account.getLevel(),account.getArea(),ranD);
cout <<"Suddently you meet a "<< monster.getName() <<", be ready for battle" << "\n";
Sleep(2000);
do
{
cout << "\n\n\n ######################################\nHP:"<< account.getHealth() << " "<< monster.getName()<<"HP:"<<monster.getHealth()<<" difficulty:"<<monster.getDifficulty() << "\n";
cout << "Write A for attack or R for retreat" << "\n";
cin >> option;
srand(time(NULL));
if (option == "R" || option == "r")
{
if ((rand() % 2) == 1){
cout << "retreat sucessfull" << "\n";
monster.setHealth(0);
}
else{
cout << "retreat failed, the monster get a free attack and you lose 5 health\n";
account.setHealth(account.getHealth()-5);
option ="A";
}
}
if (option == "A" || option == "a")
{
int attack =rand()%(account.getDamage());
srand(time(NULL));
int mobAttack = rand()%(monster.getDamage());
monster.setHealth(monster.getHealth()-attack);
account.setHealth(account.getHealth()-mobAttack);
cout << "you attack the monster for " << attack << " damage\n";
Sleep(500);
cout << "the monster counter attacks for " << mobAttack << " damage\n";
Sleep(500);
}
} while (monster.getHealth() >0 && account.getHealth() > 0);
cout << "\n\n\n ######################################\nHP:"<< account.getHealth() << " "<< monster.getName()<<"HP:"<<monster.getHealth()<<" difficulty:"<<monster.getDifficulty() << "\n";
if (account.getHealth() <= 0)
{
death();
exit(0);
}
account = calcEXP(account,monster);
return account;
}
void death()
{
cout << "Sorry you failed your epic quest\n";
}
player calcEXP(player account,classMob monster)
{
cout << "#########\ncalculating EXP\n#########\n";
Sleep(500);
account.setEXP(account.getEXP() + monster.getEXP());
cout << "EXP: " <<account.getEXP() << "/" << account.getEXPReq() << "\n";
if (account.getEXP() >= account.getEXPReq())
{
levelUp(account);
}
return account;
}
player levelUp(player account)
{
account.setLevel(account.getLevel()+1);
account.setEXPReq();
account.setMaxHealth();
account.setHealth(account.getMaxHealth());
cout << "Level up! you are now level: " << account.getLevel() << "!\n";
return account;
}
Player.h
#include <string>
class player
{
public:
player(std::string,std::string,int,int);
void setName(std::string);
void setArea(std::string);
void setLevel(int);
void setEXP(double);
void setHealth(double);
void setMaxHealth();
void setDamage();
std::string getName();
std::string getArea();
int getLevel();
double getHealth();
double getMaxHealth();
int getDamage();
int getEXP();
void setEXP(int);
int getEXPReq();
void setEXPReq();
private:
std::string playerName;
std::string playerArea;
int playerLevel;
double playerHealth;
double playerMaxHealth;
int playerDamage;
int EXP;
int EXPReq;
};
player.cpp
#include <string>
#include "Player.h"
player::player(std::string name,std::string area,int level = 1,int EXP = 0)
{
setName(name);
setArea(area);
setLevel(level);
setEXP(EXP);
setMaxHealth();
setHealth(playerMaxHealth);
setDamage();
setEXPReq();
}
void player::setName(std::string name)
{
playerName = name;
}
void player::setArea(std::string area)
{
playerArea = area;
}
void player::setLevel(int level)
{
playerLevel = level;
}
void player::setHealth(double health)
{
playerHealth = health;
}
void player::setMaxHealth()
{
playerMaxHealth = (100 * getLevel());
}
void player::setDamage()
{
playerDamage = (30 * getLevel());
}
std::string player::getName()
{
return playerName;
}
std::string player::getArea()
{
return playerArea;
}
int player::getLevel()
{
return playerLevel;
}
double player::getHealth()
{
return playerHealth;
}
double player::getMaxHealth()
{
return playerMaxHealth;
}
int player::getDamage()
{
return playerDamage;
}
int player::getEXP()
{
return EXP;
}
void player::setEXP(int _EXP)
{
EXP = _EXP;
}
int player::getEXPReq()
{
return EXPReq;
}
void player::setEXPReq()
{
EXPReq = 70+((getLevel()*getLevel())*35);
}
mobclass.h
#include <string>
class classMob
{
public:
classMob(std::string,int,std::string,int); // name,lvl,area,difficulty
void setName(std::string);
void setLevel(int);
void setArea(std::string);
void setDamage();
void setHealth(double);
void setMaxHealth();
void setDifficulty(int);
std::string getName();
int getLevel();
std::string getArea();
int getDamage();
double getHealth();
double getMaxHealth();
int getDifficulty();
int getEXP();
void setEXP();
private:
std::string mobName;
std::string mobArea;
int mobLevel;
int mobDamage;
double mobHealth;
double mobMaxHealth;
int mobDifficulty;
int EXP;
};
mobclass.cpp
#include <string>
#include "MobClass.h"
classMob::classMob(std::string name,int lvl,std::string area,int difficulty)
{
setName(name);
setLevel(lvl);
setArea(area);
setDifficulty(difficulty);
setDamage();
setMaxHealth();
setHealth(mobMaxHealth);
setEXP();
}
void classMob::setName(std::string name)
{
mobName = name;
}
void classMob::setLevel(int level)
{
mobLevel = level;
}
void classMob::setArea(std::string area)
{
mobArea = area;
}
void classMob::setDifficulty(int difficulty)
{
mobDifficulty = difficulty;
}
void classMob::setDamage()
{
mobDamage = (3 *( getLevel())+((getDifficulty()*getLevel())/2));
}
void classMob::setHealth(double health)
{
mobHealth = health;
}
void classMob::setMaxHealth()
{
mobMaxHealth = (15 *(getDifficulty() + getLevel()));
}
std::string classMob::getName()
{
return mobName;
}
int classMob::getLevel()
{
return mobLevel;
}
std::string classMob::getArea()
{
return mobArea;
}
int classMob::getDifficulty()
{
return mobDifficulty;
}
int classMob::getDamage()
{
return mobDamage;
}
double classMob::getHealth()
{
return mobHealth;
}
double classMob::getMaxHealth()
{
return mobMaxHealth;
}
int classMob::getEXP()
{
return EXP;
}
void classMob::setEXP()
{
EXP = (getLevel() * 35);
}