add: ex01
This commit is contained in:
parent
4f3824ac2a
commit
1f7dc85823
25
ex01/Makefile
Normal file
25
ex01/Makefile
Normal file
@ -0,0 +1,25 @@
|
||||
CXX = c++
|
||||
CPPFLAGS = -std=c++98 -Wall -Wextra -Werror -g
|
||||
SRCDIR = src
|
||||
OBJDIR = obj
|
||||
NAME = ex01
|
||||
|
||||
SRCS = $(wildcard $(SRCDIR)/*.cpp)
|
||||
OBJS = $(patsubst $(SRCDIR)/%.cpp,$(OBJDIR)/%.o,$(SRCS))
|
||||
|
||||
all: $(NAME)
|
||||
|
||||
$(OBJDIR)/%.o: $(SRCDIR)/%.cpp
|
||||
mkdir -p obj
|
||||
$(CXX) $(CPPFLAGS) -c $< -o $@
|
||||
|
||||
$(NAME): $(OBJS)
|
||||
$(CXX) $(CPPFLAGS) $^ -o $@
|
||||
|
||||
clean:
|
||||
rm -rf $(OBJDIR)/*.o
|
||||
|
||||
fclean: clean
|
||||
rm -fr $(NAME)
|
||||
|
||||
re: fclean all
|
96
ex01/src/ClapTrap.cpp
Normal file
96
ex01/src/ClapTrap.cpp
Normal file
@ -0,0 +1,96 @@
|
||||
#include "ClapTrap.hpp"
|
||||
#include <iostream>
|
||||
|
||||
ClapTrap::ClapTrap():
|
||||
_name(""),
|
||||
_life(10),
|
||||
_energy(10),
|
||||
_damage(0)
|
||||
{
|
||||
std::cout << "ClapTrap()" << std::endl;
|
||||
}
|
||||
|
||||
ClapTrap::ClapTrap(const std::string& name):
|
||||
_name(name),
|
||||
_life(10),
|
||||
_energy(10),
|
||||
_damage(0)
|
||||
{
|
||||
std::cout << "ClapTrap(" << name << ")" << std::endl;
|
||||
}
|
||||
|
||||
ClapTrap::ClapTrap(const ClapTrap& src)
|
||||
{
|
||||
std::cout << "ClapTrap(ClapTrap)" << std::endl;
|
||||
*this = src;
|
||||
}
|
||||
|
||||
ClapTrap::~ClapTrap()
|
||||
{
|
||||
std::cout << "~ClapTrap()" << std::endl;
|
||||
}
|
||||
|
||||
ClapTrap& ClapTrap::operator=(const ClapTrap& src)
|
||||
{
|
||||
this->_name = src._name;
|
||||
this->_life = src._life;
|
||||
this->_energy = src._energy;
|
||||
this->_damage = src._damage;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
|
||||
void ClapTrap::beRepaired(unsigned int amount)
|
||||
{
|
||||
if (this->_life == 0 || this->_energy == 0)
|
||||
{
|
||||
std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->_life += amount;
|
||||
this->_energy--;
|
||||
std::cerr << "ClapTrap " << this->_name << " beRepaired causing life is now " << this->_life << std::endl;
|
||||
}
|
||||
|
||||
void ClapTrap::takeDamage(unsigned int amount)
|
||||
{
|
||||
if (this->_life == 0 || this->_energy == 0)
|
||||
{
|
||||
std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->_life -= amount;
|
||||
std::cout << "ClapTrap " << this->_name << " be attacked causing " << amount << " points of damage!" << std::endl;
|
||||
}
|
||||
|
||||
void ClapTrap::attack(const std::string &target)
|
||||
{
|
||||
if (this->_life == 0 || this->_energy == 0)
|
||||
{
|
||||
std::cerr << "error: ClapTrap " << this->_name << " dead" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->_energy--;
|
||||
std::cerr << "ClapTrap " << this->_name << " attacks " << target << ", causing " << this->_damage << " points of damage" << std::endl;
|
||||
}
|
||||
|
||||
const std::string& ClapTrap::getName() const
|
||||
{
|
||||
return this->_name;
|
||||
}
|
||||
|
||||
int ClapTrap::getLife() const
|
||||
{
|
||||
return this->_life;
|
||||
}
|
||||
|
||||
int ClapTrap::getEnergy() const
|
||||
{
|
||||
return this->_energy;
|
||||
}
|
||||
|
||||
int ClapTrap::getDamage() const
|
||||
{
|
||||
return this->_damage;
|
||||
}
|
29
ex01/src/ClapTrap.hpp
Normal file
29
ex01/src/ClapTrap.hpp
Normal file
@ -0,0 +1,29 @@
|
||||
#pragma once
|
||||
|
||||
#include <string>
|
||||
|
||||
class ClapTrap
|
||||
{
|
||||
protected:
|
||||
std::string _name;
|
||||
int _life;
|
||||
int _energy;
|
||||
int _damage;
|
||||
|
||||
public:
|
||||
ClapTrap();
|
||||
ClapTrap(const ClapTrap& src);
|
||||
ClapTrap(const std::string& name);
|
||||
virtual ~ClapTrap();
|
||||
|
||||
ClapTrap &operator=(const ClapTrap& src);
|
||||
|
||||
virtual void attack(const std::string& target);
|
||||
void takeDamage(unsigned int amount);
|
||||
void beRepaired(unsigned int amount);
|
||||
|
||||
const std::string& getName() const;
|
||||
int getLife() const;
|
||||
int getEnergy() const;
|
||||
int getDamage() const;
|
||||
};
|
60
ex01/src/ScavTrap.cpp
Normal file
60
ex01/src/ScavTrap.cpp
Normal file
@ -0,0 +1,60 @@
|
||||
#include "ScavTrap.hpp"
|
||||
#include "ClapTrap.hpp"
|
||||
|
||||
#include <iostream>
|
||||
#include <string>
|
||||
|
||||
ScavTrap::ScavTrap()
|
||||
{
|
||||
this->_name = "";
|
||||
this->_life = 100;
|
||||
this->_energy = 50;
|
||||
this->_damage = 20;
|
||||
std::cout << "ScavTrap()" << std::endl;
|
||||
}
|
||||
|
||||
ScavTrap::ScavTrap(const std::string& name)
|
||||
{
|
||||
this->_name = name;
|
||||
this->_life = 100;
|
||||
this->_energy = 50;
|
||||
this->_damage = 20;
|
||||
std::cout << "ScavTrap(" << name << ")" << std::endl;
|
||||
}
|
||||
|
||||
ScavTrap::ScavTrap(const ScavTrap& src): ClapTrap(src)
|
||||
{
|
||||
*this = src;
|
||||
std::cout << "ScavTrap(ScavTrap)" << std::endl;
|
||||
}
|
||||
|
||||
ScavTrap::~ScavTrap()
|
||||
{
|
||||
std::cout << "~ScavTrap()" << std::endl;
|
||||
}
|
||||
|
||||
ScavTrap& ScavTrap::operator=(const ScavTrap &src)
|
||||
{
|
||||
this->_life = src._life;
|
||||
this->_name = src._name;
|
||||
this->_energy = src._energy;
|
||||
this->_damage = src._damage;
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void ScavTrap::guardGate()
|
||||
{
|
||||
std::cout << "ScavTrap " << this->_name << " turn in Gate keeper mode" << std::endl;
|
||||
}
|
||||
|
||||
void ScavTrap::attack(const std::string& target)
|
||||
{
|
||||
if (this->_life == 0 || this->_energy == 0)
|
||||
{
|
||||
std::cerr << "error: ScavTrap " << this->_name << " dead" << std::endl;
|
||||
return;
|
||||
}
|
||||
this->_energy--;
|
||||
std::cerr << "ScavTrap " << this->_name << " attacks " << target << ", causing " << this->_damage << " points of damage" << std::endl;
|
||||
}
|
20
ex01/src/ScavTrap.hpp
Normal file
20
ex01/src/ScavTrap.hpp
Normal file
@ -0,0 +1,20 @@
|
||||
#pragma once
|
||||
|
||||
#include "ClapTrap.hpp"
|
||||
#include <string>
|
||||
|
||||
class ScavTrap: public ClapTrap
|
||||
{
|
||||
public:
|
||||
ScavTrap();
|
||||
ScavTrap(const std::string& name);
|
||||
ScavTrap(const ScavTrap& src);
|
||||
|
||||
~ScavTrap();
|
||||
|
||||
ScavTrap& operator=(const ScavTrap& src);
|
||||
|
||||
void guardGate();
|
||||
void attack(const std::string& target);
|
||||
|
||||
};
|
21
ex01/src/main.cpp
Normal file
21
ex01/src/main.cpp
Normal file
@ -0,0 +1,21 @@
|
||||
#include "ScavTrap.hpp"
|
||||
|
||||
int main()
|
||||
{
|
||||
ClapTrap dead;
|
||||
ScavTrap active ("Warrior");
|
||||
ScavTrap copy (active);
|
||||
active = copy;
|
||||
dead.attack(active.getName());
|
||||
active.attack(dead.getName());
|
||||
dead.takeDamage(active.getDamage());
|
||||
active.attack(dead.getName());
|
||||
dead.takeDamage(active.getDamage());
|
||||
active.attack(dead.getName());
|
||||
dead.takeDamage(active.getDamage());
|
||||
active.attack(dead.getName());
|
||||
dead.takeDamage(active.getDamage());
|
||||
active.attack(dead.getName());
|
||||
active.takeDamage(3);
|
||||
dead.beRepaired(42);
|
||||
}
|
Loading…
Reference in New Issue
Block a user