From b24335a78ebeb3f977b42dfe14cbd44611df1e57 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Tue, 22 Feb 2022 22:18:43 +0100 Subject: [PATCH] save work of day d03 ex03 l'ordi plante --- d03/ex03/ClapTrap.cpp | 138 ++++++++++++++++++++------------------- d03/ex03/ClapTrap.hpp | 30 +++++---- d03/ex03/DiamondTrap.cpp | 60 ++++++++++++----- d03/ex03/DiamondTrap.hpp | 18 ++++- d03/ex03/FragTrap.cpp | 57 ++++++++++++---- d03/ex03/FragTrap.hpp | 18 ++++- d03/ex03/Makefile | 6 +- d03/ex03/ScavTrap.cpp | 61 ++++++++++++----- d03/ex03/ScavTrap.hpp | 18 ++++- d03/ex03/color.h | 24 ------- d03/ex03/main.cpp | 7 +- d03/ex03/robots | Bin 38472 -> 55080 bytes 12 files changed, 278 insertions(+), 159 deletions(-) delete mode 100644 d03/ex03/color.h 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 0f19ff67a6b5ab90a1e8892c6135a88b040ddd2b..5e22321973093a3d5a700736ab3b021b0da15fd4 100755 GIT binary patch literal 55080 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 R1w?+v6QXjwtAVS^{x7kkV(I_@ literal 38472 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