feat(ex02): it works

This commit is contained in:
Khaïs COLIN 2025-05-19 15:44:16 +02:00
parent 6254cbc7bd
commit 5cd051a7f7
Signed by: logistic-bot
SSH key fingerprint: SHA256:RlpiqKeXpcPFZZ4y9Ou4xi2M8OhRJovIwDlbCaMsuAo
9 changed files with 254 additions and 0 deletions

1
ex02/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
ex02

59
ex02/ClapTrap.cpp Normal file
View file

@ -0,0 +1,59 @@
#include "ClapTrap.hpp"
#include <iostream>
ClapTrap::ClapTrap()
: name("[name unset]"), hit_points(10), energy_points(10),
attack_damage(0) {
std::cout << "ClapTrap::ClapTrap()" << std::endl;
}
ClapTrap::ClapTrap(std::string name)
: name(name), hit_points(10), energy_points(10), attack_damage(0) {
std::cout << "ClapTrap::ClapTrap(" << name << ")" << std::endl;
}
ClapTrap::~ClapTrap() { std::cout << "ClapTrap::~ClapTrap()" << std::endl; }
ClapTrap &ClapTrap::operator=(const ClapTrap &other) {
std::cout << "ClapTrap::operator=()" << std::endl;
name = other.name;
hit_points = other.hit_points;
energy_points = other.energy_points;
attack_damage = other.attack_damage;
return *this;
}
void ClapTrap::attack(const std::string &target) {
if (energy_points > 0) {
std::cout << "ClapTrap " << name << " attacks " << target << ", causing "
<< attack_damage << " points of damage!" << std::endl;
energy_points--;
} else {
std::cout << "ClapTrap " << name << " tries to attack " << target
<< ", but has no more energy! " << std::endl;
}
}
void ClapTrap::takeDamage(unsigned int amount) {
std::cout << "ClapTrap " << name << " took " << amount << " points of damage!"
<< std::endl;
if (amount > hit_points)
amount = hit_points;
hit_points -= amount;
if (hit_points == 0)
std::cout << "ClapTrap " << name << " died!" << std::endl;
}
void ClapTrap::beRepaired(unsigned int amount) {
if (energy_points > 0) {
std::cout << "ClapTrap " << name << " is repaired for " << amount
<< " hit points!" << std::endl;
hit_points += amount;
energy_points--;
} else {
std::cout << "ClapTrap " << name
<< " tries to repair itself, but has no more energy! "
<< std::endl;
}
}

24
ex02/ClapTrap.hpp Normal file
View file

@ -0,0 +1,24 @@
#ifndef CLAPTRAP_HPP
#define CLAPTRAP_HPP
#include <string>
class ClapTrap {
protected:
std::string name;
unsigned int hit_points;
unsigned int energy_points;
unsigned int attack_damage;
public:
ClapTrap();
ClapTrap(std::string name);
~ClapTrap();
ClapTrap &operator=(const ClapTrap &other);
void attack(const std::string &target);
void takeDamage(unsigned int amount);
void beRepaired(unsigned int amount);
};
#endif

31
ex02/FragTrap.cpp Normal file
View file

@ -0,0 +1,31 @@
#include "FragTrap.hpp"
#include <iostream>
FragTrap::FragTrap() {
std::cout << "FragTrap::FragTrap()" << std::endl;
hit_points = 100;
energy_points = 100;
attack_damage = 30;
}
FragTrap::FragTrap(std::string name) {
std::cout << "FragTrap::FragTrap(" << name << ")" << std::endl;
hit_points = 100;
energy_points = 100;
attack_damage = 30;
this->name = name;
}
FragTrap::~FragTrap() { std::cout << "FragTrap::~FragTrap()" << std::endl; }
FragTrap &FragTrap::operator=(const FragTrap &other) {
this->hit_points = other.hit_points;
this->energy_points = other.energy_points;
this->attack_damage = other.attack_damage;
this->name = other.name;
return *this;
}
void FragTrap::highFivesGuys() {
std::cout << "FragTrap " << name << ": High-Five Guys?" << std::endl;
}

16
ex02/FragTrap.hpp Normal file
View file

@ -0,0 +1,16 @@
#ifndef FRAGTRAP_HPP
#define FRAGTRAP_HPP
#include "ClapTrap.hpp"
class FragTrap : public ClapTrap {
public:
FragTrap();
FragTrap(std::string name);
~FragTrap();
FragTrap &operator=(const FragTrap &other);
void highFivesGuys();
};
#endif

41
ex02/Makefile Normal file
View file

@ -0,0 +1,41 @@
NAME = ex02
ifeq ($(CPPFLAGS),)
CPPFLAGS = -Wall -Wextra -Werror -std=c++98 -g
endif
ifeq ($(CXX),)
CXX = c++
endif
# g++ is the default on 42 computers
ifeq ($(CXX),g++)
CXX = c++
endif
srcs = \
ClapTrap.cpp \
ScavTrap.cpp \
FragTrap.cpp \
main_objs = main.o $(srcs:.cpp=.o)
all_objs = $(main_objs)
deps = $(all_objs:.o=.d)
all: $(NAME)
-include $(deps)
$(NAME): $(main_objs)
$(CXX) $(CPPFLAGS) -o $@ $^
%.o: %.cpp
$(CXX) -c $(CPPFLAGS) -o $*.o $*.cpp
$(CXX) -MM $(CPPFLAGS) -MT $*.o $*.cpp > $*.d
clean:
find . -name '*.o' -print -delete
find . -name '*.d' -print -delete
fclean: clean
rm -f $(NAME)
re:
+make fclean
+make all

32
ex02/ScavTrap.cpp Normal file
View file

@ -0,0 +1,32 @@
#include "ScavTrap.hpp"
#include <iostream>
ScavTrap::ScavTrap() {
std::cout << "ScavTrap::ScavTrap()" << std::endl;
hit_points = 100;
energy_points = 50;
attack_damage = 20;
}
ScavTrap::ScavTrap(std::string name) {
std::cout << "ScavTrap::ScavTrap(" << name << ")" << std::endl;
hit_points = 100;
energy_points = 50;
attack_damage = 20;
this->name = name;
}
ScavTrap::~ScavTrap() { std::cout << "ScavTrap::~ScavTrap()" << std::endl; }
ScavTrap &ScavTrap::operator=(const ScavTrap &other) {
this->hit_points = other.hit_points;
this->energy_points = other.energy_points;
this->attack_damage = other.attack_damage;
this->name = other.name;
return *this;
}
void ScavTrap::guardGate() {
std::cout << "ScavTrap " << name << " is now in gate-guarding mode."
<< std::endl;
}

16
ex02/ScavTrap.hpp Normal file
View file

@ -0,0 +1,16 @@
#ifndef SCAVTRAP_HPP
#define SCAVTRAP_HPP
#include "ClapTrap.hpp"
class ScavTrap : public ClapTrap {
public:
ScavTrap();
ScavTrap(std::string name);
~ScavTrap();
ScavTrap &operator=(const ScavTrap &other);
void guardGate();
};
#endif

34
ex02/main.cpp Normal file
View file

@ -0,0 +1,34 @@
#include "FragTrap.hpp"
int main(void) {
{
FragTrap fragtrap = FragTrap("John Doe");
fragtrap.attack("training dummy");
fragtrap.takeDamage(3);
fragtrap.attack("training dummy");
fragtrap.takeDamage(3);
fragtrap.takeDamage(3);
fragtrap.beRepaired(5);
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.attack("training dummy");
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.beRepaired(5);
fragtrap.highFivesGuys();
}
return 0;
}