From ce7a753bc55d54d300605e5a8c94abca17233599 Mon Sep 17 00:00:00 2001 From: whaffman Date: Thu, 17 Apr 2025 14:05:53 +0200 Subject: [PATCH] am i done? --- ex00/Makefile | 4 +- ex00/Polymorphism | Bin 0 -> 38784 bytes ex00/inc/WrongCat.hpp | 2 +- ex01/Makefile | 4 +- ex01/inc/Brain.hpp | 4 +- ex02/src/main.cpp | 14 +- ex03/Makefile | 3 +- ex03/inc/AMateria.hpp | 9 +- ex03/inc/Character.hpp | 11 +- ex03/inc/Cure.hpp | 9 +- ex03/inc/ICharacter.hpp | 6 +- ex03/inc/IMateriaSource.hpp | 4 +- ex03/inc/Ice.hpp | 8 +- ex03/inc/MateriaSource.hpp | 9 +- ex03/inc/colors.h | 554 ++++++++++++++++++++++++++++++++++++ ex03/src/AMateria.cpp | 26 +- ex03/src/Character.cpp | 168 +++++++++++ ex03/src/Cure.cpp | 52 ++++ ex03/src/Ice.cpp | 52 ++++ ex03/src/MateriaSource.cpp | 112 ++++++++ ex03/src/main.cpp | 99 +++++++ 21 files changed, 1112 insertions(+), 38 deletions(-) create mode 100755 ex00/Polymorphism create mode 100644 ex03/inc/colors.h create mode 100644 ex03/src/Character.cpp create mode 100644 ex03/src/Cure.cpp create mode 100644 ex03/src/Ice.cpp create mode 100644 ex03/src/MateriaSource.cpp create mode 100644 ex03/src/main.cpp diff --git a/ex00/Makefile b/ex00/Makefile index a9accf3..f1538f9 100644 --- a/ex00/Makefile +++ b/ex00/Makefile @@ -6,11 +6,11 @@ # By: whaffman +#+ # # +#+ # # Created: 2025/03/24 15:14:58 by whaffman #+# #+# # -# Updated: 2025/04/10 11:42:36 by whaffman ######## odam.nl # +# Updated: 2025/04/17 13:36:03 by whaffman ######## odam.nl # # # # **************************************************************************** # -NAME= Polymorphism +NAME= Animals TEST_SRC= Animal_test.cpp Dog_test.cpp Cat_test.cpp WrongAnimal_test.cpp WrongCat_test.cpp SRC= main.cpp $(TEST_SRC) Animal.cpp Dog.cpp Cat.cpp WrongAnimal.cpp WrongCat.cpp diff --git a/ex00/Polymorphism b/ex00/Polymorphism new file mode 100755 index 0000000000000000000000000000000000000000..3670304a18580670bfd31ff661e0485536f7fab7 GIT binary patch literal 38784 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 +#+ */ /* +#+ */ /* Created: 2025/04/05 17:23:37 by whaffman #+# #+# */ -/* Updated: 2025/04/05 17:30:32 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:47:48 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ diff --git a/ex01/Makefile b/ex01/Makefile index 3a5004e..66b0a10 100644 --- a/ex01/Makefile +++ b/ex01/Makefile @@ -6,11 +6,11 @@ # By: whaffman +#+ # # +#+ # # Created: 2025/03/24 15:14:58 by whaffman #+# #+# # -# Updated: 2025/04/05 17:53:27 by whaffman ######## odam.nl # +# Updated: 2025/04/17 13:36:10 by whaffman ######## odam.nl # # # # **************************************************************************** # -NAME= WithBrains +NAME= Animals SRC= main.cpp \ Animal.cpp \ Dog.cpp \ diff --git a/ex01/inc/Brain.hpp b/ex01/inc/Brain.hpp index b48ab63..c486452 100644 --- a/ex01/inc/Brain.hpp +++ b/ex01/inc/Brain.hpp @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/05 17:40:33 by whaffman #+# #+# */ -/* Updated: 2025/04/14 14:41:27 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:38:18 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -14,7 +14,7 @@ #include -#define MAX_IDEAS 10 +#define MAX_IDEAS 100 class Brain { diff --git a/ex02/src/main.cpp b/ex02/src/main.cpp index 1ead97c..1c55b2d 100644 --- a/ex02/src/main.cpp +++ b/ex02/src/main.cpp @@ -6,7 +6,7 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 21:32:01 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:06:06 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:39:47 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ @@ -25,10 +25,10 @@ int main(void) std::cout << BOLD_UNDERLINE << COLOR10 << "Creating a Cat and a Dog" << RESET << std::endl; AAnimal *cat = new Cat(); AAnimal *dog = new Dog(); - + std::cout << std::endl; + //Can't create an instance of abstract class //AAnimal *AAnimal = new AAnimal(); - std::cout << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Cats and Dogs sounds like:" << RESET << std::endl; cat->makeSound(); @@ -40,7 +40,7 @@ int main(void) //This works because we cast the AAnimal pointer to a Cat pointer ((Cat*)cat)->getBrain().setIdea(0, "I am a cat and i will be copied"); - + std::cout << BOLD_UNDERLINE << COLOR10 << "Cat brain ideas:" << RESET << std::endl; ((Cat*)cat)->getBrain().printIdeas(); std::cout << std::endl; @@ -52,7 +52,7 @@ int main(void) std::cout << BOLD_UNDERLINE << COLOR10 << "Cat2 brain ideas:" << RESET << std::endl; ((Cat*)cat2)->getBrain().printIdeas(); std::cout << std::endl; - + std::cout << BOLD_UNDERLINE << COLOR10 << "Creating a Cat3 with AAnimal assignment operator does not copy brain" << RESET << std::endl; AAnimal *cat3 = new Cat(); *cat3 = *cat2; @@ -69,7 +69,7 @@ int main(void) std::cout << BOLD_UNDERLINE << COLOR10 << "Cat3 brain ideas:" << RESET << std::endl; ((Cat*)cat3)->getBrain().printIdeas(); std::cout << std::endl; - + std::cout << BOLD_UNDERLINE << COLOR10 << "Pointers of Cats" << RESET << std::endl; std::cout << std::endl; @@ -77,7 +77,7 @@ int main(void) std::cout << COLOR10 << "cat2: " << cat2 << std::endl; std::cout << COLOR10 << "cat3: " << cat3 << std::endl; std::cout << std::endl; - + std::cout << BOLD_UNDERLINE << COLOR10 << "Destructor called on AAnimal object" << RESET << std::endl; std::cout << std::endl; delete cat; diff --git a/ex03/Makefile b/ex03/Makefile index e851fa7..0952610 100644 --- a/ex03/Makefile +++ b/ex03/Makefile @@ -6,7 +6,7 @@ # By: whaffman +#+ # # +#+ # # Created: 2025/03/24 15:14:58 by whaffman #+# #+# # -# Updated: 2025/04/14 22:41:56 by whaffman ######## odam.nl # +# Updated: 2025/04/16 16:21:53 by whaffman ######## odam.nl # # # # **************************************************************************** # @@ -14,3 +14,4 @@ NAME= Materia SRC= main.cpp AMateria.cpp Ice.cpp Cure.cpp Character.cpp MateriaSource.cpp -include ../common.mk + CFLAGS = -Wall -Wextra -Werror -g -fsanitize=address \ No newline at end of file diff --git a/ex03/inc/AMateria.hpp b/ex03/inc/AMateria.hpp index 276cf66..1b291fb 100644 --- a/ex03/inc/AMateria.hpp +++ b/ex03/inc/AMateria.hpp @@ -6,23 +6,28 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:12:51 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:35:00 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:41:47 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once + #include #include "ICharacter.hpp" +class ICharacter; + class AMateria { protected: std::string type; public: - AMateria() = default; + AMateria(); AMateria(AMateria const &other); + AMateria(std::string const &type); + virtual ~AMateria(); AMateria &operator=(AMateria const &other); diff --git a/ex03/inc/Character.hpp b/ex03/inc/Character.hpp index 112e533..37ce702 100644 --- a/ex03/inc/Character.hpp +++ b/ex03/inc/Character.hpp @@ -6,22 +6,25 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:23:59 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:29:01 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:43:10 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once -#include "ICharacter.hpp" + #include -#include -#include "colors.h" +#include "AMateria.hpp" +#include "ICharacter.hpp" class Character : public ICharacter { private: std::string name; AMateria *inventory[4]; + AMateria *blackhole; + void dropMateria(AMateria *m); + public: Character(); diff --git a/ex03/inc/Cure.hpp b/ex03/inc/Cure.hpp index ee097d1..1f185b2 100644 --- a/ex03/inc/Cure.hpp +++ b/ex03/inc/Cure.hpp @@ -6,17 +6,14 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:21:38 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:29:08 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:41:18 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once -#include "AMateria.hpp" +#include "AMateria.hpp" #include "ICharacter.hpp" -#include -#include -#include "colors.h" class Cure : public AMateria { @@ -28,5 +25,5 @@ public: AMateria *clone() const override; void use(ICharacter &target) override; - + }; diff --git a/ex03/inc/ICharacter.hpp b/ex03/inc/ICharacter.hpp index 2757b5b..3ae11cc 100644 --- a/ex03/inc/ICharacter.hpp +++ b/ex03/inc/ICharacter.hpp @@ -6,14 +6,18 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:14:07 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:14:28 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:42:38 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once + #include + #include "AMateria.hpp" +class AMateria; + class ICharacter { public: diff --git a/ex03/inc/IMateriaSource.hpp b/ex03/inc/IMateriaSource.hpp index 29c64e9..d8e31bc 100644 --- a/ex03/inc/IMateriaSource.hpp +++ b/ex03/inc/IMateriaSource.hpp @@ -6,12 +6,14 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:25:03 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:25:53 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:42:47 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once + #include "AMateria.hpp" + #include class IMateriaSource diff --git a/ex03/inc/Ice.hpp b/ex03/inc/Ice.hpp index 74f45d3..a2fbbd4 100644 --- a/ex03/inc/Ice.hpp +++ b/ex03/inc/Ice.hpp @@ -6,16 +6,14 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:23:22 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:23:50 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:42:32 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once + #include "AMateria.hpp" #include "ICharacter.hpp" -#include -#include -#include "colors.h" class Ice : public AMateria { @@ -27,4 +25,4 @@ public: AMateria *clone() const override; void use(ICharacter &target) override; -}; +}; diff --git a/ex03/inc/MateriaSource.hpp b/ex03/inc/MateriaSource.hpp index 66830dd..3dbab46 100644 --- a/ex03/inc/MateriaSource.hpp +++ b/ex03/inc/MateriaSource.hpp @@ -6,14 +6,17 @@ /* By: whaffman +#+ */ /* +#+ */ /* Created: 2025/04/14 22:26:01 by whaffman #+# #+# */ -/* Updated: 2025/04/14 22:26:45 by whaffman ######## odam.nl */ +/* Updated: 2025/04/17 13:42:59 by whaffman ######## odam.nl */ /* */ /* ************************************************************************** */ #pragma once -#include "IMateriaSource.hpp" + #include +#include "AMateria.hpp" +#include "IMateriaSource.hpp" + class MateriaSource : public IMateriaSource { private: @@ -26,4 +29,6 @@ public: void learnMateria(AMateria *m) override; AMateria *createMateria(std::string const &type) override; + + void printMaterias() const; }; diff --git a/ex03/inc/colors.h b/ex03/inc/colors.h new file mode 100644 index 0000000..461f384 --- /dev/null +++ b/ex03/inc/colors.h @@ -0,0 +1,554 @@ +#ifndef COLORS_H +#define COLORS_H + +#define RESET "\033[m" + +#define BOLD_UNDERLINE "\033[1;4m" +#define BOLD_UNDERLINE_OFF "\033[22;24m" + +#define BOLD "\033[1m" +#define UNDERLINE "\033[4m" +#define ITALIC "\033[3m" +#define BLINK "\033[5m" +#define INVERSE "\033[7m" +#define STRIKETHROUGH "\033[9m" + +#define BOLD_OFF "\033[22m" +#define UNDERLINE_OFF "\033[24m" +#define ITALIC_OFF "\033[23m" +#define BLINK_OFF "\033[25m" +#define INVERSE_OFF "\033[27m" +#define STRIKETHROUGH_OFF "\033[29m" + +#define REVERSE "\033[7m" + +#define BLACK "\033[30m" +#define RED "\033[31m" +#define GREEN "\033[32m" +#define YELLOW "\033[33m" +#define BLUE "\033[34m" +#define MAGENTA "\033[35m" +#define CYAN "\033[36m" +#define WHITE "\033[37m" + +#define COLOR0 "\033[38;5;0m" +#define COLOR1 "\033[38;5;1m" +#define COLOR2 "\033[38;5;2m" +#define COLOR3 "\033[38;5;3m" +#define COLOR4 "\033[38;5;4m" +#define COLOR5 "\033[38;5;5m" +#define COLOR6 "\033[38;5;6m" +#define COLOR7 "\033[38;5;7m" +#define COLOR8 "\033[38;5;8m" +#define COLOR9 "\033[38;5;9m" +#define COLOR10 "\033[38;5;10m" +#define COLOR11 "\033[38;5;11m" +#define COLOR12 "\033[38;5;12m" +#define COLOR13 "\033[38;5;13m" +#define COLOR14 "\033[38;5;14m" +#define COLOR15 "\033[38;5;15m" + +#define BACKGROUND0 "\033[48;5;0m" +#define BACKGROUND1 "\033[48;5;1m" +#define BACKGROUND2 "\033[48;5;2m" +#define BACKGROUND3 "\033[48;5;3m" +#define BACKGROUND4 "\033[48;5;4m" +#define BACKGROUND5 "\033[48;5;5m" +#define BACKGROUND6 "\033[48;5;6m" +#define BACKGROUND7 "\033[48;5;7m" +#define BACKGROUND8 "\033[48;5;8m" +#define BACKGROUND9 "\033[48;5;9m" +#define BACKGROUND10 "\033[48;5;10m" +#define BACKGROUND11 "\033[48;5;11m" +#define BACKGROUND12 "\033[48;5;12m" +#define BACKGROUND13 "\033[48;5;13m" +#define BACKGROUND14 "\033[48;5;14m" +#define BACKGROUND15 "\033[48;5;15m" + +// #define COLOR16 "\033[38;5;16m" +// #define COLOR17 "\033[38;5;17m" +// #define COLOR18 "\033[38;5;18m" +// #define COLOR19 "\033[38;5;19m" +// #define COLOR20 "\033[38;5;20m" +// #define COLOR21 "\033[38;5;21m" +// #define COLOR22 "\033[38;5;22m" +// #define COLOR23 "\033[38;5;23m" +// #define COLOR24 "\033[38;5;24m" +// #define COLOR25 "\033[38;5;25m" +// #define COLOR26 "\033[38;5;26m" +// #define COLOR27 "\033[38;5;27m" +// #define COLOR28 "\033[38;5;28m" +// #define COLOR29 "\033[38;5;29m" +// #define COLOR30 "\033[38;5;30m" +// #define COLOR31 "\033[38;5;31m" +// #define COLOR32 "\033[38;5;32m" +// #define COLOR33 "\033[38;5;33m" +// #define COLOR34 "\033[38;5;34m" +// #define COLOR35 "\033[38;5;35m" +// #define COLOR36 "\033[38;5;36m" +// #define COLOR37 "\033[38;5;37m" +// #define COLOR38 "\033[38;5;38m" +// #define COLOR39 "\033[38;5;39m" +// #define COLOR40 "\033[38;5;40m" +// #define COLOR41 "\033[38;5;41m" +// #define COLOR42 "\033[38;5;42m" +// #define COLOR43 "\033[38;5;43m" +// #define COLOR44 "\033[38;5;44m" +// #define COLOR45 "\033[38;5;45m" +// #define COLOR46 "\033[38;5;46m" +// #define COLOR47 "\033[38;5;47m" +// #define COLOR48 "\033[38;5;48m" +// #define COLOR49 "\033[38;5;49m" +// #define COLOR50 "\033[38;5;50m" +// #define COLOR51 "\033[38;5;51m" +// #define COLOR52 "\033[38;5;52m" +// #define COLOR53 "\033[38;5;53m" +// #define COLOR54 "\033[38;5;54m" +// #define COLOR55 "\033[38;5;55m" +// #define COLOR56 "\033[38;5;56m" +// #define COLOR57 "\033[38;5;57m" +// #define COLOR58 "\033[38;5;58m" +// #define COLOR59 "\033[38;5;59m" +// #define COLOR60 "\033[38;5;60m" +// #define COLOR61 "\033[38;5;61m" +// #define COLOR62 "\033[38;5;62m" +// #define COLOR63 "\033[38;5;63m" +// #define COLOR64 "\033[38;5;64m" +// #define COLOR65 "\033[38;5;65m" +// #define COLOR66 "\033[38;5;66m" +// #define COLOR67 "\033[38;5;67m" +// #define COLOR68 "\033[38;5;68m" +// #define COLOR69 "\033[38;5;69m" +// #define COLOR70 "\033[38;5;70m" +// #define COLOR71 "\033[38;5;71m" +// #define COLOR72 "\033[38;5;72m" +// #define COLOR73 "\033[38;5;73m" +// #define COLOR74 "\033[38;5;74m" +// #define COLOR75 "\033[38;5;75m" +// #define COLOR76 "\033[38;5;76m" +// #define COLOR77 "\033[38;5;77m" +// #define COLOR78 "\033[38;5;78m" +// #define COLOR79 "\033[38;5;79m" +// #define COLOR80 "\033[38;5;80m" +// #define COLOR81 "\033[38;5;81m" +// #define COLOR82 "\033[38;5;82m" +// #define COLOR83 "\033[38;5;83m" +// #define COLOR84 "\033[38;5;84m" +// #define COLOR85 "\033[38;5;85m" +// #define COLOR86 "\033[38;5;86m" +// #define COLOR87 "\033[38;5;87m" +// #define COLOR88 "\033[38;5;88m" +// #define COLOR89 "\033[38;5;89m" +// #define COLOR90 "\033[38;5;90m" +// #define COLOR91 "\033[38;5;91m" +// #define COLOR92 "\033[38;5;92m" +// #define COLOR93 "\033[38;5;93m" +// #define COLOR94 "\033[38;5;94m" +// #define COLOR95 "\033[38;5;95m" +// #define COLOR96 "\033[38;5;96m" +// #define COLOR97 "\033[38;5;97m" +// #define COLOR98 "\033[38;5;98m" +// #define COLOR99 "\033[38;5;99m" +// #define COLOR100 "\033[38;5;100m" +// #define COLOR101 "\033[38;5;101m" +// #define COLOR102 "\033[38;5;102m" +// #define COLOR103 "\033[38;5;103m" +// #define COLOR104 "\033[38;5;104m" +// #define COLOR105 "\033[38;5;105m" +// #define COLOR106 "\033[38;5;106m" +// #define COLOR107 "\033[38;5;107m" +// #define COLOR108 "\033[38;5;108m" +// #define COLOR109 "\033[38;5;109m" +// #define COLOR110 "\033[38;5;110m" +// #define COLOR111 "\033[38;5;111m" +// #define COLOR112 "\033[38;5;112m" +// #define COLOR113 "\033[38;5;113m" +// #define COLOR114 "\033[38;5;114m" +// #define COLOR115 "\033[38;5;115m" +// #define COLOR116 "\033[38;5;116m" +// #define COLOR117 "\033[38;5;117m" +// #define COLOR118 "\033[38;5;118m" +// #define COLOR119 "\033[38;5;119m" +// #define COLOR120 "\033[38;5;120m" +// #define COLOR121 "\033[38;5;121m" +// #define COLOR122 "\033[38;5;122m" +// #define COLOR123 "\033[38;5;123m" +// #define COLOR124 "\033[38;5;124m" +// #define COLOR125 "\033[38;5;125m" +// #define COLOR126 "\033[38;5;126m" +// #define COLOR127 "\033[38;5;127m" +// #define COLOR128 "\033[38;5;128m" +// #define COLOR129 "\033[38;5;129m" +// #define COLOR130 "\033[38;5;130m" +// #define COLOR131 "\033[38;5;131m" +// #define COLOR132 "\033[38;5;132m" +// #define COLOR133 "\033[38;5;133m" +// #define COLOR134 "\033[38;5;134m" +// #define COLOR135 "\033[38;5;135m" +// #define COLOR136 "\033[38;5;136m" +// #define COLOR137 "\033[38;5;137m" +// #define COLOR138 "\033[38;5;138m" +// #define COLOR139 "\033[38;5;139m" +// #define COLOR140 "\033[38;5;140m" +// #define COLOR141 "\033[38;5;141m" +// #define COLOR142 "\033[38;5;142m" +// #define COLOR143 "\033[38;5;143m" +// #define COLOR144 "\033[38;5;144m" +// #define COLOR145 "\033[38;5;145m" +// #define COLOR146 "\033[38;5;146m" +// #define COLOR147 "\033[38;5;147m" +// #define COLOR148 "\033[38;5;148m" +// #define COLOR149 "\033[38;5;149m" +// #define COLOR150 "\033[38;5;150m" +// #define COLOR151 "\033[38;5;151m" +// #define COLOR152 "\033[38;5;152m" +// #define COLOR153 "\033[38;5;153m" +// #define COLOR154 "\033[38;5;154m" +// #define COLOR155 "\033[38;5;155m" +// #define COLOR156 "\033[38;5;156m" +// #define COLOR157 "\033[38;5;157m" +// #define COLOR158 "\033[38;5;158m" +// #define COLOR159 "\033[38;5;159m" +// #define COLOR160 "\033[38;5;160m" +// #define COLOR161 "\033[38;5;161m" +// #define COLOR162 "\033[38;5;162m" +// #define COLOR163 "\033[38;5;163m" +// #define COLOR164 "\033[38;5;164m" +// #define COLOR165 "\033[38;5;165m" +// #define COLOR166 "\033[38;5;166m" +// #define COLOR167 "\033[38;5;167m" +// #define COLOR168 "\033[38;5;168m" +// #define COLOR169 "\033[38;5;169m" +// #define COLOR170 "\033[38;5;170m" +// #define COLOR171 "\033[38;5;171m" +// #define COLOR172 "\033[38;5;172m" +// #define COLOR173 "\033[38;5;173m" +// #define COLOR174 "\033[38;5;174m" +// #define COLOR175 "\033[38;5;175m" +// #define COLOR176 "\033[38;5;176m" +// #define COLOR177 "\033[38;5;177m" +// #define COLOR178 "\033[38;5;178m" +// #define COLOR179 "\033[38;5;179m" +// #define COLOR180 "\033[38;5;180m" +// #define COLOR181 "\033[38;5;181m" +// #define COLOR182 "\033[38;5;182m" +// #define COLOR183 "\033[38;5;183m" +// #define COLOR184 "\033[38;5;184m" +// #define COLOR185 "\033[38;5;185m" +// #define COLOR186 "\033[38;5;186m" +// #define COLOR187 "\033[38;5;187m" +// #define COLOR188 "\033[38;5;188m" +// #define COLOR189 "\033[38;5;189m" +// #define COLOR190 "\033[38;5;190m" +// #define COLOR191 "\033[38;5;191m" +// #define COLOR192 "\033[38;5;192m" +// #define COLOR193 "\033[38;5;193m" +// #define COLOR194 "\033[38;5;194m" +// #define COLOR195 "\033[38;5;195m" +// #define COLOR196 "\033[38;5;196m" +// #define COLOR197 "\033[38;5;197m" +// #define COLOR198 "\033[38;5;198m" +// #define COLOR199 "\033[38;5;199m" +// #define COLOR200 "\033[38;5;200m" +// #define COLOR201 "\033[38;5;201m" +// #define COLOR202 "\033[38;5;202m" +// #define COLOR203 "\033[38;5;203m" +// #define COLOR204 "\033[38;5;204m" +// #define COLOR205 "\033[38;5;205m" +// #define COLOR206 "\033[38;5;206m" +// #define COLOR207 "\033[38;5;207m" +// #define COLOR208 "\033[38;5;208m" +// #define COLOR209 "\033[38;5;209m" +// #define COLOR210 "\033[38;5;210m" +// #define COLOR211 "\033[38;5;211m" +// #define COLOR212 "\033[38;5;212m" +// #define COLOR213 "\033[38;5;213m" +// #define COLOR214 "\033[38;5;214m" +// #define COLOR215 "\033[38;5;215m" +// #define COLOR216 "\033[38;5;216m" +// #define COLOR217 "\033[38;5;217m" +// #define COLOR218 "\033[38;5;218m" +// #define COLOR219 "\033[38;5;219m" +// #define COLOR220 "\033[38;5;220m" +// #define COLOR221 "\033[38;5;221m" +// #define COLOR222 "\033[38;5;222m" +// #define COLOR223 "\033[38;5;223m" +// #define COLOR224 "\033[38;5;224m" +// #define COLOR225 "\033[38;5;225m" +// #define COLOR226 "\033[38;5;226m" +// #define COLOR227 "\033[38;5;227m" +// #define COLOR228 "\033[38;5;228m" +// #define COLOR229 "\033[38;5;229m" +// #define COLOR230 "\033[38;5;230m" +// #define COLOR231 "\033[38;5;231m" +// #define COLOR232 "\033[38;5;232m" +// #define COLOR233 "\033[38;5;233m" +// #define COLOR234 "\033[38;5;234m" +// #define COLOR235 "\033[38;5;235m" +// #define COLOR236 "\033[38;5;236m" +// #define COLOR237 "\033[38;5;237m" +// #define COLOR238 "\033[38;5;238m" +// #define COLOR239 "\033[38;5;239m" +// #define COLOR240 "\033[38;5;240m" +// #define COLOR241 "\033[38;5;241m" +// #define COLOR242 "\033[38;5;242m" +// #define COLOR243 "\033[38;5;243m" +// #define COLOR244 "\033[38;5;244m" +// #define COLOR245 "\033[38;5;245m" +// #define COLOR246 "\033[38;5;246m" +// #define COLOR247 "\033[38;5;247m" +// #define COLOR248 "\033[38;5;248m" +// #define COLOR249 "\033[38;5;249m" +// #define COLOR250 "\033[38;5;250m" +// #define COLOR251 "\033[38;5;251m" +// #define COLOR252 "\033[38;5;252m" +// #define COLOR253 "\033[38;5;253m" +// #define COLOR254 "\033[38;5;254m" +// #define COLOR255 "\033[38;5;255m" + + +// #define BACKGROUND16 "\033[48;5;16m" +// #define BACKGROUND17 "\033[48;5;17m" +// #define BACKGROUND18 "\033[48;5;18m" +// #define BACKGROUND19 "\033[48;5;19m" +// #define BACKGROUND20 "\033[48;5;20m" +// #define BACKGROUND21 "\033[48;5;21m" +// #define BACKGROUND22 "\033[48;5;22m" +// #define BACKGROUND23 "\033[48;5;23m" +// #define BACKGROUND24 "\033[48;5;24m" +// #define BACKGROUND25 "\033[48;5;25m" +// #define BACKGROUND26 "\033[48;5;26m" +// #define BACKGROUND27 "\033[48;5;27m" +// #define BACKGROUND28 "\033[48;5;28m" +// #define BACKGROUND29 "\033[48;5;29m" +// #define BACKGROUND30 "\033[48;5;30m" +// #define BACKGROUND31 "\033[48;5;31m" +// #define BACKGROUND32 "\033[48;5;32m" +// #define BACKGROUND33 "\033[48;5;33m" +// #define BACKGROUND34 "\033[48;5;34m" +// #define BACKGROUND35 "\033[48;5;35m" +// #define BACKGROUND36 "\033[48;5;36m" +// #define BACKGROUND37 "\033[48;5;37m" +// #define BACKGROUND38 "\033[48;5;38m" +// #define BACKGROUND39 "\033[48;5;39m" +// #define BACKGROUND40 "\033[48;5;40m" +// #define BACKGROUND41 "\033[48;5;41m" +// #define BACKGROUND42 "\033[48;5;42m" +// #define BACKGROUND43 "\033[48;5;43m" +// #define BACKGROUND44 "\033[48;5;44m" +// #define BACKGROUND45 "\033[48;5;45m" +// #define BACKGROUND46 "\033[48;5;46m" +// #define BACKGROUND47 "\033[48;5;47m" +// #define BACKGROUND48 "\033[48;5;48m" +// #define BACKGROUND49 "\033[48;5;49m" +// #define BACKGROUND50 "\033[48;5;50m" +// #define BACKGROUND51 "\033[48;5;51m" +// #define BACKGROUND52 "\033[48;5;52m" +// #define BACKGROUND53 "\033[48;5;53m" +// #define BACKGROUND54 "\033[48;5;54m" +// #define BACKGROUND55 "\033[48;5;55m" +// #define BACKGROUND56 "\033[48;5;56m" +// #define BACKGROUND57 "\033[48;5;57m" +// #define BACKGROUND58 "\033[48;5;58m" +// #define BACKGROUND59 "\033[48;5;59m" +// #define BACKGROUND60 "\033[48;5;60m" +// #define BACKGROUND61 "\033[48;5;61m" +// #define BACKGROUND62 "\033[48;5;62m" +// #define BACKGROUND63 "\033[48;5;63m" +// #define BACKGROUND64 "\033[48;5;64m" +// #define BACKGROUND65 "\033[48;5;65m" +// #define BACKGROUND66 "\033[48;5;66m" +// #define BACKGROUND67 "\033[48;5;67m" +// #define BACKGROUND68 "\033[48;5;68m" +// #define BACKGROUND69 "\033[48;5;69m" +// #define BACKGROUND70 "\033[48;5;70m" +// #define BACKGROUND71 "\033[48;5;71m" +// #define BACKGROUND72 "\033[48;5;72m" +// #define BACKGROUND73 "\033[48;5;73m" +// #define BACKGROUND74 "\033[48;5;74m" +// #define BACKGROUND75 "\033[48;5;75m" +// #define BACKGROUND76 "\033[48;5;76m" +// #define BACKGROUND77 "\033[48;5;77m" +// #define BACKGROUND78 "\033[48;5;78m" +// #define BACKGROUND79 "\033[48;5;79m" +// #define BACKGROUND80 "\033[48;5;80m" +// #define BACKGROUND81 "\033[48;5;81m" +// #define BACKGROUND82 "\033[48;5;82m" +// #define BACKGROUND83 "\033[48;5;83m" +// #define BACKGROUND84 "\033[48;5;84m" +// #define BACKGROUND85 "\033[48;5;85m" +// #define BACKGROUND86 "\033[48;5;86m" +// #define BACKGROUND87 "\033[48;5;87m" +// #define BACKGROUND88 "\033[48;5;88m" +// #define BACKGROUND89 "\033[48;5;89m" +// #define BACKGROUND90 "\033[48;5;90m" +// #define BACKGROUND91 "\033[48;5;91m" +// #define BACKGROUND92 "\033[48;5;92m" +// #define BACKGROUND93 "\033[48;5;93m" +// #define BACKGROUND94 "\033[48;5;94m" +// #define BACKGROUND95 "\033[48;5;95m" +// #define BACKGROUND96 "\033[48;5;96m" +// #define BACKGROUND97 "\033[48;5;97m" +// #define BACKGROUND98 "\033[48;5;98m" +// #define BACKGROUND99 "\033[48;5;99m" +// #define BACKGROUND100 "\033[48;5;100m" +// #define BACKGROUND101 "\033[48;5;101m" +// #define BACKGROUND102 "\033[48;5;102m" +// #define BACKGROUND103 "\033[48;5;103m" +// #define BACKGROUND104 "\033[48;5;104m" +// #define BACKGROUND105 "\033[48;5;105m" +// #define BACKGROUND106 "\033[48;5;106m" +// #define BACKGROUND107 "\033[48;5;107m" +// #define BACKGROUND108 "\033[48;5;108m" +// #define BACKGROUND109 "\033[48;5;109m" +// #define BACKGROUND110 "\033[48;5;110m" +// #define BACKGROUND111 "\033[48;5;111m" +// #define BACKGROUND112 "\033[48;5;112m" +// #define BACKGROUND113 "\033[48;5;113m" +// #define BACKGROUND114 "\033[48;5;114m" +// #define BACKGROUND115 "\033[48;5;115m" +// #define BACKGROUND116 "\033[48;5;116m" +// #define BACKGROUND117 "\033[48;5;117m" +// #define BACKGROUND118 "\033[48;5;118m" +// #define BACKGROUND119 "\033[48;5;119m" +// #define BACKGROUND120 "\033[48;5;120m" +// #define BACKGROUND121 "\033[48;5;121m" +// #define BACKGROUND122 "\033[48;5;122m" +// #define BACKGROUND123 "\033[48;5;123m" +// #define BACKGROUND124 "\033[48;5;124m" +// #define BACKGROUND125 "\033[48;5;125m" +// #define BACKGROUND126 "\033[48;5;126m" +// #define BACKGROUND127 "\033[48;5;127m" +// #define BACKGROUND128 "\033[48;5;128m" +// #define BACKGROUND129 "\033[48;5;129m" +// #define BACKGROUND130 "\033[48;5;130m" +// #define BACKGROUND131 "\033[48;5;131m" +// #define BACKGROUND132 "\033[48;5;132m" +// #define BACKGROUND133 "\033[48;5;133m" +// #define BACKGROUND134 "\033[48;5;134m" +// #define BACKGROUND135 "\033[48;5;135m" +// #define BACKGROUND136 "\033[48;5;136m" +// #define BACKGROUND137 "\033[48;5;137m" +// #define BACKGROUND138 "\033[48;5;138m" +// #define BACKGROUND139 "\033[48;5;139m" +// #define BACKGROUND140 "\033[48;5;140m" +// #define BACKGROUND141 "\033[48;5;141m" +// #define BACKGROUND142 "\033[48;5;142m" +// #define BACKGROUND143 "\033[48;5;143m" +// #define BACKGROUND144 "\033[48;5;144m" +// #define BACKGROUND145 "\033[48;5;145m" +// #define BACKGROUND146 "\033[48;5;146m" +// #define BACKGROUND147 "\033[48;5;147m" +// #define BACKGROUND148 "\033[48;5;148m" +// #define BACKGROUND149 "\033[48;5;149m" +// #define BACKGROUND150 "\033[48;5;150m" +// #define BACKGROUND151 "\033[48;5;151m" +// #define BACKGROUND152 "\033[48;5;152m" +// #define BACKGROUND153 "\033[48;5;153m" +// #define BACKGROUND154 "\033[48;5;154m" +// #define BACKGROUND155 "\033[48;5;155m" +// #define BACKGROUND156 "\033[48;5;156m" +// #define BACKGROUND157 "\033[48;5;157m" +// #define BACKGROUND158 "\033[48;5;158m" +// #define BACKGROUND159 "\033[48;5;159m" +// #define BACKGROUND160 "\033[48;5;160m" +// #define BACKGROUND161 "\033[48;5;161m" +// #define BACKGROUND162 "\033[48;5;162m" +// #define BACKGROUND163 "\033[48;5;163m" +// #define BACKGROUND164 "\033[48;5;164m" +// #define BACKGROUND165 "\033[48;5;165m" +// #define BACKGROUND166 "\033[48;5;166m" +// #define BACKGROUND167 "\033[48;5;167m" +// #define BACKGROUND168 "\033[48;5;168m" +// #define BACKGROUND169 "\033[48;5;169m" +// #define BACKGROUND170 "\033[48;5;170m" +// #define BACKGROUND171 "\033[48;5;171m" +// #define BACKGROUND172 "\033[48;5;172m" +// #define BACKGROUND173 "\033[48;5;173m" +// #define BACKGROUND174 "\033[48;5;174m" +// #define BACKGROUND175 "\033[48;5;175m" +// #define BACKGROUND176 "\033[48;5;176m" +// #define BACKGROUND177 "\033[48;5;177m" +// #define BACKGROUND178 "\033[48;5;178m" +// #define BACKGROUND179 "\033[48;5;179m" +// #define BACKGROUND180 "\033[48;5;180m" +// #define BACKGROUND181 "\033[48;5;181m" +// #define BACKGROUND182 "\033[48;5;182m" +// #define BACKGROUND183 "\033[48;5;183m" +// #define BACKGROUND184 "\033[48;5;184m" +// #define BACKGROUND185 "\033[48;5;185m" +// #define BACKGROUND186 "\033[48;5;186m" +// #define BACKGROUND187 "\033[48;5;187m" +// #define BACKGROUND188 "\033[48;5;188m" +// #define BACKGROUND189 "\033[48;5;189m" +// #define BACKGROUND190 "\033[48;5;190m" +// #define BACKGROUND191 "\033[48;5;191m" +// #define BACKGROUND192 "\033[48;5;192m" +// #define BACKGROUND193 "\033[48;5;193m" +// #define BACKGROUND194 "\033[48;5;194m" +// #define BACKGROUND195 "\033[48;5;195m" +// #define BACKGROUND196 "\033[48;5;196m" +// #define BACKGROUND197 "\033[48;5;197m" +// #define BACKGROUND198 "\033[48;5;198m" +// #define BACKGROUND199 "\033[48;5;199m" +// #define BACKGROUND200 "\033[48;5;200m" +// #define BACKGROUND201 "\033[48;5;201m" +// #define BACKGROUND202 "\033[48;5;202m" +// #define BACKGROUND203 "\033[48;5;203m" +// #define BACKGROUND204 "\033[48;5;204m" +// #define BACKGROUND205 "\033[48;5;205m" +// #define BACKGROUND206 "\033[48;5;206m" +// #define BACKGROUND207 "\033[48;5;207m" +// #define BACKGROUND208 "\033[48;5;208m" +// #define BACKGROUND209 "\033[48;5;209m" +// #define BACKGROUND210 "\033[48;5;210m" +// #define BACKGROUND211 "\033[48;5;211m" +// #define BACKGROUND212 "\033[48;5;212m" +// #define BACKGROUND213 "\033[48;5;213m" +// #define BACKGROUND214 "\033[48;5;214m" +// #define BACKGROUND215 "\033[48;5;215m" +// #define BACKGROUND216 "\033[48;5;216m" +// #define BACKGROUND217 "\033[48;5;217m" +// #define BACKGROUND218 "\033[48;5;218m" +// #define BACKGROUND219 "\033[48;5;219m" +// #define BACKGROUND220 "\033[48;5;220m" +// #define BACKGROUND221 "\033[48;5;221m" +// #define BACKGROUND222 "\033[48;5;222m" +// #define BACKGROUND223 "\033[48;5;223m" +// #define BACKGROUND224 "\033[48;5;224m" +// #define BACKGROUND225 "\033[48;5;225m" +// #define BACKGROUND226 "\033[48;5;226m" +// #define BACKGROUND227 "\033[48;5;227m" +// #define BACKGROUND228 "\033[48;5;228m" +// #define BACKGROUND229 "\033[48;5;229m" +// #define BACKGROUND230 "\033[48;5;230m" +// #define BACKGROUND231 "\033[48;5;231m" +// #define BACKGROUND232 "\033[48;5;232m" +// #define BACKGROUND233 "\033[48;5;233m" +// #define BACKGROUND234 "\033[48;5;234m" +// #define BACKGROUND235 "\033[48;5;235m" +// #define BACKGROUND236 "\033[48;5;236m" +// #define BACKGROUND237 "\033[48;5;237m" +// #define BACKGROUND238 "\033[48;5;238m" +// #define BACKGROUND239 "\033[48;5;239m" +// #define BACKGROUND240 "\033[48;5;240m" +// #define BACKGROUND241 "\033[48;5;241m" +// #define BACKGROUND242 "\033[48;5;242m" +// #define BACKGROUND243 "\033[48;5;243m" +// #define BACKGROUND244 "\033[48;5;244m" +// #define BACKGROUND245 "\033[48;5;245m" +// #define BACKGROUND246 "\033[48;5;246m" +// #define BACKGROUND247 "\033[48;5;247m" +// #define BACKGROUND248 "\033[48;5;248m" +// #define BACKGROUND249 "\033[48;5;249m" +// #define BACKGROUND250 "\033[48;5;250m" +// #define BACKGROUND251 "\033[48;5;251m" +// #define BACKGROUND252 "\033[48;5;252m" +// #define BACKGROUND253 "\033[48;5;253m" +// #define BACKGROUND254 "\033[48;5;254m" +// #define BACKGROUND255 "\033[48;5;255m" + + + + +#endif \ No newline at end of file diff --git a/ex03/src/AMateria.cpp b/ex03/src/AMateria.cpp index 7b2e0c1..347aaf8 100644 --- a/ex03/src/AMateria.cpp +++ b/ex03/src/AMateria.cpp @@ -1,26 +1,48 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* AMateria.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/17 13:43:35 by whaffman #+# #+# */ +/* Updated: 2025/04/17 13:43:36 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + #include "AMateria.hpp" #include "ICharacter.hpp" + +#include "colors.h" + #include #include AMateria::AMateria() : type("default") { + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Default constructor called" << std::endl; + } -AMateria::AMateria(AMateria const & other) +AMateria::AMateria(AMateria const & other) : type(other.type) { + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Copy constructor called" << std::endl; + } AMateria::AMateria(std::string const & type) : type(type) { + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Parametric constructor called" << std::endl; } AMateria::~AMateria() { + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Deconstructor called" << std::endl; } AMateria & AMateria::operator=(AMateria const & other) { + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Copy Assignment operator called" << std::endl; if (this != &other) type = other.type; return *this; @@ -33,5 +55,5 @@ std::string const & AMateria::getType() const void AMateria::use(ICharacter & target) { - std::cout << "AMateria::use called on " << target.getName() << std::endl; + std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" uses" << type << "on" << target.getName() << std::endl; } diff --git a/ex03/src/Character.cpp b/ex03/src/Character.cpp new file mode 100644 index 0000000..68b2fcb --- /dev/null +++ b/ex03/src/Character.cpp @@ -0,0 +1,168 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Character.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/17 13:43:45 by whaffman #+# #+# */ +/* Updated: 2025/04/17 13:43:55 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include + +#include "AMateria.hpp" +#include "Character.hpp" +#include "ICharacter.hpp" + +#include "colors.h" + +void Character::dropMateria(AMateria *m) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" dropMateria function called" << std::endl; + if(blackhole) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" blackhole crunching older materia" << std::endl; + delete blackhole; + } + blackhole = m; + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" blackhole filled with materia of type: " << blackhole->getType() << std::endl; +} + +Character::Character() : name("default"), blackhole(nullptr) +{ + std::cout << BACKGROUND11 << BOLD << "Character" << RESET <<" Default constructor called" << std::endl; + for (int i = 0; i < 4; ++i) + inventory[i] = nullptr; +} + +Character::Character(std::string const &name) : name(name), blackhole(nullptr) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Parametric constructor called" << std::endl; + for (int i = 0; i < 4; ++i) + inventory[i] = nullptr; + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Inventory initialized" << std::endl; +} + +Character::Character(Character const &other) : name(other.name) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Copy constructor called" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (other.inventory[i]) + inventory[i] = other.inventory[i]->clone(); + else + inventory[i] = nullptr; + } + if (other.blackhole) + blackhole = other.blackhole->clone(); + else + blackhole = nullptr; +} + +Character::~Character() +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Deconstructor called" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (inventory[i]) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Deleting " << inventory[i]->getType() << " from inventory[" << i << "]" << std::endl; + delete inventory[i]; + } + } + if (blackhole) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Deleting blackhole" << std::endl; + delete blackhole; + } +} + +Character &Character::operator=(Character const &other) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Copy Assignment operator called" << std::endl; + if (this != &other) + { + name = other.name; + for (int i = 0; i < 4; ++i) + { + if (inventory[i]) + delete inventory[i]; + if (other.inventory[i]) + inventory[i] = other.inventory[i]; + else + inventory[i] = nullptr; + } + } + return *this; +} + +std::string const &Character::getName() const +{ + return name; +} + +void Character::equip(AMateria *m) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" equip function called" << std::endl; + if (!m) + return; + for (int i = 0; i < 4; ++i) + { + if (!inventory[i]) + { + inventory[i] = m->clone(); + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" equipped " << inventory[i]->getType() << std::endl; + delete m; + return; + } + } + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Inventory full, cannot equip " << m->getType() << std::endl; +} + +void Character::unequip(int idx) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" unequip function called" << std::endl; + if (idx < 0 || idx >= 4) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Invalid index" << std::endl; + return; + } + if (inventory[idx]) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" unequipped " << inventory[idx]->getType() << std::endl; + dropMateria(inventory[idx]); + inventory[idx] = nullptr; + } + else + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" No materia equipped at index " << idx << std::endl; +} + +void Character::use(int idx, ICharacter &target) +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" use function called" << std::endl; + if (idx < 0 || idx >= 4) + { + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Invalid index" << std::endl; + return; + } + if (inventory[idx]) + { + inventory[idx]->use(target); + } + else + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" No materia equipped at index " << idx << std::endl; +} + +void Character::printInventory() const +{ + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" Inventory:" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (inventory[i]) + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" [" << i << "] " << inventory[i]->getType() << std::endl; + else + std::cout << BACKGROUND11 << BOLD << "Character: "<< name << RESET <<" [" << i << "] empty" << std::endl; + } +} diff --git a/ex03/src/Cure.cpp b/ex03/src/Cure.cpp new file mode 100644 index 0000000..a25f522 --- /dev/null +++ b/ex03/src/Cure.cpp @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Cure.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/15 11:33:30 by whaffman #+# #+# */ +/* Updated: 2025/04/17 13:44:12 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include + +#include "Cure.hpp" +#include "ICharacter.hpp" + +#include "colors.h" + +Cure::Cure() : AMateria("cure") +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" Default constructor called" << std::endl; +} + +Cure::Cure(Cure const &other) : AMateria(other) +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" Copy constructor called" << std::endl; +} + +Cure::~Cure() +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" Deconstructor called" << std::endl; +} + +Cure &Cure::operator=(Cure const &other) +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" Copy Assignment operator called" << std::endl; + if (this != &other) + AMateria::operator=(other); + return *this; +} + +AMateria *Cure::clone() const +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" Clone function called" << std::endl; + return new Cure(*this); +} + +void Cure::use(ICharacter &target) +{ + std::cout << BACKGROUND9 << BOLD << "Cure" << RESET <<" * heals " << target.getName() << "'s wounds" << std::endl; +} diff --git a/ex03/src/Ice.cpp b/ex03/src/Ice.cpp new file mode 100644 index 0000000..1112a81 --- /dev/null +++ b/ex03/src/Ice.cpp @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* Ice.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/17 13:44:21 by whaffman #+# #+# */ +/* Updated: 2025/04/17 13:44:22 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include + +#include "Ice.hpp" +#include "ICharacter.hpp" + +#include "colors.h" + +Ice::Ice() : AMateria("ice") +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" Default constructor called" << std::endl; +} + +Ice::Ice(Ice const &other) : AMateria(other) +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" Copy constructor called" << std::endl; +} + +Ice::~Ice() +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" Deconstructor called" << std::endl; +} + +Ice &Ice::operator=(Ice const &other) +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" Copy Assignment operator called" << std::endl; + if (this != &other) + AMateria::operator=(other); + return *this; +} + +AMateria *Ice::clone() const +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" Clone function called" << std::endl; + return new Ice(*this); +} + +void Ice::use(ICharacter &target) +{ + std::cout << BACKGROUND12 << BOLD << "Ice" << RESET <<" * shoots an ice bolt at " << target.getName() << " *" << std::endl; +} diff --git a/ex03/src/MateriaSource.cpp b/ex03/src/MateriaSource.cpp new file mode 100644 index 0000000..e625edb --- /dev/null +++ b/ex03/src/MateriaSource.cpp @@ -0,0 +1,112 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* MateriaSource.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/17 13:44:57 by whaffman #+# #+# */ +/* Updated: 2025/04/17 13:45:04 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include + +#include "MateriaSource.hpp" + +#include "colors.h" + +MateriaSource::MateriaSource() +{ + for (int i = 0; i < 4; ++i) + materia[i] = nullptr; + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Default constructor called" << std::endl; + +} + +MateriaSource::MateriaSource(MateriaSource const &other) +{ + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Copy constructor called" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (other.materia[i]) + materia[i] = other.materia[i]->clone(); + else + materia[i] = nullptr; + } +} + +MateriaSource::~MateriaSource() +{ + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Deconstructor called" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (materia[i]) + delete materia[i]; + } +} + +MateriaSource &MateriaSource::operator=(MateriaSource const &other) +{ + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Copy Assignment operator called" << std::endl; + if (this == &other) + return *this; + + for (int i = 0; i < 4; ++i) + { + if (materia[i]) + delete materia[i]; + if (other.materia[i]) + materia[i] = other.materia[i]->clone(); + else + materia[i] = nullptr; + } + + return *this; +} + +void MateriaSource::learnMateria(AMateria *m) +{ + if (!m) + return; + for (int i = 0; i < 4; ++i) + { + if (!materia[i]) + { + materia[i] = m->clone(); + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" learned " << m->getType() << std::endl; + delete m; + return; + } + } + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Materia source is full, cannot learn " << m->getType() << std::endl; + delete m; +} + +AMateria *MateriaSource::createMateria(std::string const &type) +{ + if (type.empty()) + return nullptr; + for (int i = 0; i < 4; ++i) + { + if (materia[i] && materia[i]->getType() == type) + { + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" created " << type << std::endl; + return materia[i]->clone(); + } + } + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Materia of type " << type << " not found" << std::endl; + return nullptr; +} + +void MateriaSource::printMaterias() const +{ + std::cout << BACKGROUND13 << BOLD << "MateriaSource" << RESET <<" Materias:" << std::endl; + for (int i = 0; i < 4; ++i) + { + if (materia[i]) + std::cout << "Materia " << i << ": " << materia[i]->getType() << std::endl; + else + std::cout << "Materia " << i << ": empty" << std::endl; + } +} diff --git a/ex03/src/main.cpp b/ex03/src/main.cpp new file mode 100644 index 0000000..7d506e1 --- /dev/null +++ b/ex03/src/main.cpp @@ -0,0 +1,99 @@ +/* ************************************************************************** */ +/* */ +/* :::::::: */ +/* main.cpp :+: :+: */ +/* +:+ */ +/* By: whaffman +#+ */ +/* +#+ */ +/* Created: 2025/04/15 11:38:34 by whaffman #+# #+# */ +/* Updated: 2025/04/17 14:04:05 by whaffman ######## odam.nl */ +/* */ +/* ************************************************************************** */ + +#include +#include +#include "AMateria.hpp" +#include "Character.hpp" +#include "Cure.hpp" +#include "Ice.hpp" +#include "ICharacter.hpp" +#include "MateriaSource.hpp" +#include "colors.h" + +int main(void) +{ + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Materia constructors" << RESET << std::endl; + AMateria *m1 = new Ice(); + std::cout << std::endl; + AMateria *m2 = new Cure(); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing MateriaSource constructor" << RESET << std::endl; + MateriaSource *src = new MateriaSource(); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing MateriaSource learnMateria" << RESET << std::endl; + src->learnMateria(m1); + std::cout << std::endl; + src->learnMateria(m2); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character Constructors" << RESET << std::endl; + Character *alice = new Character("Alice"); + std::cout << std::endl; + Character *bob = new Character("Bob"); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing MateriaSource createMateria and equiping them" << RESET << std::endl; + alice->equip(src->createMateria("ice")); + std::cout << std::endl; + bob->equip(src->createMateria("cure")); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character overfilling inventory" << RESET << std::endl; + alice->equip(src->createMateria("ice")); + std::cout << std::endl; + alice->equip(src->createMateria("cure")); + std::cout << std::endl; + alice->equip(src->createMateria("cure")); + std::cout << std::endl; + + std::cout << BACKGROUND11 << BOLD << "Character: "<< alice->getName() << RESET + <<" Inventory full, cannot equip next one so it had to be deleted manually" + << std::endl; + AMateria *m3 = src->createMateria("ice"); + std::cout << std::endl; + alice->equip(m3); + std::cout << std::endl; + delete m3; + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character printInventory function" << RESET << std::endl; + alice->printInventory(); + std::cout << std::endl; + bob->printInventory(); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character use function" << RESET << std::endl; + alice->use(0, *bob); + std::cout << std::endl; + bob->use(0, *alice); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character unequip function" << RESET << std::endl; + alice->unequip(0); + std::cout << std::endl; + bob->unequip(0); + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing Character destructor" << RESET << std::endl; + delete alice; + std::cout << std::endl; + delete bob; + std::cout << std::endl << std::endl; + + std::cout << BOLD_UNDERLINE << COLOR10 << "Testing MateriaSource destructor" << RESET << std::endl; + delete src; + + return 0; +} \ No newline at end of file