aboutsummaryrefslogtreecommitdiff
path: root/cpp03/ex04
diff options
context:
space:
mode:
Diffstat (limited to 'cpp03/ex04')
-rw-r--r--cpp03/ex04/ClapTrap.cpp105
-rw-r--r--cpp03/ex04/ClapTrap.hpp48
-rw-r--r--cpp03/ex04/FragTrap.cpp79
-rw-r--r--cpp03/ex04/FragTrap.hpp31
-rw-r--r--cpp03/ex04/NinjaTrap.cpp91
-rw-r--r--cpp03/ex04/NinjaTrap.hpp35
-rw-r--r--cpp03/ex04/ScavTrap.cpp74
-rw-r--r--cpp03/ex04/ScavTrap.hpp31
-rw-r--r--cpp03/ex04/SuperTrap.cpp75
-rw-r--r--cpp03/ex04/SuperTrap.hpp35
-rw-r--r--cpp03/ex04/main.cpp62
11 files changed, 666 insertions, 0 deletions
diff --git a/cpp03/ex04/ClapTrap.cpp b/cpp03/ex04/ClapTrap.cpp
new file mode 100644
index 0000000..6711799
--- /dev/null
+++ b/cpp03/ex04/ClapTrap.cpp
@@ -0,0 +1,105 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ClapTrap.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 15:28:43 by charles #+# #+# */
+/* Updated: 2020/04/13 15:50:48 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ClapTrap.hpp"
+
+ClapTrap::ClapTrap():
+ m_prefix("CL4P-TP "),
+ m_hitPoints(100),
+ m_maxHitPoints(100),
+ m_energyPoints(100),
+ m_maxEnergyPoints(100),
+ m_level(1),
+ m_name(""),
+ m_meleeAttackDamage(0),
+ m_rangedAttackDamage(0),
+ m_armorDamageReduction(0)
+{
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+ClapTrap::ClapTrap(std::string name):
+ m_prefix("CL4P-TP "),
+ m_hitPoints(100),
+ m_maxHitPoints(100),
+ m_energyPoints(100),
+ m_maxEnergyPoints(100),
+ m_level(1),
+ m_name(name),
+ m_meleeAttackDamage(0),
+ m_rangedAttackDamage(0),
+ m_armorDamageReduction(0)
+{
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+ClapTrap::ClapTrap(ClapTrap const& other)
+{
+ *this = other;
+}
+
+void ClapTrap::operator=(ClapTrap const& other)
+{
+ m_hitPoints = other.m_hitPoints;
+ m_maxHitPoints = other.m_maxHitPoints;
+ m_energyPoints = other.m_energyPoints;
+ m_maxEnergyPoints = other.m_maxEnergyPoints;
+ m_level = other.m_level;
+ m_meleeAttackDamage = other.m_meleeAttackDamage;
+ m_rangedAttackDamage = other.m_rangedAttackDamage;
+ m_armorDamageReduction = other.m_armorDamageReduction;
+}
+
+ClapTrap::~ClapTrap()
+{
+ std::cout << "CL4P-TP " << "Delete "<< m_name << ": your gaming references still suck" << std::endl;
+}
+
+void ClapTrap::rangedAttack(std::string const& target) const
+{
+ std::cout << m_prefix << m_name
+ << " attacks " << target
+ << " at range, causing " << m_rangedAttackDamage
+ << " points of damage!" << std::endl;
+}
+
+void ClapTrap::meleeAttack(std::string const& target) const
+{
+ std::cout << m_prefix << m_name
+ << " attacks " << target
+ << " in melee mode causing " << m_meleeAttackDamage
+ << " points of damage!" << std::endl;
+}
+
+void ClapTrap::takeDamage(unsigned int amount)
+{
+ if (amount < m_armorDamageReduction)
+ amount = 0;
+ else
+ amount -= m_armorDamageReduction;
+ if (amount > m_hitPoints)
+ amount = m_hitPoints;
+ m_hitPoints -= amount;
+ std::cout << m_prefix << m_name
+ << " takes " << amount
+ << " damage" << std::endl;
+}
+
+void ClapTrap::beRepaired(unsigned int amount)
+{
+ if (amount + m_hitPoints > m_maxHitPoints)
+ amount = m_maxHitPoints - m_hitPoints;
+ m_hitPoints += amount;
+ std::cout << m_prefix << m_name
+ << " gained " << amount
+ << " hit points" << std::endl;
+}
diff --git a/cpp03/ex04/ClapTrap.hpp b/cpp03/ex04/ClapTrap.hpp
new file mode 100644
index 0000000..5f4e26a
--- /dev/null
+++ b/cpp03/ex04/ClapTrap.hpp
@@ -0,0 +1,48 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ClapTrap.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 15:20:45 by charles #+# #+# */
+/* Updated: 2020/04/13 15:47:14 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+
+#ifndef CLAPTRAP_HPP
+# define CLAPTRAP_HPP
+
+# include <iostream>
+# include <string>
+
+class ClapTrap
+{
+public:
+ ClapTrap();
+ ClapTrap(std::string name);
+ ClapTrap(ClapTrap const& other);
+ void operator=(ClapTrap const& other);
+ ~ClapTrap();
+
+ void rangedAttack(std::string const& target) const;
+ void meleeAttack(std::string const& target) const;
+ void takeDamage(unsigned int amount);
+ void beRepaired(unsigned int amount);
+
+protected:
+ std::string m_prefix;
+
+ unsigned int m_hitPoints;
+ unsigned int m_maxHitPoints;
+ unsigned int m_energyPoints;
+ unsigned int m_maxEnergyPoints;
+ unsigned int m_level;
+ std::string m_name;
+ unsigned int m_meleeAttackDamage;
+ unsigned int m_rangedAttackDamage;
+ unsigned int m_armorDamageReduction;
+};
+
+#endif
diff --git a/cpp03/ex04/FragTrap.cpp b/cpp03/ex04/FragTrap.cpp
new file mode 100644
index 0000000..4db102e
--- /dev/null
+++ b/cpp03/ex04/FragTrap.cpp
@@ -0,0 +1,79 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* FragTrap.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/22 05:20:45 by cacharle #+# #+# */
+/* Updated: 2020/04/13 15:46:59 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "FragTrap.hpp"
+
+FragTrap::FragTrap():
+ ClapTrap()
+{
+ m_prefix = "FR4G-TP ";
+ m_energyPoints = 100;
+ m_maxEnergyPoints = 100;
+ m_meleeAttackDamage = 30;
+ m_rangedAttackDamage = 20;
+ m_armorDamageReduction = 5;
+ std::cout << "FR4G-TP New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+FragTrap::FragTrap(std::string name):
+ ClapTrap(name)
+{
+ m_prefix = "FR4G-TP ";
+ m_energyPoints = 100;
+ m_maxEnergyPoints = 100;
+ m_meleeAttackDamage = 30;
+ m_rangedAttackDamage = 20;
+ m_armorDamageReduction = 5;
+ std::cout << "FR4G-TP New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+FragTrap::FragTrap(FragTrap const& other)
+{
+ *this = other;
+}
+
+void FragTrap::operator=(FragTrap const& other)
+{
+ m_hitPoints = other.m_hitPoints;
+ m_maxHitPoints = other.m_maxHitPoints;
+ m_energyPoints = other.m_energyPoints;
+ m_maxEnergyPoints = other.m_maxEnergyPoints;
+ m_level = other.m_level;
+ m_meleeAttackDamage = other.m_meleeAttackDamage;
+ m_rangedAttackDamage = other.m_rangedAttackDamage;
+ m_armorDamageReduction = other.m_armorDamageReduction;
+}
+
+FragTrap::~FragTrap()
+{
+ std::cout << m_prefix << "Delete "<< m_name << ": your gaming references still suck" << std::endl;
+}
+
+void FragTrap::vaulthunter_dot_exe(std::string const& target)
+{
+ if (m_energyPoints < 25)
+ {
+ std::cout << "FR4G-TP " << m_name << " does not have enough energy" << std::endl;
+ return;
+ }
+ std::string attacks[5] = {
+ "boum boum",
+ "cursed for generation",
+ "sit and wait for your death",
+ "mimic a gun with his hand and make 'piou piou' sound",
+ "shot you in the face"
+ };
+ std::cout << "FR4G-TP " << m_name
+ << " attacks " << target
+ << " with " << attacks[rand() % 5] << std::endl;
+ m_energyPoints -= 25;
+}
diff --git a/cpp03/ex04/FragTrap.hpp b/cpp03/ex04/FragTrap.hpp
new file mode 100644
index 0000000..5db7027
--- /dev/null
+++ b/cpp03/ex04/FragTrap.hpp
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* FragTrap.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/22 05:17:16 by cacharle #+# #+# */
+/* Updated: 2020/04/13 18:35:46 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef FRAGTRAP_HPP
+# define FRAGTRAP_HPP
+
+# include <cstdlib>
+# include "ClapTrap.hpp"
+
+class FragTrap : public virtual ClapTrap
+{
+public:
+ FragTrap();
+ FragTrap(std::string name);
+ FragTrap(FragTrap const& other);
+ void operator=(FragTrap const& other);
+ ~FragTrap();
+
+ void vaulthunter_dot_exe(std::string const& target);
+};
+
+#endif
diff --git a/cpp03/ex04/NinjaTrap.cpp b/cpp03/ex04/NinjaTrap.cpp
new file mode 100644
index 0000000..2a27eec
--- /dev/null
+++ b/cpp03/ex04/NinjaTrap.cpp
@@ -0,0 +1,91 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* NinjaTrap.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 17:33:00 by charles #+# #+# */
+/* Updated: 2020/04/13 17:47:20 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "NinjaTrap.hpp"
+
+NinjaTrap::NinjaTrap():
+ ClapTrap()
+{
+ m_prefix = "NINJ4-TP ";
+ m_hitPoints = 60;
+ m_maxHitPoints = 60;
+ m_energyPoints = 120;
+ m_maxEnergyPoints = 120;
+ m_meleeAttackDamage = 60;
+ m_rangedAttackDamage = 5;
+ m_armorDamageReduction = 0;
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+NinjaTrap::NinjaTrap(std::string name):
+ ClapTrap(name)
+{
+ m_prefix = "NINJ4-TP ";
+ m_hitPoints = 60;
+ m_maxHitPoints = 60;
+ m_energyPoints = 120;
+ m_maxEnergyPoints = 120;
+ m_meleeAttackDamage = 60;
+ m_rangedAttackDamage = 5;
+ m_armorDamageReduction = 0;
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+NinjaTrap::NinjaTrap(NinjaTrap const& other)
+{
+ *this = other;
+}
+
+void NinjaTrap::operator=(NinjaTrap const& other)
+{
+ m_hitPoints = other.m_hitPoints;
+ m_maxHitPoints = other.m_maxHitPoints;
+ m_energyPoints = other.m_energyPoints;
+ m_maxEnergyPoints = other.m_maxEnergyPoints;
+ m_level = other.m_level;
+ m_meleeAttackDamage = other.m_meleeAttackDamage;
+ m_rangedAttackDamage = other.m_rangedAttackDamage;
+ m_armorDamageReduction = other.m_armorDamageReduction;
+}
+
+NinjaTrap::~NinjaTrap()
+{
+ std::cout << m_prefix << "Delete "<< m_name << ": your gaming references still suck" << std::endl;
+}
+
+void NinjaTrap::ninjaShoebox(NinjaTrap const& target)
+{
+ (void)target;
+ std::cout << m_prefix << m_name
+ << " attack other ninja trap, the guy who made the subject didn't gave a fuck" << std::endl;
+}
+
+void NinjaTrap::ninjaShoebox(FragTrap const& target)
+{
+ (void)target;
+ std::cout << m_prefix << m_name
+ << " attack frag trap, leave me alone" << std::endl;
+}
+
+void NinjaTrap::ninjaShoebox(ScavTrap const& target)
+{
+ (void)target;
+ std::cout << m_prefix << m_name
+ << " attack sciv trap, ehehehe look at me I'm being funny" << std::endl;
+}
+
+void NinjaTrap::ninjaShoebox(ClapTrap const& target)
+{
+ (void)target;
+ std::cout << m_prefix << m_name
+ << " attack clap trap, ISN'T THAT WHAT YOU WANTED" << std::endl;
+}
diff --git a/cpp03/ex04/NinjaTrap.hpp b/cpp03/ex04/NinjaTrap.hpp
new file mode 100644
index 0000000..72d7039
--- /dev/null
+++ b/cpp03/ex04/NinjaTrap.hpp
@@ -0,0 +1,35 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* NinjaTrap.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 17:31:24 by charles #+# #+# */
+/* Updated: 2020/04/13 18:41:44 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef NINJATRAP_HPP
+# define NINJATRAP_HPP
+
+# include "ClapTrap.hpp"
+# include "FragTrap.hpp"
+# include "ScavTrap.hpp"
+
+class NinjaTrap : public virtual ClapTrap
+{
+public:
+ NinjaTrap();
+ NinjaTrap(std::string name);
+ NinjaTrap(NinjaTrap const& other);
+ void operator=(NinjaTrap const& other);
+ ~NinjaTrap();
+
+ void ninjaShoebox(NinjaTrap const& target);
+ void ninjaShoebox(FragTrap const& target);
+ void ninjaShoebox(ScavTrap const& target);
+ void ninjaShoebox(ClapTrap const& target);
+};
+
+#endif
diff --git a/cpp03/ex04/ScavTrap.cpp b/cpp03/ex04/ScavTrap.cpp
new file mode 100644
index 0000000..d310ab1
--- /dev/null
+++ b/cpp03/ex04/ScavTrap.cpp
@@ -0,0 +1,74 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ScavTrap.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 14:15:03 by charles #+# #+# */
+/* Updated: 2020/04/13 15:46:56 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "ScavTrap.hpp"
+
+ScavTrap::ScavTrap():
+ ClapTrap()
+{
+ m_prefix = "SC4V-TP ";
+ m_energyPoints = 50;
+ m_maxEnergyPoints = 50;
+ m_meleeAttackDamage = 20;
+ m_rangedAttackDamage = 15;
+ m_armorDamageReduction = 3;
+ std::cout << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+ScavTrap::ScavTrap(std::string name):
+ ClapTrap(name)
+{
+ m_prefix = "SC4V-TP ";
+ m_energyPoints = 50;
+ m_maxEnergyPoints = 50;
+ m_meleeAttackDamage = 20;
+ m_rangedAttackDamage = 15;
+ m_armorDamageReduction = 3;
+ std::cout << "SC4V-TP New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+ScavTrap::ScavTrap(ScavTrap const& other)
+{
+ *this = other;
+}
+
+void ScavTrap::operator=(ScavTrap const& other)
+{
+ m_hitPoints = other.m_hitPoints;
+ m_maxHitPoints = other.m_maxHitPoints;
+ m_energyPoints = other.m_energyPoints;
+ m_maxEnergyPoints = other.m_maxEnergyPoints;
+ m_level = other.m_level;
+ m_meleeAttackDamage = other.m_meleeAttackDamage;
+ m_rangedAttackDamage = other.m_rangedAttackDamage;
+ m_armorDamageReduction = other.m_armorDamageReduction;
+}
+
+ScavTrap::~ScavTrap()
+{
+ std::cout << "SC4V-TP Delete " << m_name << ": your gaming references still suck" << std::endl;
+}
+
+void ScavTrap::challengeNewcomer(std::string const& target)
+{
+ std::string challenges[5] = {
+ "lick your elbow",
+ "do 1 push up",
+ "dont talk for 1 hour",
+ "draw your name by peeing in the snow",
+ "punch me"
+ };
+ std::cout << "SC4V-TP " << m_name
+ << " challenge " << target
+ << " to " << challenges[rand() % 5] << std::endl;
+ m_energyPoints -= 25;
+}
diff --git a/cpp03/ex04/ScavTrap.hpp b/cpp03/ex04/ScavTrap.hpp
new file mode 100644
index 0000000..a1d625b
--- /dev/null
+++ b/cpp03/ex04/ScavTrap.hpp
@@ -0,0 +1,31 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* ScavTrap.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 14:11:51 by charles #+# #+# */
+/* Updated: 2020/04/13 18:41:33 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef SCAVTRAP_HPP
+# define SCAVTRAP_HPP
+
+# include <cstdlib>
+# include "ClapTrap.hpp"
+
+class ScavTrap : public ClapTrap
+{
+public:
+ ScavTrap();
+ ScavTrap(std::string name);
+ ScavTrap(ScavTrap const& other);
+ void operator=(ScavTrap const& other);
+ ~ScavTrap();
+
+ void challengeNewcomer(std::string const& target);
+};
+
+#endif
diff --git a/cpp03/ex04/SuperTrap.cpp b/cpp03/ex04/SuperTrap.cpp
index e69de29..c30f973 100644
--- a/cpp03/ex04/SuperTrap.cpp
+++ b/cpp03/ex04/SuperTrap.cpp
@@ -0,0 +1,75 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* SuperTrap.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 17:52:56 by charles #+# #+# */
+/* Updated: 2020/04/13 17:55:14 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include "SuperTrap.hpp"
+
+SuperTrap::SuperTrap():
+ m_prefix("SUP3R-TP"),
+ m_hitPoints(100),
+ m_maxHitPoints(100),
+ m_energyPoints(100),
+ m_maxEnergyPoints(100),
+ m_level(1),
+ m_name(""),
+ m_meleeAttackDamage(0),
+ m_rangedAttackDamage(0),
+ m_armorDamageReduction(0)
+{
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+SuperTrap::SuperTrap(std::string name):
+ m_prefix("SUP3R-TP"),
+ m_hitPoints(100),
+ m_maxHitPoints(100),
+ m_energyPoints(100),
+ m_maxEnergyPoints(100),
+ m_level(1),
+ m_name(name),
+ m_meleeAttackDamage(0),
+ m_rangedAttackDamage(0),
+ m_armorDamageReduction(0)
+{
+ std::cout << m_prefix << "New " << m_name << ": your gaming references suck" << std::endl;
+}
+
+SuperTrap::SuperTrap(SuperTrap const& other)
+{
+ *this = other;
+}
+
+void SuperTrap::operator=(SuperTrap const& other)
+{
+ m_hitPoints = other.m_hitPoints;
+ m_maxHitPoints = other.m_maxHitPoints;
+ m_energyPoints = other.m_energyPoints;
+ m_maxEnergyPoints = other.m_maxEnergyPoints;
+ m_level = other.m_level;
+ m_meleeAttackDamage = other.m_meleeAttackDamage;
+ m_rangedAttackDamage = other.m_rangedAttackDamage;
+ m_armorDamageReduction = other.m_armorDamageReduction;
+}
+
+SuperTrap::~SuperTrap()
+{
+ std::cout << "SUP3R-TP" << "Delete "<< m_name << ": your gaming references still suck" << std::endl;
+}
+
+void SuperTrap::rangedAttack(std::string const& target) const
+{
+ FragTrap::rangedArray(target);
+}
+
+void SuperTrap::meleeAttack(std::string const& target) const
+{
+ NinjaTrap::rangedArray(target);
+}
diff --git a/cpp03/ex04/SuperTrap.hpp b/cpp03/ex04/SuperTrap.hpp
index e69de29..ebebd18 100644
--- a/cpp03/ex04/SuperTrap.hpp
+++ b/cpp03/ex04/SuperTrap.hpp
@@ -0,0 +1,35 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* SuperTrap.hpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/04/13 17:48:31 by charles #+# #+# */
+/* Updated: 2020/04/13 18:42:28 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#ifndef SUPERTRAP_HPP
+# define SUPERTRAP_HPP
+
+# include <string>
+# include <iostream>
+# include "FragTrap.hpp"
+# include "NinjaTrap.hpp"
+
+class SuperTrap : public FragTrap, public NinjaTrap
+{
+public:
+ SuperTrap();
+ SuperTrap(std::string name);
+ SuperTrap(SuperTrap const& other);
+ void operator=(SuperTrap const& other);
+ ~SuperTrap();
+
+ void rangedAttack(std::string const& target) const;
+ void meleeAttack(std::string const& target) const;
+
+};
+
+#endif
diff --git a/cpp03/ex04/main.cpp b/cpp03/ex04/main.cpp
new file mode 100644
index 0000000..6f709f8
--- /dev/null
+++ b/cpp03/ex04/main.cpp
@@ -0,0 +1,62 @@
+/* ************************************************************************** */
+/* */
+/* ::: :::::::: */
+/* main.cpp :+: :+: :+: */
+/* +:+ +:+ +:+ */
+/* By: cacharle <marvin@42.fr> +#+ +:+ +#+ */
+/* +#+#+#+#+#+ +#+ */
+/* Created: 2020/02/22 05:41:27 by cacharle #+# #+# */
+/* Updated: 2020/04/13 17:46:24 by charles ### ########.fr */
+/* */
+/* ************************************************************************** */
+
+#include <cstdlib>
+#include "FragTrap.hpp"
+#include "ScavTrap.hpp"
+#include "NinjaTrap.hpp"
+
+int main(void)
+{
+ srand(time(NULL));
+
+ FragTrap ft("bob");
+ ft.rangedAttack("a dog");
+ ft.meleeAttack("a cat");
+ ft.takeDamage(10);
+ ft.beRepaired(10);
+ ft.vaulthunter_dot_exe("your mom");
+ ft.vaulthunter_dot_exe("your dad");
+ ft.vaulthunter_dot_exe("your brother");
+ ft.vaulthunter_dot_exe("your sister");
+ ft.vaulthunter_dot_exe("your grandma");
+ ft.takeDamage(1000);
+ ft.beRepaired(1000);
+
+ std::cout << std::endl;
+ ScavTrap scav("jean");
+ scav.rangedAttack("a dog");
+ scav.meleeAttack("a cat");
+ scav.takeDamage(10);
+ scav.beRepaired(10);
+ scav.challengeNewcomer("your mom");
+ scav.challengeNewcomer("your dad");
+ scav.challengeNewcomer("your brother");
+ scav.challengeNewcomer("your sister");
+ scav.challengeNewcomer("your grandma");
+ scav.takeDamage(1000);
+ scav.beRepaired(1000);
+
+ std::cout << std::endl;
+ NinjaTrap ninja("didier");
+ ninja.rangedAttack("a dog");
+ ninja.meleeAttack("a cat");
+ ninja.takeDamage(10);
+ ninja.beRepaired(10);
+ ninja.ninjaShoebox(ninja);
+ ninja.ninjaShoebox(ft);
+ ninja.ninjaShoebox(scav);
+ ninja.ninjaShoebox(ClapTrap("oui"));
+ ninja.takeDamage(1000);
+ ninja.beRepaired(1000);
+ return 0;
+}