From 787336b06d7cc795cebfa70762ab6fdad8f1daa4 Mon Sep 17 00:00:00 2001 From: Hugo LAMY Date: Fri, 18 Feb 2022 13:22:58 +0100 Subject: [PATCH] d03 ex01 inheritence ok, avec ref a parent constructor --- d03/ex01/ClapTrap.cpp | 73 ++++++++++++++++++++-------------- d03/ex01/ClapTrap.hpp | 6 ++- d03/ex01/ScavTrap.cpp | 7 ++-- d03/ex01/main.cpp | 89 ++++++++++++++++++++++-------------------- d03/ex01/robots | Bin 0 -> 29312 bytes 5 files changed, 98 insertions(+), 77 deletions(-) create mode 100755 d03/ex01/robots diff --git a/d03/ex01/ClapTrap.cpp b/d03/ex01/ClapTrap.cpp index 8ba15d2..5c7246d 100644 --- a/d03/ex01/ClapTrap.cpp +++ b/d03/ex01/ClapTrap.cpp @@ -4,13 +4,14 @@ * statics */ -int ClapTrap::_number = 0; +int ClapTrap::_totalNumber = 0; /* * default/parametric constructor */ ClapTrap::ClapTrap( void ) { + std::cout << "claptrap created without name\n"; return; } @@ -20,7 +21,7 @@ ClapTrap::ClapTrap( void ) { */ ClapTrap::~ClapTrap( void ) { - std::cout << "claptrap " << _name << " destructed\n"; + std::cout << _class << " " << _name << " destructed\n"; return; } @@ -29,7 +30,7 @@ ClapTrap::~ClapTrap( void ) { */ ClapTrap::ClapTrap( ClapTrap const & src ) { - std::cout << "claptrap " << _name << " copied\n"; + std::cout << _class << " " << _name << " copied\n"; *this = src; return; } @@ -39,7 +40,6 @@ ClapTrap::ClapTrap( ClapTrap const & src ) { */ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { - std::cout << "claptrap " << _name << " assigned\n"; if ( this != &rhs ) { @@ -48,6 +48,7 @@ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { this->_attack = rhs.getAttack(); } + std::cout << _class << " " << _name << " assigned\n"; return *this; } @@ -57,10 +58,16 @@ ClapTrap & ClapTrap::operator=( ClapTrap const & rhs ) { */ ClapTrap::ClapTrap( std::string name ) : _name(name) { - std::cout << "claptrap " << _name << " created\n"; + + ClapTrap::_increaseNumber(); + + _class = "ClapTrap"; _hit = 10; _energy = 10; _attack = 1; + _number = _getNumber(); + + std::cout << _class << " " << _name << " created with number " << _number << "\n"; return; } @@ -72,6 +79,8 @@ std::string ClapTrap::getName() const {return _name;} int ClapTrap::getHit() const {return _hit;} int ClapTrap::getEnergy() const {return _energy;} int ClapTrap::getAttack() const {return _attack;} +int ClapTrap::_getNumber() {return ClapTrap::_totalNumber;} +void ClapTrap::_increaseNumber() {ClapTrap::_totalNumber++;} /* * robots @@ -82,21 +91,23 @@ void ClapTrap::attack(const std::string & target) { std::ostringstream action; std::ostringstream state; - state << B_CYAN "[" B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << " ClapTrap " << _name; + 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; - if (_energy && _hit) + if (_energy > 0 && _hit > 0) { _energy--; - action << " attacked " << target << ", causing " B_YELLOW << _attack << RESET << " points of damage!" << '\n'; + if (_energy < 0) + _energy = 0; + action << " attacked " << target << ", causing " B_YELLOW << _attack << RESET << " points of damage" << '\n'; } else { _attack = 0; - if (!_energy) - action << "cannot attack because " B_RED " is out of energy\n" RESET; - else if (!_hit) - action << "cannot attack because " B_RED " is out of hit\n" RESET; + if (_energy <= 0) + action << " cannot attack because " B_RED " is out of energy" RESET"\n"; + else if (_hit <= 0) + action << " cannot attack because " B_RED " is out of hit" RESET "\n"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; @@ -108,20 +119,22 @@ void ClapTrap::takeDamage(unsigned int amount) { std::ostringstream action; std::ostringstream state; - state << B_CYAN "[" B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << " ClapTrap " << _name; + 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; - if (_energy && _hit) + if (_energy > 0 && _hit > 0) { _hit -= amount; - action << " looses " B_YELLOW << amount << RESET << " points of damage :/" << '\n'; + if (_hit < 0) + _hit = 0; + action << " looses " B_YELLOW << amount << RESET << " hit points" << '\n'; } else { - if (!_energy) - action << "cannot take damage because " B_RED " is out of energy\n" RESET; - else if (!_hit) - action << "cannot take damage because " B_RED " is out of hit\n" RESET; + 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"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; @@ -133,21 +146,23 @@ void ClapTrap::beRepaired(unsigned int amount) { std::ostringstream action; std::ostringstream state; - state << B_CYAN "[" B_PURPLE "h,e,a" B_CYAN ":" B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "->"; - action << " ClapTrap " << _name; + 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; - if (_energy && _hit) + if (_energy > 0 && _hit > 0) { _energy--; + if (_energy < 0) + _energy = 0; _hit += amount; - action << " repaired itself and gained " B_YELLOW << amount << RESET << " points of life :)" << '\n'; + action << " repaired itself and gained " B_YELLOW << amount << RESET << " points of life" << '\n'; } else { - if (!_energy) - action << "cannot repair itself because " B_RED " is out of energy\n" RESET; - else if (!_hit) - action << "cannot repair itself because " B_RED " is out of hit\n" RESET; + if (_energy <= 0) + action << " cannot repair itself because " B_RED " is out of energy" RESET "\n"; + else if (_hit <= 0) + action << " cannot repair itself because " B_RED " is out of hit" RESET "\n"; } state << B_BLUE << _hit << "," << _energy << "," << _attack << B_CYAN "]" RESET; diff --git a/d03/ex01/ClapTrap.hpp b/d03/ex01/ClapTrap.hpp index d836cd6..7d50041 100644 --- a/d03/ex01/ClapTrap.hpp +++ b/d03/ex01/ClapTrap.hpp @@ -29,16 +29,18 @@ public: protected: std::string _name; + std::string _class; int _hit; int _energy; int _attack; + int _number; - void _getNumber(); + int _getNumber(); void _increaseNumber(); private: - static int _number; + static int _totalNumber; }; diff --git a/d03/ex01/ScavTrap.cpp b/d03/ex01/ScavTrap.cpp index 63689e3..16bd39d 100644 --- a/d03/ex01/ScavTrap.cpp +++ b/d03/ex01/ScavTrap.cpp @@ -1,13 +1,14 @@ #include "ScavTrap.hpp" -ScavTrap::ScavTrap( std::string name ) { +ScavTrap::ScavTrap( std::string name ) : ClapTrap(name) { _name = name; + _class = "ScavTrap"; _hit = 100; _energy = 50; _attack = 20; - std::cout << "scavtrap " << _name << " created\n"; + std::cout << _class << " " << _name << " created with number " << _number << "\n"; return; } @@ -17,6 +18,6 @@ ScavTrap::ScavTrap( std::string name ) { */ ScavTrap::~ScavTrap( void ) { - std::cout << "scavtrap " << _name << " destructed\n"; + std::cout << _class << " " << _name << " destructed\n"; return; } diff --git a/d03/ex01/main.cpp b/d03/ex01/main.cpp index e66d143..ca0fe1d 100644 --- a/d03/ex01/main.cpp +++ b/d03/ex01/main.cpp @@ -1,53 +1,56 @@ #include "ScavTrap.hpp" +void goAttack(ClapTrap & robot1, ClapTrap & robot2) { + + robot1.attack(robot2.getName()); + robot2.takeDamage(robot1.getAttack()); + robot2.beRepaired(robot1.getAttack()); + +} + +void goAttack(ScavTrap & robot1, ScavTrap & robot2) { + + robot1.attack(robot2.getName()); + robot2.takeDamage(robot1.getAttack()); + robot2.beRepaired(robot1.getAttack()); + +} + +void goAttack(ClapTrap & robot1, ScavTrap & robot2) { + + robot1.attack(robot2.getName()); + robot2.takeDamage(robot1.getAttack()); + robot2.beRepaired(robot1.getAttack()); + +} + +void goAttack(ScavTrap & robot1, ClapTrap & robot2) { + + robot1.attack(robot2.getName()); + robot2.takeDamage(robot1.getAttack()); + robot2.beRepaired(robot1.getAttack()); + +} + int main() { ClapTrap robot1("robot1"); ScavTrap robot2("robot2"); + ScavTrap robot3("robot3"); + ClapTrap robot4("robot4"); - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); - - robot2.attack(robot1.getName()); - robot1.takeDamage(robot2.getAttack()); - robot1.beRepaired(robot2.getAttack()); - - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); - - robot2.attack(robot1.getName()); - robot1.takeDamage(robot2.getAttack()); - robot1.beRepaired(robot2.getAttack()); - - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); - - robot2.attack(robot1.getName()); - robot1.takeDamage(robot2.getAttack()); - robot1.beRepaired(robot2.getAttack()); - - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); - - robot2.attack(robot1.getName()); - robot1.takeDamage(robot2.getAttack()); - robot1.beRepaired(robot2.getAttack()); - - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); - - robot2.attack(robot1.getName()); - robot1.takeDamage(robot2.getAttack()); - robot1.beRepaired(robot2.getAttack()); - - robot1.attack(robot2.getName()); - robot2.takeDamage(robot1.getAttack()); - robot2.beRepaired(robot1.getAttack()); + goAttack(robot1, robot2); + goAttack(robot2, robot1); + goAttack(robot1, robot3); + goAttack(robot1, robot4); + goAttack(robot4, robot2); + goAttack(robot2, robot3); + goAttack(robot2, robot4); + goAttack(robot3, robot1); + goAttack(robot3, robot4); + goAttack(robot2, robot1); + goAttack(robot2, robot4); + goAttack(robot1, robot3); return 0; } diff --git a/d03/ex01/robots b/d03/ex01/robots new file mode 100755 index 0000000000000000000000000000000000000000..07859a42686a7168e371dbac8ccab7c4c25d2905 GIT binary patch literal 29312 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 F{U^fp?;QXD literal 0 HcmV?d00001