diff --git a/ex01/Makefile b/ex01/Makefile index 98bd7ba..5ee452b 100644 --- a/ex01/Makefile +++ b/ex01/Makefile @@ -6,11 +6,11 @@ # By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ # # +#+#+#+#+#+ +#+ # # Created: 2024/10/25 16:09:27 by adjoly #+# #+# # -# Updated: 2024/11/27 12:08:05 by adjoly ### ########.fr # +# Updated: 2024/11/29 16:19:08 by adjoly ### ########.fr # # # # **************************************************************************** # -NAME = ClapTrap +NAME = ScavTrap CC = c++ diff --git a/ex01/ScavTrap.cpp b/ex01/ScavTrap.cpp index bdbf234..62a773b 100644 --- a/ex01/ScavTrap.cpp +++ b/ex01/ScavTrap.cpp @@ -6,12 +6,13 @@ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/27 12:53:46 by adjoly #+# #+# */ -/* Updated: 2024/11/29 15:39:05 by adjoly ### ########.fr */ +/* Updated: 2024/11/29 16:01:32 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #include "ScavTrap.hpp" #include <iostream> +#include <sched.h> void logScav(std::string emoji, std::string who, std::string str) { std::cout << "γ" << emoji << "γScavTrap(" << who << "): " << str << std::endl; @@ -64,5 +65,9 @@ void ScavTrap::attack(const std::string& target) { return ; } logScav("π₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); - setEnergyPoints(getEnergyPoints() - 1); + _energyPoints--; +} + +void ScavTrap::guardGate(void) { + logScav("π‘οΈ", _name, "is now in Gate keeper mode"); } diff --git a/ex01/main.cpp b/ex01/main.cpp index 3436c8c..95d19ba 100644 --- a/ex01/main.cpp +++ b/ex01/main.cpp @@ -6,7 +6,7 @@ /* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2024/11/20 14:25:07 by adjoly #+# #+# */ -/* Updated: 2024/11/29 15:21:45 by adjoly ### ########.fr */ +/* Updated: 2024/11/29 16:01:21 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ @@ -28,6 +28,7 @@ int main(void) { logScav("π", kanel.getName(), "Oh my god Kanel uses his last teeth to attack " + suki.getName()); kanel.attack(suki.getName()); suki.takeDamage(kanel.getAttackDamage()); + kanel.guardGate(); return (0); } diff --git a/ex02/ClapTrap.cpp b/ex02/ClapTrap.cpp new file mode 100644 index 0000000..1650ee0 --- /dev/null +++ b/ex02/ClapTrap.cpp @@ -0,0 +1,111 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClapTrap.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:29:16 by adjoly #+# #+# */ +/* Updated: 2024/11/29 15:21:39 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ClapTrap.hpp" +#include <string> +#include <iostream> + +void logClap(std::string emoji, std::string who, std::string str) { + std::cout << "γ" << emoji << "γClapTrap(" << who << "): " << str << std::endl; +} + +void logClap(std::string emoji, std::string str) { + std::cout << "γ" << emoji << "γClapTrap: " << str << std::endl; +} + +ClapTrap::ClapTrap(void) : + _name("Kanel"), _health(10), _energyPoints(10), _attackDamage(0) { + logClap("β", "default constructor called"); +} + +ClapTrap::~ClapTrap(void) { + logClap("β", "destructor called"); + +} + +ClapTrap::ClapTrap(std::string name) : + _name(name), _health(10), _energyPoints(10), _attackDamage(0) { + logClap("β", _name, "constructor called"); +} + +ClapTrap::ClapTrap(const ClapTrap &other) { + *this = other; + logClap("β", _name, "copy constructor called"); +} + +ClapTrap &ClapTrap::operator=(const ClapTrap &cpy) { + logClap("π°", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage= cpy.getAttackDamage(); + } + return (*this); +} + +void ClapTrap::attack(const std::string& target) { + if (_health == 0) { + logClap("π", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logClap("π€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logClap("π₯", _name, "attacks " + target + " causing " + iToS(getAttackDamage()) + " points of damage!"); + _energyPoints--; +} + +void ClapTrap::takeDamage(unsigned int amount) { + logClap("π₯", _name, "take " + iToS(amount) + " damage"); + if (_health <= amount) { + logClap("π", _name, "is dead HAHA"); + _health = 0; + } else { + _health -= amount; + } +} + +void ClapTrap::beRepaired(uint amount) { + if (_health == 0) { + logClap("π", _name, "can't repair already dead"); + return ; + } else if (_energyPoints == 0) { + logClap("π€", _name, "can't repair no energy left GO TO SLEEP!"); + return ; + } + logClap("π©Ή", _name, iToS(amount) + ""); + _health += amount; + _energyPoints--; +} + +uint ClapTrap::getAttackDamage(void) const { return (_attackDamage); } +uint ClapTrap::getEnergyPoints(void) const { return (_energyPoints); } +uint ClapTrap::getHealth(void) const { return (_health); } +std::string ClapTrap::getName(void) const { return (_name); } + +void ClapTrap::setAttackDamage(uint in) { + logClap("π°", _name, "set attack damage"); + _attackDamage = in; +} +void ClapTrap::setEnergyPoints(uint in) { + logClap("π°", _name, "set energy points"); + _energyPoints = in; +} +void ClapTrap::setHealth(uint in) { + logClap("π°", _name, "set health"); + _health = in; +} +void ClapTrap::setName(std::string in) { + logClap("π°", _name, "set a new name"); + _name = in; +} diff --git a/ex02/ClapTrap.hpp b/ex02/ClapTrap.hpp new file mode 100644 index 0000000..65cb368 --- /dev/null +++ b/ex02/ClapTrap.hpp @@ -0,0 +1,51 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ClapTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:08:19 by adjoly #+# #+# */ +/* Updated: 2024/11/29 15:24:06 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +# include <string> + +typedef unsigned int uint; + +class ClapTrap { + protected: + std::string _name; + uint _health; + uint _energyPoints; + uint _attackDamage; + + public: + ClapTrap(void); + ClapTrap(std::string); + ClapTrap(const ClapTrap &); + ~ClapTrap(void); + + ClapTrap &operator=(const ClapTrap &); + + void attack(const std::string& target); + void takeDamage(uint amount); + void beRepaired(uint amount); + + uint getAttackDamage(void) const; + uint getEnergyPoints(void) const; + uint getHealth(void) const; + std::string getName(void) const; + + void setAttackDamage(uint); + void setEnergyPoints(uint); + void setHealth(uint); + void setName(std::string); +}; + +std::string iToS(unsigned int i); +void logClap(std::string, std::string); +void logClap(std::string, std::string, std::string); diff --git a/ex02/FragTrap b/ex02/FragTrap new file mode 100755 index 0000000..b61f585 Binary files /dev/null and b/ex02/FragTrap differ diff --git a/ex02/FragTrap.cpp b/ex02/FragTrap.cpp new file mode 100644 index 0000000..b4f1e4e --- /dev/null +++ b/ex02/FragTrap.cpp @@ -0,0 +1,68 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* FragTrap.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/29 15:40:29 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:15:12 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "FragTrap.hpp" +#include "ClapTrap.hpp" +#include <iostream> + +void logFrag(std::string emoji, std::string who, std::string str) { + std::cout << "γ" << emoji << "γFragTrap(" << who << "): " << str << std::endl; +} + +void logFrag(std::string emoji, std::string str) { + std::cout << "γ" << emoji << "γFragTrap: " << str << std::endl; +} + +FragTrap::FragTrap(void) : ClapTrap() { + logFrag("β", "default constructor called"); + _health = 100; + _energyPoints = 100; + _attackDamage = 30; +} + +FragTrap::~FragTrap(void) { + logFrag("β", "destructor called"); +} + +FragTrap::FragTrap(std::string name) : ClapTrap(name) { + logFrag("β", name, "constructor called"); + _health = 100; + _energyPoints = 100; + _attackDamage = 30; +} + +FragTrap &FragTrap::operator=(const FragTrap &cpy) { + logFrag("π°", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage = cpy.getAttackDamage(); + } + return (*this); +} + +void FragTrap::attack(const std::string& target) { + if (_health == 0) { + logFrag("π", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logFrag("π€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logFrag("π₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); + _energyPoints--; +} + +void FragTrap::highFivesGuys(void) { + logFrag("β", _name, "send a high five request"); +} diff --git a/ex02/FragTrap.hpp b/ex02/FragTrap.hpp new file mode 100644 index 0000000..5461dcc --- /dev/null +++ b/ex02/FragTrap.hpp @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* FragTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/29 15:40:32 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:11:39 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "ClapTrap.hpp" + +class FragTrap : public ClapTrap { + public : + FragTrap(void); + ~FragTrap(void); + FragTrap(std::string); + FragTrap(const FragTrap &); + + FragTrap &operator=(const FragTrap &); + + void highFivesGuys(void); + void attack(const std::string &); +}; + +void logFrag(std::string, std::string); +void logFrag(std::string, std::string, std::string); diff --git a/ex02/Makefile b/ex02/Makefile new file mode 100644 index 0000000..9d37d0c --- /dev/null +++ b/ex02/Makefile @@ -0,0 +1,56 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2024/11/29 16:18:59 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +SHELL = bash + +NAME = FragTrap + +CC = c++ + +OBJSDIR = obj/ + +SRCS = $(shell find . -name '*.cpp') + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) $(OBJS) -o $(NAME) + @printf "$(YELLOW)γβ¨γ($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -c $< -o $@ + @printf "$(DELETE)$(GREEN)γπ¨γ($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)γποΈγ($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)γποΈγ($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex02/ScavTrap.cpp b/ex02/ScavTrap.cpp new file mode 100644 index 0000000..62a773b --- /dev/null +++ b/ex02/ScavTrap.cpp @@ -0,0 +1,73 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ScavTrap.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/27 12:53:46 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:01:32 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "ScavTrap.hpp" +#include <iostream> +#include <sched.h> + +void logScav(std::string emoji, std::string who, std::string str) { + std::cout << "γ" << emoji << "γScavTrap(" << who << "): " << str << std::endl; +} + +void logScav(std::string emoji, std::string str) { + std::cout << "γ" << emoji << "γScavTrap: " << str << std::endl; +} + +ScavTrap::ScavTrap(void) : ClapTrap() { + logScav("β", "default constructor called"); + _health = 100; + _energyPoints = 50; + _attackDamage = 20; +} + +ScavTrap::~ScavTrap(void) { + logScav("β", "destructor called"); +} + +ScavTrap::ScavTrap(std::string name) : ClapTrap(name) { + logScav("β", name, "constructor called"); + _health = 100; + _energyPoints = 50; + _attackDamage = 20; +} + +ScavTrap::ScavTrap(const ScavTrap &other) { + *this = other; + logScav("β", _name, "copy constructor called"); +} + +ScavTrap &ScavTrap::operator=(const ScavTrap &cpy) { + logScav("π°", _name, "copy assignement constructor called"); + if (this != &cpy) { + _name = cpy.getName(); + _health = cpy.getHealth(); + _energyPoints = cpy.getEnergyPoints(); + _attackDamage = cpy.getAttackDamage(); + } + return (*this); +} + +void ScavTrap::attack(const std::string& target) { + if (_health == 0) { + logScav("π", _name, "can't attack already dead"); + return ; + } else if (_energyPoints == 0) { + logScav("π€", _name, "can't attack no energy left GO TO SLEEP!"); + return ; + } + logScav("π₯", _name, "attacks " + target + " causing " + iToS(_attackDamage) + " points of damage!"); + _energyPoints--; +} + +void ScavTrap::guardGate(void) { + logScav("π‘οΈ", _name, "is now in Gate keeper mode"); +} diff --git a/ex02/ScavTrap.hpp b/ex02/ScavTrap.hpp new file mode 100644 index 0000000..f843279 --- /dev/null +++ b/ex02/ScavTrap.hpp @@ -0,0 +1,30 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ScavTrap.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/27 12:29:17 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:14:16 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "ClapTrap.hpp" + +class ScavTrap : public ClapTrap { + public: + ScavTrap(void); + ~ScavTrap(void); + ScavTrap(std::string); + ScavTrap(const ScavTrap &); + ScavTrap &operator=(const ScavTrap &); + + void guardGate(void); + void attack(const std::string &); +}; + +void logScav(std::string, std::string); +void logScav(std::string, std::string, std::string); diff --git a/ex02/main.cpp b/ex02/main.cpp new file mode 100644 index 0000000..d2942ba --- /dev/null +++ b/ex02/main.cpp @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly <adjoly@student.42angouleme.fr> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/20 14:25:07 by adjoly #+# #+# */ +/* Updated: 2024/11/29 16:19:38 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "FragTrap.hpp" +#include <sstream> + +std::string iToS(unsigned int i) { + std::stringstream ss; + + ss << i; + return (ss.str()); +} + +int main(void) { + FragTrap kanel("Kanel"); + FragTrap suki("Suki"); + + kanel.setAttackDamage(51); + logFrag("π", kanel.getName(), "Oh my god Kanel uses his last teeth to attack " + suki.getName()); + kanel.attack(suki.getName()); + suki.takeDamage(kanel.getAttackDamage()); + kanel.highFivesGuys(); + + return (0); +}