From 69e91f766477f2ea95c7012439bcdcb866a6642c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kha=C3=AFs=20COLIN?= Date: Mon, 19 May 2025 13:50:55 +0200 Subject: [PATCH] feat(ex00): it works --- ex00/.gitignore | 1 + ex00/ClapTrap.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++ ex00/ClapTrap.hpp | 24 +++++++++++++++++++ ex00/Makefile | 39 +++++++++++++++++++++++++++++++ ex00/main.cpp | 40 ++++++++++++++++++++++++++++++++ 5 files changed, 163 insertions(+) create mode 100644 ex00/.gitignore create mode 100644 ex00/ClapTrap.cpp create mode 100644 ex00/ClapTrap.hpp create mode 100644 ex00/Makefile create mode 100644 ex00/main.cpp diff --git a/ex00/.gitignore b/ex00/.gitignore new file mode 100644 index 0000000..5d61c98 --- /dev/null +++ b/ex00/.gitignore @@ -0,0 +1 @@ +ex00 diff --git a/ex00/ClapTrap.cpp b/ex00/ClapTrap.cpp new file mode 100644 index 0000000..fc8ac6d --- /dev/null +++ b/ex00/ClapTrap.cpp @@ -0,0 +1,59 @@ +#include "ClapTrap.hpp" +#include + +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; + } +} diff --git a/ex00/ClapTrap.hpp b/ex00/ClapTrap.hpp new file mode 100644 index 0000000..72fda40 --- /dev/null +++ b/ex00/ClapTrap.hpp @@ -0,0 +1,24 @@ +#ifndef CLAPTRAP_HPP +#define CLAPTRAP_HPP + +#include + +class ClapTrap { +private: + 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 diff --git a/ex00/Makefile b/ex00/Makefile new file mode 100644 index 0000000..be748c8 --- /dev/null +++ b/ex00/Makefile @@ -0,0 +1,39 @@ +NAME = ex00 +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 \ + +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 diff --git a/ex00/main.cpp b/ex00/main.cpp new file mode 100644 index 0000000..b3432a3 --- /dev/null +++ b/ex00/main.cpp @@ -0,0 +1,40 @@ +#include "ClapTrap.hpp" + +int main(void) { + { + ClapTrap claptrap = ClapTrap(); + claptrap.attack("training dummy"); + claptrap.takeDamage(3); + claptrap.attack("training dummy"); + claptrap.takeDamage(3); + claptrap.beRepaired(5); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + } + { + ClapTrap claptrap = ClapTrap("John Doe"); + claptrap.attack("training dummy"); + claptrap.takeDamage(3); + claptrap.attack("training dummy"); + claptrap.takeDamage(3); + claptrap.beRepaired(5); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.attack("training dummy"); + claptrap.beRepaired(5); + claptrap.beRepaired(5); + claptrap.beRepaired(5); + claptrap.beRepaired(5); + } + return 0; +}