diff --git a/d03/ex03/ClapTrap.cpp b/d03/ex03/ClapTrap.cpp index 5c7246d..54a4994 100644 --- a/d03/ex03/ClapTrap.cpp +++ b/d03/ex03/ClapTrap.cpp @@ -1,90 +1,86 @@ #include "ClapTrap.hpp" -/* - * statics - */ +# define B_GRAY "\e[1;30m" +# define B_RED "\e[1;31m" +# define B_GREEN "\e[1;32m" +# define B_YELLOW "\e[1;33m" +# define B_BLUE "\e[1;34m" +# define B_PURPLE "\e[1;35m" +# define B_CYAN "\e[1;36m" +# define B_WHITE "\e[1;37m" -int ClapTrap::_totalNumber = 0; +# define RESET "\e[0m" -/* - * default/parametric constructor - */ +/********************************************* + * CONSTRUCTORS + *********************************************/ -ClapTrap::ClapTrap( void ) { - - std::cout << "claptrap created without name\n"; +ClapTrap::ClapTrap( std::string name ) { + ClapTrap::_increaseNumber(); + _class = _dClass; + _name = name; + _hit = _dHit; + _energy = _dEnergy; + _attack = _dAttack; + _number = getTotalNumber(); + std::cout << _class << " " << _name << "-" << _number << " created\n"; return; } -/* - * destructor - */ - -ClapTrap::~ClapTrap( void ) { - std::cout << _class << " " << _name << " destructed\n"; - return; -} - -/* - * copy constructor - */ - ClapTrap::ClapTrap( ClapTrap const & src ) { - std::cout << _class << " " << _name << " copied\n"; + ClapTrap::_increaseNumber(); + _class = _dClass; *this = src; + _number = getTotalNumber(); + std::cout << _class << " " << _name << "-" << _number << " copied from " << src._class << " " << src._name << "-" << src._number << "\n"; return; } -/* - * assignement operator - */ +/********************************************* + * DESTRUCTORS + *********************************************/ + +ClapTrap::~ClapTrap( void ) { + std::cout << _class << " " << _name << "-" << _number << " destructed\n"; + return; +} + +/********************************************* + * OPERATORS + *********************************************/ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { if ( this != &rhs ) { - this->_hit = rhs.getHit(); - this->_energy = rhs.getEnergy(); - this->_attack = rhs.getAttack(); + _name = rhs.getName(); + _hit = rhs.getHit(); + _energy = rhs.getEnergy(); + _attack = rhs.getAttack(); + _number = rhs.getNumber(); } - std::cout << _class << " " << _name << " assigned\n"; + std::cout << _class << " " << _name << "-" << _number << " assigned\n"; return *this; } -/* - * constructor - */ - -ClapTrap::ClapTrap( std::string name ) : _name(name) { - - ClapTrap::_increaseNumber(); - - _class = "ClapTrap"; - _hit = 10; - _energy = 10; - _attack = 1; - _number = _getNumber(); - - std::cout << _class << " " << _name << " created with number " << _number << "\n"; - return; -} - -/* - * getters - */ +/********************************************* + * ACCESSORS + *********************************************/ std::string ClapTrap::getName() const {return _name;} +std::string ClapTrap::getClass() const {return _class;} int ClapTrap::getHit() const {return _hit;} int ClapTrap::getEnergy() const {return _energy;} int ClapTrap::getAttack() const {return _attack;} -int ClapTrap::_getNumber() {return ClapTrap::_totalNumber;} +int ClapTrap::getNumber() const {return _number;} +int ClapTrap::getTotalNumber() const {return _totalNumber;} void ClapTrap::_increaseNumber() {ClapTrap::_totalNumber++;} -/* - * robots - */ +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ void ClapTrap::attack(const std::string & target) { @@ -92,7 +88,7 @@ void ClapTrap::attack(const std::string & target) { std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << _class << " " << _name; + action << _class << " " << _name << "-" << _number; if (_energy > 0 && _hit > 0) { @@ -120,22 +116,17 @@ void ClapTrap::takeDamage(unsigned int amount) { std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << _class << " " << _name; + action << _class << " " << _name << "-" << _number; - if (_energy > 0 && _hit > 0) + if (_hit > 0) { _hit -= amount; if (_hit < 0) _hit = 0; action << " looses " B_YELLOW << amount << RESET << " hit points" << '\n'; } - else - { - if (_energy <= 0) - action << " cannot take damage because " B_RED " is out of energy" RESET "\n"; - else if (_hit <= 0) - action << " cannot take damage because " B_RED " is out of hit" RESET "\n"; - } + else if (_hit <= 0) + action << " cannot take damage because " B_RED " is out of hit" RESET "\n"; state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; std::cout << state.str() << action.str(); @@ -147,7 +138,7 @@ void ClapTrap::beRepaired(unsigned int amount) { std::ostringstream state; state << B_CYAN "[" B_GREEN << _class[0] << _number << B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << _class << " " << _name; + action << _class << " " << _name << "-" << _number; if (_energy > 0 && _hit > 0) { @@ -168,3 +159,16 @@ void ClapTrap::beRepaired(unsigned int amount) { state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; std::cout << state.str() << action.str(); } + +/********************************************* + * STATICS + *********************************************/ + +int ClapTrap::_totalNumber = 0; + +std::string const ClapTrap::_dName = "robot"; +std::string const ClapTrap::_dClass = "ClapTrap"; +int const ClapTrap::_dHit = 10; +int const ClapTrap::_dEnergy = 10; +int const ClapTrap::_dAttack = 0; + diff --git a/d03/ex03/ClapTrap.hpp b/d03/ex03/ClapTrap.hpp index d1d3259..a0beeca 100644 --- a/d03/ex03/ClapTrap.hpp +++ b/d03/ex03/ClapTrap.hpp @@ -4,13 +4,12 @@ #include #include #include -#include class ClapTrap { public: - ClapTrap( std::string name ); // default/parametric constructor + ClapTrap( std::string name = ClapTrap::_dName ); ClapTrap( ClapTrap const & src ); // copy constructor ~ClapTrap( void ); // destructor @@ -21,28 +20,37 @@ public: void beRepaired(unsigned int amount); std::string getName() const; + std::string getClass() const; int getHit() const; int getEnergy() const; int getAttack() const; + int getNumber() const; protected: - std::string const _name; - std::string _class; - int _hit; - int _energy; - int _attack; - int _number; + int getTotalNumber() const; + + std::string _name; + std::string _class; + int _hit; + int _energy; + int _attack; + int _number; - int _getNumber(); void _increaseNumber(); private: - ClapTrap( void ); // default/parametric constructor - + void assignValues(ClapTrap & src); static int _totalNumber; + static const std::string _dName; + static const std::string _dClass; + static const int _dHit; + static const int _dEnergy; + static const int _dAttack; + static const int _dNumber; + }; #endif diff --git a/d03/ex03/DiamondTrap.cpp b/d03/ex03/DiamondTrap.cpp index 9a936c4..e8a344d 100644 --- a/d03/ex03/DiamondTrap.cpp +++ b/d03/ex03/DiamondTrap.cpp @@ -1,31 +1,61 @@ #include "DiamondTrap.hpp" -DiamondTrap::~DiamondTrap( std::string name ) : ScavTrap(name), FragTrap(name) { - - _class = "FragTrap"; - _hit = 100; - _energy = 100; - _attack = 30; - - std::cout << _class << " " << FragTrap::_name << " created with number " << _number << "\n"; +/********************************************* + * CONSTRUCTORS + *********************************************/ +DiamondTrap::DiamondTrap( std::string name ) +: ClapTrap(name + "_clap_name") { + _name = name; + _class = _dClass; + _hit = _dHit; + _energy = _dEnergy; + _attack = _dAttack; + std::cout << _class << " " << _name << "-" << _number << " created\n"; return; } -/* - * destructor - */ +DiamondTrap::DiamondTrap( DiamondTrap const & src ) { + _class = _dClass; + *this = src; + _number = getTotalNumber(); + std::cout << _class << " " << _name << "-" << _number << " copied from " << src._class << "-" << src._name << "-" << src._number << "\n"; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ DiamondTrap::~DiamondTrap( void ) { std::cout << _class << " " << DiamondTrap::_name << " destructed\n"; return; } -/* - * special capacity - */ +/********************************************* + * OPERATORS + *********************************************/ -void DiamondTrap::highFivesGuys() { +DiamondTrap & DiamondTrap::operator=( DiamondTrap const & rhs ) { + ClapTrap::operator=(rhs); + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ + +void DiamondTrap::whoAmI() { std::cout << _class << " " << DiamondTrap::_name << " wait for a high fives, common guys\n"; } +/********************************************* + * STATICS + *********************************************/ + +std::string const DiamondTrap::_dName = "robot"; +std::string const DiamondTrap::_dClass = "DiamondTrap"; +int const DiamondTrap::_dHit = 100; +int const DiamondTrap::_dEnergy = 100; +int const DiamondTrap::_dAttack = 50; + diff --git a/d03/ex03/DiamondTrap.hpp b/d03/ex03/DiamondTrap.hpp index ed1d20b..63cd4a0 100644 --- a/d03/ex03/DiamondTrap.hpp +++ b/d03/ex03/DiamondTrap.hpp @@ -4,19 +4,31 @@ # include # include # include "ClapTrap.hpp" +# include "FragTrap.hpp" +# include "ScavTrap.hpp" class DiamondTrap : public FragTrap, public ScavTrap { public: - DiamondTrap( std::string name ); - ~DiamondTrap( void ); + DiamondTrap( std::string name = DiamondTrap::_dName ); + DiamondTrap( DiamondTrap const & src ); // copy constructor + ~DiamondTrap(); // destructor + + DiamondTrap & operator=( DiamondTrap const & rhs ); // assignement operator void whoAmI(); private: - std::string _name; + std::string _name; + + static const std::string _dName; + static const std::string _dClass; + static const int _dHit; + static const int _dEnergy; + static const int _dAttack; + static const int _dNumber; }; #endif diff --git a/d03/ex03/FragTrap.cpp b/d03/ex03/FragTrap.cpp index 51f1d09..c8b4285 100644 --- a/d03/ex03/FragTrap.cpp +++ b/d03/ex03/FragTrap.cpp @@ -1,30 +1,59 @@ #include "FragTrap.hpp" +/********************************************* + * CONSTRUCTORS + *********************************************/ + FragTrap::FragTrap( std::string name ) : ClapTrap(name) { - - _class = "FragTrap"; - _hit = 100; - _energy = 100; - _attack = 30; - - std::cout << _class << " " << FragTrap::_name << " created with number " << _number << "\n"; - + _class = _dClass; + _hit = _dHit; + _energy = _dEnergy; + _attack = _dAttack; + std::cout << _class << " " << _name << "-" << _number << " created\n"; return; } -/* - * destructor - */ +FragTrap::FragTrap( FragTrap const & src ) { + _class = _dClass; + *this = src; + _number = getTotalNumber(); + std::cout << _class << " " << _name << "-" << _number << " copied from " << src._class << "-" << src._name << "-" << src._number << "\n"; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ FragTrap::~FragTrap( void ) { std::cout << _class << " " << FragTrap::_name << " destructed\n"; return; } -/* - * special capacity - */ +/********************************************* + * OPERATORS + *********************************************/ + +FragTrap & FragTrap::operator=( FragTrap const & rhs ) { + ClapTrap::operator=(rhs); + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ void FragTrap::highFivesGuys() { std::cout << _class << " " << FragTrap::_name << " wait for a high fives, common guys\n"; } + +/********************************************* + * STATICS + *********************************************/ + +std::string const FragTrap::_dName = "robot"; +std::string const FragTrap::_dClass = "FragTrap"; +int const FragTrap::_dHit = 100; +int const FragTrap::_dEnergy = 100; +int const FragTrap::_dAttack = 50; + diff --git a/d03/ex03/FragTrap.hpp b/d03/ex03/FragTrap.hpp index b52fdf7..b1abd7a 100644 --- a/d03/ex03/FragTrap.hpp +++ b/d03/ex03/FragTrap.hpp @@ -5,15 +5,27 @@ #include #include "ClapTrap.hpp" -class FragTrap : virtual public ClapTrap { +class FragTrap : public virtual ClapTrap { public: - FragTrap(std::string name); - ~FragTrap( void ); + FragTrap( std::string name = FragTrap::_dName ); + FragTrap( FragTrap const & src ); // copy constructor + ~FragTrap(); // destructor + + FragTrap & operator=( FragTrap const & rhs ); // assignement operator void highFivesGuys(); +private: + + static const std::string _dName; + static const std::string _dClass; + static const int _dHit; + static const int _dEnergy; + static const int _dAttack; + static const int _dNumber; + }; #endif diff --git a/d03/ex03/Makefile b/d03/ex03/Makefile index f4fc536..a616a9a 100644 --- a/d03/ex03/Makefile +++ b/d03/ex03/Makefile @@ -19,12 +19,14 @@ D_SRCS = . SRCS = main.cpp \ ClapTrap.cpp \ ScavTrap.cpp \ - FragTrap.cpp + FragTrap.cpp \ + DiamondTrap.cpp D_HEADERS = . HEADERS = ClapTrap.hpp \ ScavTrap.hpp \ - FragTrap.hpp + FragTrap.hpp \ + DiamondTrap.hpp D_OBJS = builds OBJS = $(SRCS:%.cpp=$(D_OBJS)/%.o) diff --git a/d03/ex03/ScavTrap.cpp b/d03/ex03/ScavTrap.cpp index df8bc14..fa611e7 100644 --- a/d03/ex03/ScavTrap.cpp +++ b/d03/ex03/ScavTrap.cpp @@ -1,30 +1,59 @@ #include "ScavTrap.hpp" +/********************************************* + * CONSTRUCTORS + *********************************************/ + ScavTrap::ScavTrap( std::string name ) : ClapTrap(name) { - - _class = "ScavTrap"; - _hit = 100; - _energy = 50; - _attack = 20; - - std::cout << _class << " " << ScavTrap::_name << " created with number " << _number << "\n"; - + _class = _dClass; + _hit = _dHit; + _energy = _dEnergy; + _attack = _dAttack; + std::cout << _class << " " << _name << "-" << _number << " created\n"; return; } -/* - * destructor - */ +ScavTrap::ScavTrap( ScavTrap const & src ) { + _class = _dClass; + *this = src; + _number = getTotalNumber(); + std::cout << _class << " " << _name << "-" << _number << " copied from " << src._class << "-" << src._name << "-" << src._number << "\n"; + return; +} + +/********************************************* + * DESTRUCTORS + *********************************************/ ScavTrap::~ScavTrap( void ) { - std::cout << _class << " " << ScavTrap::_name << " destructed\n"; + std::cout << _class << " " << _name << "-" << _number << " destructed\n"; return; } -/* - * special capacity - */ +/********************************************* + * OPERATORS + *********************************************/ + +ScavTrap & ScavTrap::operator=( ScavTrap const & rhs ) { + ClapTrap::operator=(rhs); + return *this; +} + +/********************************************* + * PUBLIC MEMBER FUNCTIONS + *********************************************/ void ScavTrap::guardGate() { - std::cout << _class << " " << ScavTrap::_name << " entered special mode Gate Keeper\n"; + std::cout << _class << " " << _name << "-" << _number << " entered special mode Gate Keeper\n"; } + +/********************************************* + * STATICS + *********************************************/ + +std::string const ScavTrap::_dName = "robot"; +std::string const ScavTrap::_dClass = "ScavTrap"; +int const ScavTrap::_dHit = 100; +int const ScavTrap::_dEnergy = 50; +int const ScavTrap::_dAttack = 20; + diff --git a/d03/ex03/ScavTrap.hpp b/d03/ex03/ScavTrap.hpp index 4dd9ba9..adb914c 100644 --- a/d03/ex03/ScavTrap.hpp +++ b/d03/ex03/ScavTrap.hpp @@ -5,15 +5,27 @@ #include #include "ClapTrap.hpp" -class ScavTrap : virtual public ClapTrap { +class ScavTrap : public virtual ClapTrap { public: - ScavTrap(std::string name); - ~ScavTrap(); + ScavTrap( std::string name = ScavTrap::_dName ); + ScavTrap( ScavTrap const & src ); // copy constructor + ~ScavTrap(); // destructor + + ScavTrap & operator=( ScavTrap const & rhs ); // assignement operator void guardGate(); +private: + + static const std::string _dName; + static const std::string _dClass; + static const int _dHit; + static const int _dEnergy; + static const int _dAttack; + static const int _dNumber; + }; #endif diff --git a/d03/ex03/color.h b/d03/ex03/color.h deleted file mode 100644 index e313f5f..0000000 --- a/d03/ex03/color.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef COLOR_H -# define COLOR_H - -# define GRAY "\e[0;30m" -# define RED "\e[0;31m" -# define GREEN "\e[0;32m" -# define YELLOW "\e[0;33m" -# define BLUE "\e[0;34m" -# define PURPLE "\e[0;35m" -# define CYAN "\e[0;36m" -# define WHITE "\e[0;37m" - -# define B_GRAY "\e[1;30m" -# define B_RED "\e[1;31m" -# define B_GREEN "\e[1;32m" -# define B_YELLOW "\e[1;33m" -# define B_BLUE "\e[1;34m" -# define B_PURPLE "\e[1;35m" -# define B_CYAN "\e[1;36m" -# define B_WHITE "\e[1;37m" - -# define RESET "\e[0m" - -#endif diff --git a/d03/ex03/main.cpp b/d03/ex03/main.cpp index 6689f6e..1297e29 100644 --- a/d03/ex03/main.cpp +++ b/d03/ex03/main.cpp @@ -1,5 +1,8 @@ +#include "ClapTrap.hpp" #include "ScavTrap.hpp" #include "FragTrap.hpp" +#include "DiamondTrap.hpp" + #include template < typename U, typename V > @@ -19,7 +22,9 @@ int main() { FragTrap robot1("robot1"); ClapTrap robot2("robot2"); ScavTrap robot3("robot3"); - ScavTrap robot4("robot4"); + std::cout << "tout\n"; + DiamondTrap robot4("robot4"); + std::cout << "tend\n"; ClapTrap robot5("robot5"); ScavTrap robot6("robot6"); FragTrap robot7("robot7"); diff --git a/d03/ex03/robots b/d03/ex03/robots index 0f19ff6..5e22321 100755 Binary files a/d03/ex03/robots and b/d03/ex03/robots differ