diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c6f9a44 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.vscode/settings.json diff --git a/Makefile b/Makefile index e69de29..b1953c0 100644 --- a/Makefile +++ b/Makefile @@ -0,0 +1,35 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile :+: :+: # +# +:+ # +# By: whaffman +#+ # +# +#+ # +# Created: 2025/03/21 14:50:00 by whaffman #+# #+# # +# Updated: 2025/03/21 14:58:40 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +EX = $(shell find . -maxdepth 1 -type d -name 'ex*' -exec basename {} \;) + +all: + for ex in $(EX); do \ + $(MAKE) -C $$ex; \ + done + +clean: + for ex in $(EX); do \ + $(MAKE) -C $$ex clean; \ + done + +fclean: + for ex in $(EX); do \ + $(MAKE) -C $$ex fclean; \ + done + +re: + for ex in $(EX); do \ + $(MAKE) -C $$ex re; \ + done + +.PHONY: all clean fclean re \ No newline at end of file diff --git a/common.mk b/common.mk new file mode 100644 index 0000000..4bfab0b --- /dev/null +++ b/common.mk @@ -0,0 +1,35 @@ +# **************************************************************************** # +# # +# :::::::: # +# common.mk :+: :+: # +# +:+ # +# By: whaffman +#+ # +# +#+ # +# Created: 2025/03/21 15:00:16 by whaffman #+# #+# # +# Updated: 2025/03/21 15:04:44 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +INC = -I./inc +VPATH = src +OBJ = $(SRC:.cpp=.o) +CC = c++ +CFLAGS = -Wall -Wextra -Werror + +all: $(NAME) + +$(NAME): $(OBJ) + $(CC) $(CFLAGS) $(OBJ) -o $(NAME) + +%.o: %.cpp + $(CC) $(CFLAGS) $(INC) -c $< -o $@ + +clean: + rm -f $(OBJ) + +fclean: clean + rm -f $(NAME) + +re: fclean all + +.PHONY: all clean fclean re \ No newline at end of file diff --git a/ex00/Makefile b/ex00/Makefile new file mode 100644 index 0000000..ad94e21 --- /dev/null +++ b/ex00/Makefile @@ -0,0 +1,16 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile :+: :+: # +# +:+ # +# By: whaffman +#+ # +# +#+ # +# Created: 2025/03/24 15:14:58 by whaffman #+# #+# # +# Updated: 2025/03/27 16:58:56 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +NAME= ClapTrap +SRC= ClapTrap.cpp main.cpp + +-include ../common.mk diff --git a/ex00/inc/ClapTrap.hpp b/ex00/inc/ClapTrap.hpp new file mode 100644 index 0000000..2c61237 --- /dev/null +++ b/ex00/inc/ClapTrap.hpp @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ClapTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/27 16:26:32 by whaffman #+# #+# */ +/* Updated: 2025/03/27 16:29:00 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class ClapTrap +{ +private: + std::string _name; + int _hitpoints; + int _energy_points; + int _attack_damage; + +public: + ClapTrap(); + ClapTrap(std::string name); + ClapTrap(ClapTrap const &src); + ~ClapTrap(); + + ClapTrap &operator=(ClapTrap const &rhs); + + void attack(std::string const &target); + void takeDamage(unsigned int amount); + void beRepaired(unsigned int amount); +}; diff --git a/ex00/src/ClapTrap.cpp b/ex00/src/ClapTrap.cpp new file mode 100644 index 0000000..0d9017a --- /dev/null +++ b/ex00/src/ClapTrap.cpp @@ -0,0 +1,77 @@ +#include "ClapTrap.hpp" +#include + +ClapTrap::ClapTrap() +{ + std::cout << "A nameless ClapTrap is created!" << std::endl; + _name = "a Nameless ClapTrap"; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; +} + +ClapTrap::ClapTrap(std::string name) +{ + std::cout << "ClapTrap " << name << " is created!" << std::endl; + _name = name; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; +} + +ClapTrap::ClapTrap(ClapTrap const &src) +{ + std::cout << "ClapTrap " << src._name << " is copied!" << std::endl; + _name = src._name; + _hitpoints = src._hitpoints; + _energy_points = src._energy_points; + _attack_damage = src._attack_damage; + +} + +ClapTrap::~ClapTrap() +{ + std::cout << "ClapTrap " << _name << " is destroyed!" << std::endl; +} + +ClapTrap &ClapTrap::operator=(ClapTrap const &rhs) +{ + if (this == &rhs) + return *this; + + std::cout << "ClapTrap " << rhs._name << " is assigned to ClapTrap formely known as " << _name << "!" << std::endl; + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + return *this; +} + +void ClapTrap::attack(std::string const &target) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap " << _name << " is too tired to attack!" << std::endl; + return ; + } + _energy_points -= 1; + std::cout << "ClapTrap " << _name << " attacks " << target << ", causing " << _attack_damage << " points of damage!" << std::endl; +} + +void ClapTrap::takeDamage(unsigned int amount) +{ + _hitpoints -= amount; + std::cout << "ClapTrap " << _name << " takes " << amount << " points of damage!" << std::endl; +} + +void ClapTrap::beRepaired(unsigned int amount) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap " << _name << " is too tired to repair!" << std::endl; + return ; + } + _hitpoints += amount; + _energy_points -= 1; + std::cout << "ClapTrap " << _name << " is repaired for " << amount << " points!" << std::endl; +} diff --git a/ex00/src/main.cpp b/ex00/src/main.cpp new file mode 100644 index 0000000..7cdbade --- /dev/null +++ b/ex00/src/main.cpp @@ -0,0 +1,39 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* main.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/27 16:56:23 by whaffman #+# #+# */ +/* Updated: 2025/03/27 17:02:31 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include "ClapTrap.hpp" + +int main() +{ + ClapTrap claptrap("Rudolph"); + ClapTrap claptrap2(claptrap); + ClapTrap claptrap3; + claptrap3 = claptrap; + ClapTrap claptrap4("Eduard"); + + claptrap.attack("enemy"); + claptrap.takeDamage(5); + claptrap.beRepaired(3); + + claptrap2.attack("enemy"); + claptrap2.takeDamage(5); + claptrap2.beRepaired(3); + + claptrap3.attack("enemy"); + claptrap3.takeDamage(5); + + claptrap4.attack("itself"); + claptrap4.takeDamage(5); + claptrap4.beRepaired(4); + + return 0; +} \ No newline at end of file diff --git a/ex01/Makefile b/ex01/Makefile new file mode 100644 index 0000000..bf11a4b --- /dev/null +++ b/ex01/Makefile @@ -0,0 +1,16 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile :+: :+: # +# +:+ # +# By: whaffman +#+ # +# +#+ # +# Created: 2025/03/24 15:14:58 by whaffman #+# #+# # +# Updated: 2025/03/28 11:35:32 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +NAME= ScavTrap +SRC= main.cpp ScavTrap.cpp ClapTrap.cpp + +-include ../common.mk diff --git a/ex01/inc/ClapTrap.hpp b/ex01/inc/ClapTrap.hpp new file mode 100644 index 0000000..cec2192 --- /dev/null +++ b/ex01/inc/ClapTrap.hpp @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ClapTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/27 16:26:32 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:35:08 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class ClapTrap +{ +protected: + std::string _name; + int _hitpoints; + int _energy_points; + int _attack_damage; + +public: + ClapTrap(); + ClapTrap(std::string name); + ClapTrap(ClapTrap const &src); + ~ClapTrap(); + + ClapTrap &operator=(ClapTrap const &rhs); + + void attack(std::string const &target); + void takeDamage(unsigned int amount); + void beRepaired(unsigned int amount); +}; diff --git a/ex01/inc/ScavTrap.hpp b/ex01/inc/ScavTrap.hpp new file mode 100644 index 0000000..3736ed6 --- /dev/null +++ b/ex01/inc/ScavTrap.hpp @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ScavTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:28:29 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:54:16 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include +#include "ClapTrap.hpp" + +class ScavTrap : public ClapTrap +{ +private: + bool _guard_mode; + +public: + ScavTrap(); + ScavTrap(std::string name); + ScavTrap(ScavTrap const &src); + ~ScavTrap(); + + ScavTrap &operator=(ScavTrap const &rhs); + + void attack(std::string const &target); + void guardGate(); +}; \ No newline at end of file diff --git a/ex01/src/ClapTrap.cpp b/ex01/src/ClapTrap.cpp new file mode 100644 index 0000000..ecabf34 --- /dev/null +++ b/ex01/src/ClapTrap.cpp @@ -0,0 +1,78 @@ +#include "ClapTrap.hpp" +#include + +ClapTrap::ClapTrap() +{ + _name = "a Nameless ClapTrap"; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; + + std::cout << "ClapTrap:: " << _name <<" is created!" << std::endl; +} + +ClapTrap::ClapTrap(std::string name) +{ + std::cout << "ClapTrap:: " << name << " is created!" << std::endl; + _name = name; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; +} + +ClapTrap::ClapTrap(ClapTrap const &src) +{ + std::cout << "ClapTrap:: " << src._name << " is copied!" << std::endl; + _name = src._name; + _hitpoints = src._hitpoints; + _energy_points = src._energy_points; + _attack_damage = src._attack_damage; + +} + +ClapTrap::~ClapTrap() +{ + std::cout << "ClapTrap:: " << _name << " is destroyed!" << std::endl; +} + +ClapTrap &ClapTrap::operator=(ClapTrap const &rhs) +{ + if (this == &rhs) + return *this; + + std::cout << "ClapTrap:: " << rhs._name << " is assigned to ClapTrap formely known as " << _name << "!" << std::endl; + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + return *this; +} + +void ClapTrap::attack(std::string const &target) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap:: " << _name << " is too tired to attack!" << std::endl; + return ; + } + _energy_points -= 1; + std::cout << "ClapTrap:: " << _name << " attacks " << target << ", causing " << _attack_damage << " points of damage!" << std::endl; +} + +void ClapTrap::takeDamage(unsigned int amount) +{ + _hitpoints -= amount; + std::cout << "ClapTrap:: " << _name << " takes " << amount << " points of damage!" << std::endl; +} + +void ClapTrap::beRepaired(unsigned int amount) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap:: " << _name << " is too tired to repair!" << std::endl; + return ; + } + _hitpoints += amount; + _energy_points -= 1; + std::cout << "ClapTrap:: " << _name << " is repaired for " << amount << " points!" << std::endl; +} diff --git a/ex01/src/ScavTrap.cpp b/ex01/src/ScavTrap.cpp new file mode 100644 index 0000000..4aaac7f --- /dev/null +++ b/ex01/src/ScavTrap.cpp @@ -0,0 +1,70 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ScavTrap.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:32:48 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:56:03 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + + +#include +#include "ClapTrap.hpp" +#include "ScavTrap.hpp" + +ScavTrap::ScavTrap() : ClapTrap() +{ + +} + +ScavTrap::ScavTrap(std::string name) : ClapTrap(name), _guard_mode(false) +{ + _hitpoints = 100; + _energy_points = 50; + _attack_damage = 20; + + std::cout << "ScavTrap:: " << _name << " has been created" << std::endl; +} + +ScavTrap::ScavTrap(ScavTrap const &src) : ClapTrap(src) +{ + *this = src; + + std::cout << "ScavTrap:: " << _name << " has been created by copy constructor" << std::endl; +} + +ScavTrap::~ScavTrap() +{ + std::cout << "ScavTrap:: " << _name << " has been destroyed" << std::endl; +} + +ScavTrap &ScavTrap::operator=(ScavTrap const &rhs) +{ + if (this != &rhs) + { + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + } + + std::cout << "ScavTrap:: " << _name << " has been created by assignation operator" << std::endl; + + return (*this); +} + +void ScavTrap::attack(std::string const &target) +{ + std::cout << "ScavTrap:: " << _name << " attack " << target << ", causing " << _attack_damage << " points of damage!" << std::endl; +} + + +void ScavTrap::guardGate() +{ + _guard_mode = true; + + std::cout << "ScavTrap:: " << _name << " in Gate keeper mode" << std::endl; +} diff --git a/ex01/src/main.cpp b/ex01/src/main.cpp new file mode 100644 index 0000000..6712818 --- /dev/null +++ b/ex01/src/main.cpp @@ -0,0 +1,25 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* main.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:35:59 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:36:16 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include +#include "ScavTrap.hpp" + +int main() +{ + ScavTrap scav("ScavTrap"); + + scav.attack("target"); + scav.takeDamage(10); + scav.beRepaired(5); + scav.guardGate(); + return (0); +} \ No newline at end of file diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..cacdec4 --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,16 @@ +# **************************************************************************** # +# # +# :::::::: # +# Makefile :+: :+: # +# +:+ # +# By: whaffman +#+ # +# +#+ # +# Created: 2025/03/24 15:14:58 by whaffman #+# #+# # +# Updated: 2025/03/28 15:52:22 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +NAME= FragTrap +SRC= FragTrap.cpp main.cpp ScavTrap.cpp ClapTrap.cpp + +-include ../common.mk diff --git a/ex02/inc/ClapTrap.hpp b/ex02/inc/ClapTrap.hpp new file mode 100644 index 0000000..cec2192 --- /dev/null +++ b/ex02/inc/ClapTrap.hpp @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ClapTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/27 16:26:32 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:35:08 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class ClapTrap +{ +protected: + std::string _name; + int _hitpoints; + int _energy_points; + int _attack_damage; + +public: + ClapTrap(); + ClapTrap(std::string name); + ClapTrap(ClapTrap const &src); + ~ClapTrap(); + + ClapTrap &operator=(ClapTrap const &rhs); + + void attack(std::string const &target); + void takeDamage(unsigned int amount); + void beRepaired(unsigned int amount); +}; diff --git a/ex02/inc/FragTrap.hpp b/ex02/inc/FragTrap.hpp new file mode 100644 index 0000000..3ea0b6f --- /dev/null +++ b/ex02/inc/FragTrap.hpp @@ -0,0 +1,29 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* FragTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 15:44:08 by whaffman #+# #+# */ +/* Updated: 2025/03/28 15:46:21 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "ClapTrap.hpp" +#include + +class FragTrap : public ClapTrap +{ +public: + FragTrap(); + FragTrap(std::string name); + FragTrap(FragTrap const &src); + ~FragTrap(); + + FragTrap &operator=(FragTrap const &rhs); + + void highFivesGuys(void); +}; \ No newline at end of file diff --git a/ex02/inc/ScavTrap.hpp b/ex02/inc/ScavTrap.hpp new file mode 100644 index 0000000..3736ed6 --- /dev/null +++ b/ex02/inc/ScavTrap.hpp @@ -0,0 +1,33 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ScavTrap.hpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:28:29 by whaffman #+# #+# */ +/* Updated: 2025/03/28 11:54:16 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include +#include "ClapTrap.hpp" + +class ScavTrap : public ClapTrap +{ +private: + bool _guard_mode; + +public: + ScavTrap(); + ScavTrap(std::string name); + ScavTrap(ScavTrap const &src); + ~ScavTrap(); + + ScavTrap &operator=(ScavTrap const &rhs); + + void attack(std::string const &target); + void guardGate(); +}; \ No newline at end of file diff --git a/ex02/src/ClapTrap.cpp b/ex02/src/ClapTrap.cpp new file mode 100644 index 0000000..ecabf34 --- /dev/null +++ b/ex02/src/ClapTrap.cpp @@ -0,0 +1,78 @@ +#include "ClapTrap.hpp" +#include + +ClapTrap::ClapTrap() +{ + _name = "a Nameless ClapTrap"; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; + + std::cout << "ClapTrap:: " << _name <<" is created!" << std::endl; +} + +ClapTrap::ClapTrap(std::string name) +{ + std::cout << "ClapTrap:: " << name << " is created!" << std::endl; + _name = name; + _hitpoints = 10; + _energy_points = 10; + _attack_damage = 0; +} + +ClapTrap::ClapTrap(ClapTrap const &src) +{ + std::cout << "ClapTrap:: " << src._name << " is copied!" << std::endl; + _name = src._name; + _hitpoints = src._hitpoints; + _energy_points = src._energy_points; + _attack_damage = src._attack_damage; + +} + +ClapTrap::~ClapTrap() +{ + std::cout << "ClapTrap:: " << _name << " is destroyed!" << std::endl; +} + +ClapTrap &ClapTrap::operator=(ClapTrap const &rhs) +{ + if (this == &rhs) + return *this; + + std::cout << "ClapTrap:: " << rhs._name << " is assigned to ClapTrap formely known as " << _name << "!" << std::endl; + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + return *this; +} + +void ClapTrap::attack(std::string const &target) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap:: " << _name << " is too tired to attack!" << std::endl; + return ; + } + _energy_points -= 1; + std::cout << "ClapTrap:: " << _name << " attacks " << target << ", causing " << _attack_damage << " points of damage!" << std::endl; +} + +void ClapTrap::takeDamage(unsigned int amount) +{ + _hitpoints -= amount; + std::cout << "ClapTrap:: " << _name << " takes " << amount << " points of damage!" << std::endl; +} + +void ClapTrap::beRepaired(unsigned int amount) +{ + if (_energy_points < 1) + { + std::cout << "ClapTrap:: " << _name << " is too tired to repair!" << std::endl; + return ; + } + _hitpoints += amount; + _energy_points -= 1; + std::cout << "ClapTrap:: " << _name << " is repaired for " << amount << " points!" << std::endl; +} diff --git a/ex02/src/FragTrap.cpp b/ex02/src/FragTrap.cpp new file mode 100644 index 0000000..a39a525 --- /dev/null +++ b/ex02/src/FragTrap.cpp @@ -0,0 +1,46 @@ +#include "FragTrap.hpp" +#include "ClapTrap.hpp" +#include + +FragTrap::FragTrap() : ClapTrap() +{ +} + +FragTrap::FragTrap(std::string name) : ClapTrap(name) +{ + _hitpoints = 100; + _energy_points = 100; + _attack_damage = 30; + + std::cout << "FragTrap:: " << _name << " has been created" << std::endl; +} +FragTrap::FragTrap(FragTrap const &src) +{ + *this = src; + std::cout << "FragTrap:: " << _name << " has been created by copy constructor" << std::endl; +} + +FragTrap::~FragTrap() +{ + std::cout << "FragTrap:: " << _name << " has been destroyed" << std::endl; +} + +FragTrap &FragTrap::operator=(FragTrap const &rhs) +{ + if (this != &rhs) + { + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + } + + std::cout << "FragTrap:: " << _name << " has been created by assignation operator" << std::endl; + + return (*this); +} + +void FragTrap::highFivesGuys(void) +{ + std::cout << "FragTrap:: " << _name << " high fives guys!" << std::endl; +} diff --git a/ex02/src/ScavTrap.cpp b/ex02/src/ScavTrap.cpp new file mode 100644 index 0000000..24b74d9 --- /dev/null +++ b/ex02/src/ScavTrap.cpp @@ -0,0 +1,71 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* ScavTrap.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:32:48 by whaffman #+# #+# */ +/* Updated: 2025/03/28 15:49:38 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + + +#include +#include "ClapTrap.hpp" +#include "ScavTrap.hpp" + +ScavTrap::ScavTrap() : ClapTrap() +{ + + +} + +ScavTrap::ScavTrap(std::string name) : ClapTrap(name), _guard_mode(false) +{ + _hitpoints = 100; + _energy_points = 100; + _attack_damage = 30; + + std::cout << "ScavTrap:: " << _name << " has been created" << std::endl; +} + +ScavTrap::ScavTrap(ScavTrap const &src) : ClapTrap(src) +{ + *this = src; + + std::cout << "ScavTrap:: " << _name << " has been created by copy constructor" << std::endl; +} + +ScavTrap::~ScavTrap() +{ + std::cout << "ScavTrap:: " << _name << " has been destroyed" << std::endl; +} + +ScavTrap &ScavTrap::operator=(ScavTrap const &rhs) +{ + if (this != &rhs) + { + _name = rhs._name; + _hitpoints = rhs._hitpoints; + _energy_points = rhs._energy_points; + _attack_damage = rhs._attack_damage; + } + + std::cout << "ScavTrap:: " << _name << " has been created by assignation operator" << std::endl; + + return (*this); +} + +void ScavTrap::attack(std::string const &target) +{ + std::cout << "ScavTrap:: " << _name << " attack " << target << ", causing " << _attack_damage << " points of damage!" << std::endl; +} + + +void ScavTrap::guardGate() +{ + _guard_mode = true; + + std::cout << "ScavTrap:: " << _name << " in Gate keeper mode" << std::endl; +} diff --git a/ex02/src/main.cpp b/ex02/src/main.cpp new file mode 100644 index 0000000..6a03fe9 --- /dev/null +++ b/ex02/src/main.cpp @@ -0,0 +1,50 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* main.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/03/28 11:35:59 by whaffman #+# #+# */ +/* Updated: 2025/03/28 15:53:41 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include +#include "ScavTrap.hpp" +#include "ClapTrap.hpp" +#include "FragTrap.hpp" + +int main() +{ + // Test ClapTrap + std::cout << "Testing ClapTrap \"Amelie\"" << std::endl; + ClapTrap clap("Amelie"); + clap.attack("target"); + clap.takeDamage(5); + clap.beRepaired(3); + + std::cout << std::endl; + + // Test ScavTrap + std::cout << "Testing ScavTrap \"Brent\"" << std::endl; + ScavTrap scav("Brent"); + scav.attack("target"); + scav.takeDamage(10); + scav.beRepaired(7); + scav.guardGate(); + + std::cout << std::endl; + + // Test FragTrap + std::cout << "Testing FragTrap \"Charlie\"" << std::endl; + FragTrap frag("Charlie"); + frag.attack("target"); + frag.takeDamage(15); + frag.beRepaired(10); + frag.highFivesGuys(); + + std::cout << std::endl << "The World is Ending!!" < +#+ # +# +#+ # +# Created: 2025/03/24 15:14:58 by whaffman #+# #+# # +# Updated: 2025/03/27 16:21:13 by whaffman ######## odam.nl # +# # +# **************************************************************************** # + +NAME= +SRC= + +-include ../common.mk