feat(ex01): it works
This commit is contained in:
parent
69e91f7664
commit
6254cbc7bd
7 changed files with 206 additions and 0 deletions
1
ex01/.gitignore
vendored
Normal file
1
ex01/.gitignore
vendored
Normal file
|
|
@ -0,0 +1 @@
|
||||||
|
ex01
|
||||||
59
ex01/ClapTrap.cpp
Normal file
59
ex01/ClapTrap.cpp
Normal 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
ex01/ClapTrap.hpp
Normal file
24
ex01/ClapTrap.hpp
Normal 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
|
||||||
40
ex01/Makefile
Normal file
40
ex01/Makefile
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
NAME = ex01
|
||||||
|
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 \
|
||||||
|
|
||||||
|
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
ex01/ScavTrap.cpp
Normal file
32
ex01/ScavTrap.cpp
Normal 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
ex01/ScavTrap.hpp
Normal file
16
ex01/ScavTrap.hpp
Normal 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
ex01/main.cpp
Normal file
34
ex01/main.cpp
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
#include "ScavTrap.hpp"
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
{
|
||||||
|
ScavTrap scavtrap = ScavTrap("John Doe");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.takeDamage(3);
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.takeDamage(3);
|
||||||
|
scavtrap.takeDamage(3);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.attack("training dummy");
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.beRepaired(5);
|
||||||
|
scavtrap.guardGate();
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue