narnaud
3 years ago
24 changed files with 429 additions and 60 deletions
Binary file not shown.
Binary file not shown.
@ -0,0 +1,96 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* ClapTrap.cpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 10:53:50 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:26:32 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "ClapTrap.hpp" |
||||
|
|
||||
|
int ClapTrap::amount = 0; |
||||
|
ClapTrap *ClapTrap::registery[128] = {NULL}; |
||||
|
|
||||
|
|
||||
|
ClapTrap::ClapTrap (void) { |
||||
|
|
||||
|
std::cout << "ClapTrap default constructor called " << endl; |
||||
|
} |
||||
|
|
||||
|
ClapTrap::ClapTrap (std::string name) |
||||
|
: _name(name), _health(10), _energy(10), _attack(0) { |
||||
|
if (ClapTrap::amount >= 128) |
||||
|
{ |
||||
|
delete ClapTrap::registery[amount % 128]; |
||||
|
cout << "There are too many Traps " << ClapTrap::registery[amount % 128]->getName() << " destroyed\n"; |
||||
|
} |
||||
|
cout << "ClapTrap " << name << " was created" << endl; |
||||
|
_id = ClapTrap::amount % 128; |
||||
|
ClapTrap::registery[ClapTrap::amount % 128] = this; |
||||
|
ClapTrap::amount++; |
||||
|
} |
||||
|
|
||||
|
ClapTrap::ClapTrap (ClapTrap const & src) { |
||||
|
_name = src.getName(); |
||||
|
} |
||||
|
|
||||
|
ClapTrap & ClapTrap::operator= (ClapTrap const & src) { |
||||
|
std::cout << "ClapTrap assignment operator called" << endl; |
||||
|
_name = src.getName(); |
||||
|
return (*this); |
||||
|
} |
||||
|
|
||||
|
ClapTrap::~ClapTrap (void) { |
||||
|
|
||||
|
std::cout << "ClapTrap " << _name << " was destroyed" << endl; |
||||
|
} |
||||
|
|
||||
|
void ClapTrap::attack(const std::string& target) { |
||||
|
if (_energy == 0 || _health == 0) |
||||
|
cout << _name << " is no more able to attack anyone" << endl; |
||||
|
else |
||||
|
{ |
||||
|
cout << _name << " attacked " << target << endl; |
||||
|
getClapTrap(target)->takeDamage(_attack); |
||||
|
_energy--; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ClapTrap::takeDamage(unsigned int amount) { |
||||
|
if (_health == 0) |
||||
|
cout << _name << " is already death" << endl; |
||||
|
else |
||||
|
cout << _name << " lose " << amount << " hp" << endl; |
||||
|
if (amount >= _health) |
||||
|
_health = 0; |
||||
|
else |
||||
|
_health -= amount; |
||||
|
} |
||||
|
|
||||
|
void ClapTrap::beRepaired(unsigned int amount) { |
||||
|
if (_energy == 0 || _health == 0) |
||||
|
cout << _name << " is no more able to repair anyone" << endl; |
||||
|
else |
||||
|
{ |
||||
|
cout << _name << " was repaired for " << amount << " hp" << endl; |
||||
|
_health += amount; |
||||
|
_energy--; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
std::string ClapTrap::getName(void) const { |
||||
|
return (_name); |
||||
|
} |
||||
|
|
||||
|
ClapTrap *ClapTrap::getClapTrap(std::string name) { |
||||
|
for (int i = 0; i < 128; i++) |
||||
|
{ |
||||
|
if (name == ClapTrap::registery[i]->getName()) |
||||
|
return (ClapTrap::registery[i]); |
||||
|
} |
||||
|
return (NULL); |
||||
|
} |
@ -0,0 +1,45 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* ClapTrap.hpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 10:54:07 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:49:28 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <string> |
||||
|
#include <iostream> |
||||
|
using std::cout; |
||||
|
using std::endl; |
||||
|
|
||||
|
class ClapTrap { |
||||
|
|
||||
|
public: |
||||
|
static ClapTrap *registery[128]; |
||||
|
static int amount; |
||||
|
|
||||
|
ClapTrap (void); |
||||
|
ClapTrap (std::string name); |
||||
|
ClapTrap (ClapTrap const & src); |
||||
|
virtual ~ClapTrap (void); |
||||
|
|
||||
|
ClapTrap & operator= (ClapTrap const & src); |
||||
|
|
||||
|
virtual void attack(const std::string& target); |
||||
|
void takeDamage(unsigned int amount); |
||||
|
void beRepaired(unsigned int amount); |
||||
|
std::string getName(void) const; |
||||
|
static ClapTrap *getClapTrap(std::string name); |
||||
|
|
||||
|
protected: |
||||
|
std::string _name; |
||||
|
unsigned int _health; |
||||
|
unsigned int _energy; |
||||
|
unsigned int _attack; |
||||
|
unsigned int _id; |
||||
|
}; |
@ -0,0 +1,41 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* DiamondTrap.cpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:19:54 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:45:31 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "DiamondTrap.hpp" |
||||
|
|
||||
|
DiamondTrap::DiamondTrap (std::string name): ScavTrap(name), FragTrap(name){ |
||||
|
ClapTrap::_name = name + "_clap_name"; |
||||
|
_name = name; |
||||
|
_health = FragTrap::_health; |
||||
|
_energy = ScavTrap::_energy; |
||||
|
_attack = FragTrap::_attack; |
||||
|
cout << name << "is now a DiamondTrap" << endl; |
||||
|
} |
||||
|
|
||||
|
DiamondTrap::~DiamondTrap (void) { |
||||
|
cout << "DiamondTrap " << _name << " was destroyed" << endl; |
||||
|
} |
||||
|
|
||||
|
void DiamondTrap::attack(const std::string& target) { |
||||
|
if (_energy == 0 || _health == 0) |
||||
|
cout << _name << " is no more able to attack" << endl; |
||||
|
else |
||||
|
{ |
||||
|
cout << _name << " heavily attacked " << target << endl; |
||||
|
getClapTrap(target)->takeDamage(_attack); |
||||
|
_energy--; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void DiamondTrap::whoAmI(void) { |
||||
|
cout << "Name: " << _name << " - Clap name: " << ClapTrap::_name << endl; |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* DiamondTrap.hpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:17:41 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:52:31 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#pragma once |
||||
|
#include "ScavTrap.hpp" |
||||
|
#include "FragTrap.hpp" |
||||
|
|
||||
|
class DiamondTrap : public ScavTrap, public FragTrap { |
||||
|
std::string _name; |
||||
|
public: |
||||
|
DiamondTrap (std::string name); |
||||
|
~DiamondTrap (void); |
||||
|
void attack(const std::string& target); |
||||
|
void whoAmI(void); |
||||
|
}; |
@ -0,0 +1,43 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* FragTrap.cpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:19:54 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:29:38 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "FragTrap.hpp" |
||||
|
|
||||
|
FragTrap::FragTrap (std::string name):ClapTrap(name){ |
||||
|
_health = 100; |
||||
|
_energy = 100; |
||||
|
_attack = 30; |
||||
|
cout << "ClapTrap " << name << " evolved to FragTrap" << endl; |
||||
|
} |
||||
|
|
||||
|
FragTrap::~FragTrap (void) { |
||||
|
cout << "FragTrap " << _name << " was destroyed" << endl; |
||||
|
} |
||||
|
|
||||
|
void FragTrap::attack(const std::string& target) { |
||||
|
if (_energy == 0 || _health == 0) |
||||
|
cout << _name << " is no more able to attack anyone"; |
||||
|
else |
||||
|
{ |
||||
|
cout << _name << " hardly attacked " << target << endl; |
||||
|
getClapTrap(target)->takeDamage(_attack); |
||||
|
_energy--; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void FragTrap::highFivesGuys(void) { |
||||
|
for (int i = 0; i < 128; i++) |
||||
|
{ |
||||
|
if (ClapTrap::registery[i]) |
||||
|
cout << _name << " high five " << ClapTrap::registery[i]->getName() << endl; |
||||
|
} |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* FragTrap.hpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:17:41 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:49:59 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#pragma once |
||||
|
#include "ClapTrap.hpp" |
||||
|
|
||||
|
class FragTrap : virtual public ClapTrap { |
||||
|
|
||||
|
public: |
||||
|
FragTrap (std::string name); |
||||
|
~FragTrap (void); |
||||
|
void attack(const std::string& target); |
||||
|
void highFivesGuys(void); |
||||
|
}; |
@ -0,0 +1,20 @@ |
|||||
|
NAME = diamondtrap |
||||
|
SRCS = main.cpp ClapTrap.cpp ScavTrap.cpp FragTrap.cpp DiamondTrap.cpp |
||||
|
OBJS = $(SRCS:.cpp=.o) |
||||
|
|
||||
|
CXXFLAGS = -std=c++98 -Werror -Wextra -Wall |
||||
|
|
||||
|
$(NAME): $(OBJS) |
||||
|
c++ $(OBJS) -o $(NAME) |
||||
|
|
||||
|
all : $(NAME) |
||||
|
|
||||
|
clean : |
||||
|
rm -rf $(OBJS) |
||||
|
|
||||
|
fclean : clean |
||||
|
rm -rf $(NAME) |
||||
|
|
||||
|
re : fclean all |
||||
|
|
||||
|
.PHONY: all clean fclean re |
@ -0,0 +1,43 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* ScavTrap.cpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:19:54 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:27:49 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "ScavTrap.hpp" |
||||
|
|
||||
|
ScavTrap::ScavTrap (std::string name) |
||||
|
:ClapTrap(name){ |
||||
|
_health = 100; |
||||
|
_energy = 50; |
||||
|
_attack = 20; |
||||
|
cout << "ClapTrap " << name << " evolved to ScavTrap" << endl; |
||||
|
} |
||||
|
|
||||
|
ScavTrap::~ScavTrap (void) { |
||||
|
cout << "ScavTrap " << _name << " was destroyed" << endl; |
||||
|
} |
||||
|
|
||||
|
void ScavTrap::attack(const std::string& target) { |
||||
|
if (_energy == 0 || _health == 0) |
||||
|
cout << _name << " is no more able to attack" << endl; |
||||
|
else |
||||
|
{ |
||||
|
cout << _name << " heavily attacked " << target << endl; |
||||
|
getClapTrap(target)->takeDamage(_attack); |
||||
|
_energy--; |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
void ScavTrap::guardGate(void) { |
||||
|
if (_health == 0) |
||||
|
cout << _name << " is no more able to guard" << endl; |
||||
|
else |
||||
|
cout << _name << " is now in guard gate mode.\n"; |
||||
|
} |
@ -0,0 +1,24 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* ScavTrap.hpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 15:17:41 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:27:07 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#pragma once |
||||
|
#include "ClapTrap.hpp" |
||||
|
|
||||
|
class ScavTrap : virtual public ClapTrap { |
||||
|
|
||||
|
public: |
||||
|
|
||||
|
ScavTrap (std::string name); |
||||
|
~ScavTrap (void); |
||||
|
void attack(const std::string& target); |
||||
|
void guardGate(void); |
||||
|
}; |
@ -0,0 +1,30 @@ |
|||||
|
/* ************************************************************************** */ |
||||
|
/* */ |
||||
|
/* ::: :::::::: */ |
||||
|
/* main.cpp :+: :+: :+: */ |
||||
|
/* +:+ +:+ +:+ */ |
||||
|
/* By: narnaud <narnaud@student.42.fr> +#+ +:+ +#+ */ |
||||
|
/* +#+#+#+#+#+ +#+ */ |
||||
|
/* Created: 2022/06/23 10:53:16 by narnaud #+# #+# */ |
||||
|
/* Updated: 2022/07/19 02:47:30 by narnaud ### ########.fr */ |
||||
|
/* */ |
||||
|
/* ************************************************************************** */ |
||||
|
|
||||
|
#include "ScavTrap.hpp" |
||||
|
#include "FragTrap.hpp" |
||||
|
#include "DiamondTrap.hpp" |
||||
|
|
||||
|
int main(void) |
||||
|
{ |
||||
|
ClapTrap a("A"); |
||||
|
ScavTrap b("B"); |
||||
|
FragTrap c("C"); |
||||
|
DiamondTrap d("D"); |
||||
|
|
||||
|
a.attack("B"); |
||||
|
b.attack("C"); |
||||
|
c.attack("B"); |
||||
|
c.highFivesGuys(); |
||||
|
d.attack("C"); |
||||
|
d.whoAmI(); |
||||
|
} |
Loading…
Reference in new issue