From 9e3822aee0f4b01a8aa024ecd48d525ebe70e248 Mon Sep 17 00:00:00 2001 From: Camille Chauvet Date: Wed, 9 Aug 2023 13:56:36 +0000 Subject: [PATCH] add: ex02 --- ex02/Makefile | 25 +++++++++++ ex02/src/ClapTrap.cpp | 96 +++++++++++++++++++++++++++++++++++++++++++ ex02/src/ClapTrap.hpp | 29 +++++++++++++ ex02/src/FragTrap.cpp | 46 +++++++++++++++++++++ ex02/src/FragTrap.hpp | 16 ++++++++ ex02/src/ScavTrap.cpp | 60 +++++++++++++++++++++++++++ ex02/src/ScavTrap.hpp | 20 +++++++++ ex02/src/main.cpp | 22 ++++++++++ 8 files changed, 314 insertions(+) create mode 100644 ex02/Makefile create mode 100644 ex02/src/ClapTrap.cpp create mode 100644 ex02/src/ClapTrap.hpp create mode 100644 ex02/src/FragTrap.cpp create mode 100644 ex02/src/FragTrap.hpp create mode 100644 ex02/src/ScavTrap.cpp create mode 100644 ex02/src/ScavTrap.hpp create mode 100644 ex02/src/main.cpp diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..6601adb --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,25 @@ +CXX = c++ +CPPFLAGS = -std=c++98 -Wall -Wextra -Werror -g +SRCDIR = src +OBJDIR = obj +NAME = ex02 + +SRCS = $(wildcard $(SRCDIR)/*.cpp) +OBJS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS)) + +all: $(NAME) + +$(OBJDIR)/%.o: $(SRCDIR)/%.cpp + mkdir -p obj + $(CXX) $(CPPFLAGS) -c $< -o $@ + +$(NAME): $(OBJS) + $(CXX) $(CPPFLAGS) $^ -o $@ + +clean: + rm -rf $(OBJDIR)/*.o + +fclean: clean + rm -fr $(NAME) + +re: fclean all diff --git a/ex02/src/ClapTrap.cpp b/ex02/src/ClapTrap.cpp new file mode 100644 index 0000000..f30fc2d --- /dev/null +++ b/ex02/src/ClapTrap.cpp @@ -0,0 +1,96 @@ +#include "ClapTrap.hpp" +#include + +ClapTrap::ClapTrap(): + _name(""), + _life(10), + _energy(10), + _damage(0) +{ + std::cout << "ClapTrap()" << std::endl; +} + +ClapTrap::ClapTrap(const std::string& name): + _name(name), + _life(10), + _energy(10), + _damage(0) +{ + std::cout << "ClapTrap(" << name << ")" << std::endl; +} + +ClapTrap::ClapTrap(const ClapTrap& src) +{ + std::cout << "ClapTrap(ClapTrap)" << std::endl; + *this = src; +} + +ClapTrap::~ClapTrap() +{ + std::cout << "~ClapTrap()" << std::endl; +} + +ClapTrap& ClapTrap::operator=(const ClapTrap& src) +{ + this->_name = src._name; + this->_life = src._life; + this->_energy = src._energy; + this->_damage = src._damage; + + return *this; +} + + +void ClapTrap::beRepaired(unsigned int amount) +{ + if (this->_life == 0 || this->_energy == 0) + { + std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl; + return; + } + this->_life += amount; + this->_energy--; + std::cerr << "ClapTrap " << this->_name << " beRepaired causing life is now " << this->_life << std::endl; +} + +void ClapTrap::takeDamage(unsigned int amount) +{ + if (this->_life == 0 || this->_energy == 0) + { + std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl; + return; + } + this->_life -= amount; + std::cout << "ClapTrap " << this->_name << " be attacked causing " << amount << " points of damage!" << std::endl; +} + +void ClapTrap::attack(const std::string &target) +{ + if (this->_life == 0 || this->_energy == 0) + { + std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl; + return; + } + this->_energy--; + std::cerr << "ClapTrap " << this->_name << " attacks " << target << ", causing " << this->_damage << " points of damage" << std::endl; +} + +const std::string& ClapTrap::getName() const +{ + return this->_name; +} + +int ClapTrap::getLife() const +{ + return this->_life; +} + +int ClapTrap::getEnergy() const +{ + return this->_energy; +} + +int ClapTrap::getDamage() const +{ + return this->_damage; +} diff --git a/ex02/src/ClapTrap.hpp b/ex02/src/ClapTrap.hpp new file mode 100644 index 0000000..407df17 --- /dev/null +++ b/ex02/src/ClapTrap.hpp @@ -0,0 +1,29 @@ +#pragma once + +#include + +class ClapTrap +{ + protected: + std::string _name; + int _life; + int _energy; + int _damage; + + public: + ClapTrap(); + ClapTrap(const ClapTrap& src); + ClapTrap(const std::string& name); + virtual ~ClapTrap(); + + ClapTrap &operator=(const ClapTrap& src); + + virtual void attack(const std::string& target); + void takeDamage(unsigned int amount); + void beRepaired(unsigned int amount); + + const std::string& getName() const; + int getLife() const; + int getEnergy() const; + int getDamage() const; +}; diff --git a/ex02/src/FragTrap.cpp b/ex02/src/FragTrap.cpp new file mode 100644 index 0000000..f56a16f --- /dev/null +++ b/ex02/src/FragTrap.cpp @@ -0,0 +1,46 @@ +#include "FragTrap.hpp" +#include +#include + +FragTrap::FragTrap() +{ + this->_life = 100; + this->_energy = 100; + this->_damage = 30; + this->_name = ""; + std::cout << "FragTrap()" << std::endl; +} + +FragTrap::FragTrap(const FragTrap& src): ClapTrap(src) +{ + std::cout << "FragTrap(FragTrap)" << std::endl; +} + +FragTrap::FragTrap(const std::string& name) +{ + this->_life = 100; + this->_energy = 100; + this->_damage = 30; + this->_name = name; + std::cout << "FragTrap(" << name << ")" << std::endl; +} + +FragTrap& FragTrap::operator=(const FragTrap &src) +{ + this->_name = src._name; + this->_life = src._life; + this->_energy = src._energy; + this->_damage = src._damage; + + return *this; +} + +FragTrap::~FragTrap() +{ + std::cout << "~FragTrap()" << std::endl; +} + +void FragTrap::highFivesGuys(void) +{ + std::cout << "high fives ?" << std::endl; +} diff --git a/ex02/src/FragTrap.hpp b/ex02/src/FragTrap.hpp new file mode 100644 index 0000000..9a122d0 --- /dev/null +++ b/ex02/src/FragTrap.hpp @@ -0,0 +1,16 @@ +#pragma once + +#include "ClapTrap.hpp" + +class FragTrap: public ClapTrap +{ + public: + FragTrap(); + FragTrap(const std::string& name); + FragTrap(const FragTrap& src); + ~FragTrap(); + + FragTrap& operator=(const FragTrap& src); + + void highFivesGuys(void); +}; diff --git a/ex02/src/ScavTrap.cpp b/ex02/src/ScavTrap.cpp new file mode 100644 index 0000000..15ba1c0 --- /dev/null +++ b/ex02/src/ScavTrap.cpp @@ -0,0 +1,60 @@ +#include "ScavTrap.hpp" +#include "ClapTrap.hpp" + +#include +#include + +ScavTrap::ScavTrap() +{ + this->_name = ""; + this->_life = 100; + this->_energy = 50; + this->_damage = 20; + std::cout << "ScavTrap()" << std::endl; +} + +ScavTrap::ScavTrap(const std::string& name) +{ + this->_name = name; + this->_life = 100; + this->_energy = 50; + this->_damage = 20; + std::cout << "ScavTrap(" << name << ")" << std::endl; +} + +ScavTrap::ScavTrap(const ScavTrap& src): ClapTrap(src) +{ + *this = src; + std::cout << "ScavTrap(ScavTrap)" << std::endl; +} + +ScavTrap::~ScavTrap() +{ + std::cout << "~ScavTrap()" << std::endl; +} + +ScavTrap& ScavTrap::operator=(const ScavTrap &src) +{ + this->_life = src._life; + this->_name = src._name; + this->_energy = src._energy; + this->_damage = src._damage; + + return *this; +} + +void ScavTrap::guardGate() +{ + std::cout << "ScavTrap " << this->_name << " turn in Gate keeper mode" << std::endl; +} + +void ScavTrap::attack(const std::string& target) +{ + if (this->_life == 0 || this->_energy == 0) + { + std::cerr << "error: ScavTrap " << this->_name << " dead" << std::endl; + return; + } + this->_energy--; + std::cerr << "ScavTrap " << this->_name << " attacks " << target << ", causing " << this->_damage << " points of damage" << std::endl; +} diff --git a/ex02/src/ScavTrap.hpp b/ex02/src/ScavTrap.hpp new file mode 100644 index 0000000..f1cc842 --- /dev/null +++ b/ex02/src/ScavTrap.hpp @@ -0,0 +1,20 @@ +#pragma once + +#include "ClapTrap.hpp" +#include + +class ScavTrap: public ClapTrap +{ + public: + ScavTrap(); + ScavTrap(const std::string& name); + ScavTrap(const ScavTrap& src); + + ~ScavTrap(); + + ScavTrap& operator=(const ScavTrap& src); + + void guardGate(); + void attack(const std::string& target); + +}; diff --git a/ex02/src/main.cpp b/ex02/src/main.cpp new file mode 100644 index 0000000..ff0afbb --- /dev/null +++ b/ex02/src/main.cpp @@ -0,0 +1,22 @@ +#include "FragTrap.hpp" + +int main() +{ + ClapTrap dead; + FragTrap active ("Warrior"); + FragTrap copy (active); + active = copy; + dead.attack(active.getName()); + active.attack(dead.getName()); + dead.takeDamage(active.getDamage()); + active.attack(dead.getName()); + dead.takeDamage(active.getDamage()); + active.attack(dead.getName()); + dead.takeDamage(active.getDamage()); + active.attack(dead.getName()); + dead.takeDamage(active.getDamage()); + active.attack(dead.getName()); + active.takeDamage(3); + copy.highFivesGuys(); + dead.beRepaired(42); +}