From 62e0f56f945fd4d74ab4883a1f103136e504e839 Mon Sep 17 00:00:00 2001 From: Adam JOLY Date: Tue, 10 Dec 2024 15:22:18 +0100 Subject: [PATCH] =?UTF-8?q?=E3=80=8C=F0=9F=8F=97=EF=B8=8F=E3=80=8D=20wip(E?= =?UTF-8?q?x03):=20I=20red=20the=20subject?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ex03/AMateria.cpp | 36 ++++++++++++++++++++++++++ ex03/AMateria.hpp | 32 +++++++++++++++++++++++ ex03/Character.cpp | 0 ex03/Character.hpp | 31 +++++++++++++++++++++++ ex03/Cube.hpp | 19 ++++++++++++++ ex03/Cure.cpp | 46 +++++++++++++++++++++++++++++++++ ex03/Cure.hpp | 27 ++++++++++++++++++++ ex03/ICharacter.hpp | 26 +++++++++++++++++++ ex03/IMateriaSource.hpp | 22 ++++++++++++++++ ex03/Ice.cpp | 46 +++++++++++++++++++++++++++++++++ ex03/Ice.hpp | 27 ++++++++++++++++++++ ex03/Log.cpp | 22 ++++++++++++++++ ex03/Log.hpp | 19 ++++++++++++++ ex03/Makefile | 56 +++++++++++++++++++++++++++++++++++++++++ ex03/MateriaSource.cpp | 0 ex03/MateriaSource.hpp | 28 +++++++++++++++++++++ ex03/main.cpp | 25 ++++++++++++++++++ 17 files changed, 462 insertions(+) create mode 100644 ex03/AMateria.cpp create mode 100644 ex03/AMateria.hpp create mode 100644 ex03/Character.cpp create mode 100644 ex03/Character.hpp create mode 100644 ex03/Cube.hpp create mode 100644 ex03/Cure.cpp create mode 100644 ex03/Cure.hpp create mode 100644 ex03/ICharacter.hpp create mode 100644 ex03/IMateriaSource.hpp create mode 100644 ex03/Ice.cpp create mode 100644 ex03/Ice.hpp create mode 100644 ex03/Log.cpp create mode 100644 ex03/Log.hpp create mode 100644 ex03/Makefile create mode 100644 ex03/MateriaSource.cpp create mode 100644 ex03/MateriaSource.hpp create mode 100644 ex03/main.cpp diff --git a/ex03/AMateria.cpp b/ex03/AMateria.cpp new file mode 100644 index 0000000..2ba0f04 --- /dev/null +++ b/ex03/AMateria.cpp @@ -0,0 +1,36 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AMateria.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/09 11:24:41 by adjoly #+# #+# */ +/* Updated: 2024/12/10 12:28:09 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "AMateria.hpp" +#include "Log.hpp" + +AMateria::AMateria(void) : _type("") { + log("➕", "AMateria", "", "default constructor called"); +} + +AMateria::AMateria(std::string const &type) { + log("➕", "AMateria", "", "constructor called"); +} + +AMateria::~AMateria(void) { + log("➖", "AMateria", "", "destructor called"); +} + +AMateria &AMateria::operator=(const AMateria &cpy) { + log("➕", "AMateria", "", "copy assignement constructor called"); + if (this != &cpy) { + _type = cpy._type; + } + return (*this); +} + +std::string const &AMateria::getType(void) const { return (_type); } diff --git a/ex03/AMateria.hpp b/ex03/AMateria.hpp new file mode 100644 index 0000000..5da0e90 --- /dev/null +++ b/ex03/AMateria.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AMateria.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/06 16:29:29 by adjoly #+# #+# */ +/* Updated: 2024/12/10 12:36:59 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class ICharacter; + +class AMateria { + protected: + std::string _type; + public: + AMateria(void); + ~AMateria(void); + AMateria(const AMateria &); + AMateria(std::string const &); + AMateria &operator=(const AMateria &); + + std::string const &getType() const; + virtual AMateria *clone() const = 0; + virtual void use(ICharacter&); +}; diff --git a/ex03/Character.cpp b/ex03/Character.cpp new file mode 100644 index 0000000..e69de29 diff --git a/ex03/Character.hpp b/ex03/Character.hpp new file mode 100644 index 0000000..a98151e --- /dev/null +++ b/ex03/Character.hpp @@ -0,0 +1,31 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Character.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/10 14:59:12 by adjoly #+# #+# */ +/* Updated: 2024/12/10 15:15:46 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" + +#define ENV_SIZE 4 + +class Character { + private: + AMateria _materias[ENV_SIZE]; + public: + Character(void); + ~Character(void); + Character(const Character &); + Character &operator=(const Character &); + + void equip(Character *); + void unequip(int idx); + void use(int idx, Character &); +}; diff --git a/ex03/Cube.hpp b/ex03/Cube.hpp new file mode 100644 index 0000000..4da3521 --- /dev/null +++ b/ex03/Cube.hpp @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Cube.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/06 16:47:20 by adjoly #+# #+# */ +/* Updated: 2024/12/06 16:51:31 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" + +class Cube : public AMateria { + +}; diff --git a/ex03/Cure.cpp b/ex03/Cure.cpp new file mode 100644 index 0000000..c5e2a8a --- /dev/null +++ b/ex03/Cure.cpp @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Cure.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/10 12:34:54 by adjoly #+# #+# */ +/* Updated: 2024/12/10 13:47:54 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Cure.hpp" +#include "AMateria.hpp" +#include "ICharacter.hpp" +#include "Log.hpp" +#include + +Cure::Cure(void) : AMateria("cure") { + log("➕", "Cure", "", "default constructor called"); +} + +Cure::Cure(const Cure &cpy) { + log("➕", "Cure", "", "copy constructor called"); + *this = cpy; +} + +Cure::~Cure(void) { + log("➖", "Cure", "", "destructor called"); +} + +Cure &Cure::operator=(const Cure &cpy) { + log("➕", "Cure", "", "copy assignement constructor called"); + if (this != &cpy) { + _type = cpy._type; + } + return (*this); +} + +Cure *Cure::clone(void) const { + return (new Cure); +} + +void Cure::use(ICharacter &character) { + std::cout << "* heals " << character.getName() << "’s wounds *"; +} diff --git a/ex03/Cure.hpp b/ex03/Cure.hpp new file mode 100644 index 0000000..dc21584 --- /dev/null +++ b/ex03/Cure.hpp @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Cure.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/10 12:35:41 by adjoly #+# #+# */ +/* Updated: 2024/12/10 12:36:22 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" +#include "ICharacter.hpp" + +class Cure : public AMateria { + public: + Cure(void); + ~Cure(void); + Cure(const Cure &); + Cure &operator=(const Cure &); + + Cure *clone(void) const; + void use(ICharacter &); +}; diff --git a/ex03/ICharacter.hpp b/ex03/ICharacter.hpp new file mode 100644 index 0000000..9df6761 --- /dev/null +++ b/ex03/ICharacter.hpp @@ -0,0 +1,26 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ICharacter.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/06 16:45:39 by adjoly #+# #+# */ +/* Updated: 2024/12/10 12:37:17 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +class AMateria; + +class ICharacter { + public: + virtual ~ICharacter() {} + virtual std::string const & getName() const = 0; + virtual void equip(AMateria* m) = 0; + virtual void unequip(int idx) = 0; + virtual void use(int idx, ICharacter& target) = 0; +}; diff --git a/ex03/IMateriaSource.hpp b/ex03/IMateriaSource.hpp new file mode 100644 index 0000000..ba0af4d --- /dev/null +++ b/ex03/IMateriaSource.hpp @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* IMateriaSource.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/09 11:18:14 by adjoly #+# #+# */ +/* Updated: 2024/12/09 11:18:36 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" + +class IMateriaSource { + public: + virtual ~IMateriaSource() {} + virtual void learnMateria(AMateria*) = 0; + virtual AMateria* createMateria(std::string const & type) = 0; +}; diff --git a/ex03/Ice.cpp b/ex03/Ice.cpp new file mode 100644 index 0000000..f584401 --- /dev/null +++ b/ex03/Ice.cpp @@ -0,0 +1,46 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Ice.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/07 12:13:03 by adjoly #+# #+# */ +/* Updated: 2024/12/10 12:25:11 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Ice.hpp" +#include "AMateria.hpp" +#include "ICharacter.hpp" +#include "Log.hpp" +#include + +Ice::Ice(void) : AMateria("ice") { + log("➕", "Ice", "", "default constructor called"); +} + +Ice::Ice(const Ice &cpy) { + log("➕", "Ice", "", "copy constructor called"); + *this = cpy; +} + +Ice::~Ice(void) { + log("➖", "Ice", "", "destructor called"); +} + +Ice &Ice::operator=(const Ice &cpy) { + log("➕", "Ice", "", "copy assignement constructor called"); + if (this != &cpy) { + _type = cpy._type; + } + return (*this); +} + +Ice *Ice::clone(void) const { + return (new Ice); +} + +void Ice::use(ICharacter &character) { + std::cout << "* shoots an ice bolt at " << character.getName() << " *"; +} diff --git a/ex03/Ice.hpp b/ex03/Ice.hpp new file mode 100644 index 0000000..4a2b5a0 --- /dev/null +++ b/ex03/Ice.hpp @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Ice.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/06 16:51:34 by adjoly #+# #+# */ +/* Updated: 2024/12/07 12:29:29 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" +#include "ICharacter.hpp" + +class Ice : public AMateria { + public: + Ice(void); + ~Ice(void); + Ice(const Ice &); + Ice &operator=(const Ice &); + + Ice *clone(void) const; + void use(ICharacter &); +}; diff --git a/ex03/Log.cpp b/ex03/Log.cpp new file mode 100644 index 0000000..9dbf721 --- /dev/null +++ b/ex03/Log.cpp @@ -0,0 +1,22 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* log.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/11/30 16:30:53 by adjoly #+# #+# */ +/* Updated: 2024/11/30 16:32:37 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include + +void log(std::string emoji, std::string what, std::string who, std::string str) { + if (who.empty()) + std::cout << "「" << emoji << "」" << what << ": " << str << std::endl; + else + std::cout << "「" << emoji << "」" << what << "(" << who << "): " << str << std::endl; +} + diff --git a/ex03/Log.hpp b/ex03/Log.hpp new file mode 100644 index 0000000..5b8e7fe --- /dev/null +++ b/ex03/Log.hpp @@ -0,0 +1,19 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* log.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/06 12:01:21 by adjoly #+# #+# */ +/* Updated: 2024/12/06 13:12:13 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include + +typedef unsigned int uint; + +void log(std::string, std::string, std::string, std::string); diff --git a/ex03/Makefile b/ex03/Makefile new file mode 100644 index 0000000..34ae06e --- /dev/null +++ b/ex03/Makefile @@ -0,0 +1,56 @@ +# **************************************************************************** # +# # +# ::: :::::::: # +# Makefile :+: :+: :+: # +# +:+ +:+ +:+ # +# By: adjoly +#+ +:+ +#+ # +# +#+#+#+#+#+ +#+ # +# Created: 2024/10/25 16:09:27 by adjoly #+# #+# # +# Updated: 2024/12/06 16:28:16 by adjoly ### ########.fr # +# # +# **************************************************************************** # + +SHELL = bash + +NAME = Amateria + +CC = c++ + +OBJSDIR = obj/ + +SRCS = $(shell find . -name '*.cpp') + +OBJS = $(addprefix $(OBJSDIR), $(SRCS:.cpp=.o)) + +FLAGS = -Wall -Werror -Wextra -std=c++98 -MMD -MP + +RED = \033[0;31m +GREEN = \033[0;32m +YELLOW = \033[1;33m +PURPLE = \e[0;35m +NC = \033[0m +DELETE = \x1B[2K\r + +all: $(NAME) + +$(NAME): $(OBJS) + @$(CC) $(FLAGS) $(OBJS) -o $(NAME) + @printf "$(YELLOW)「✨」($(NAME)) Program compiled\n" + +$(OBJSDIR)%.o: %.cpp + @mkdir -p $(@D) + @$(CC) $(FLAGS) -c $< -o $@ + @printf "$(DELETE)$(GREEN)「🔨」($<) Object compiled\n" + +clean: + @rm -f $(OBJS) + @printf "$(DELETE)$(RED)「🗑️」($(OBJS)) Object deleted\n" + +fclean: clean + @rm -f $(NAME) + @rm -Rf $(OBJSDIR) + @printf "$(RED)「🗑️」($(NAME)) Program deleted\n" + +re: fclean all + +.PHONY: clean fclean all re diff --git a/ex03/MateriaSource.cpp b/ex03/MateriaSource.cpp new file mode 100644 index 0000000..e69de29 diff --git a/ex03/MateriaSource.hpp b/ex03/MateriaSource.hpp new file mode 100644 index 0000000..6635415 --- /dev/null +++ b/ex03/MateriaSource.hpp @@ -0,0 +1,28 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* MateriaSource.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: adjoly +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2024/12/10 13:51:37 by adjoly #+# #+# */ +/* Updated: 2024/12/10 14:50:48 by adjoly ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#pragma once + +#include "AMateria.hpp" + +class MaterianSource { + private: + AMateria _materias[4]; + public: + MaterianSource(void); + ~MaterianSource(void); + MaterianSource(const MaterianSource &); + MaterianSource &operator=(const MaterianSource &); + + void leanrMateria(AMateria *); + AMateria createMateria(std::string const &); +}; diff --git a/ex03/main.cpp b/ex03/main.cpp new file mode 100644 index 0000000..7f79467 --- /dev/null +++ b/ex03/main.cpp @@ -0,0 +1,25 @@ +#include "AMateria.hpp" +#include "IMateriaSource.hpp" +#include "ICharacter.hpp" +#include "Cure.hpp" +#include "Ice.hpp" + +int main() +{ + IMateriaSource* src = new MateriaSource(); + src->learnMateria(new Ice()); + src->learnMateria(new Cure()); + ICharacter* me = new Character("me"); + AMateria* tmp; + tmp = src->createMateria("ice"); + me->equip(tmp); + tmp = src->createMateria("cure"); + me->equip(tmp); + ICharacter* bob = new Character("bob"); + me->use(0, *bob); + me->use(1, *bob); + delete bob; + delete me; + delete src; + return 0; +}