--- /dev/null
+#include "ClapTrap.h"
+#include <string>
+#include <iostream>
+
+ClapTrap::ClapTrap(std::string name):
+ m_name(name), m_hp(10), m_energy(10), m_attack(0)
+{
+ std::cout << "ClapTrap " << m_name << " has spawned.\n";
+}
+
+ClapTrap::ClapTrap(const ClapTrap &other)
+{
+ std::cout << "ClapTrap " << m_name << " has spawned.\n";
+ *this = other;
+}
+
+ClapTrap::~ClapTrap()
+{
+ std::cout << "ClapTrap " << m_name << " has despawned.\n";
+}
+
+ClapTrap &ClapTrap::operator=(const ClapTrap &other)
+{
+ if (this == &other)
+ return (*this);
+ m_name = other.m_name;
+ m_hp = other.m_hp;
+ m_energy = other.m_energy;
+ m_attack = other.m_attack;
+ return (*this);
+}
+
+void ClapTrap::attack(const std::string &target)
+{
+ if (m_hp == 0)
+ std::cout << "ClapTrap " << m_name
+ << " is dead, hence cannot attack.\n";
+ else if (m_energy == 0)
+ std::cout << "ClapTrap " << m_name
+ << " does not have enough energy to attack.\n";
+ else
+ {
+ std::cout << "ClapTrap " << m_name
+ << " attacks " << target << " and deals " << m_attack << " damage.\n";
+ --m_energy;
+ }
+}
+
+void ClapTrap::takeDamage(unsigned int amount)
+{
+ if (m_hp == 0)
+ std::cout << "ClapTrap " << m_name << " is alread dead.\n";
+ else if (amount > m_hp)
+ {
+ std::cout << "ClapTrap " << m_name
+ << " takes " << amount << " damage and dies\n";
+ m_hp = 0;
+ }
+ else
+ {
+ std::cout << "ClapTrap " << m_name
+ << " takes " << amount << " damage.\n";
+ m_hp -= amount;
+ }
+}
+
+void ClapTrap::beRepaired(unsigned int amount)
+{
+ if (m_hp == 0)
+ std::cout << "ClapTrap " << m_name
+ << " is dead, hence cannot repair itself.\n";
+ else if (m_energy == 0)
+ std::cout << "ClapTrap " << m_name
+ << " does not have enough energy to repair itself.\n";
+ else
+ {
+ std::cout << "ClapTrap " << m_name
+ << " repairs iself for " << amount << " hit points.\n";
+ m_hp += amount;
+ }
+}
--- /dev/null
+#ifndef CLAPTRAP_H
+# define CLAPTRAP_H
+
+# include <string>
+
+class ClapTrap
+{
+ private:
+ std::string m_name;
+ unsigned int m_hp;
+ unsigned int m_energy;
+ unsigned int m_attack;
+
+ public:
+ ClapTrap(std::string name = "DEFAULT");
+ ClapTrap(const ClapTrap &other);
+ ~ClapTrap();
+
+ ClapTrap &operator=(const ClapTrap &other);
+
+ void attack(const std::string &target);
+ void takeDamage(unsigned int amount);
+ void beRepaired(unsigned int amount);
+};
+
+#endif // CLAPTRAP_H