am i done?

This commit is contained in:
whaffman 2025-04-17 14:05:53 +02:00
parent 95d416da26
commit ce7a753bc5
21 changed files with 1112 additions and 38 deletions

View File

@ -6,11 +6,11 @@
# By: whaffman <whaffman@student.codam.nl> +#+ # # By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ # # +#+ #
# Created: 2025/03/24 15:14:58 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 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 SRC= main.cpp $(TEST_SRC) Animal.cpp Dog.cpp Cat.cpp WrongAnimal.cpp WrongCat.cpp

BIN
ex00/Polymorphism Executable file

Binary file not shown.

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/05 17:23:37 by whaffman #+# #+# */ /* 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 */
/* */ /* */
/* ************************************************************************** */ /* ************************************************************************** */

View File

@ -6,11 +6,11 @@
# By: whaffman <whaffman@student.codam.nl> +#+ # # By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ # # +#+ #
# Created: 2025/03/24 15:14:58 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 \ SRC= main.cpp \
Animal.cpp \ Animal.cpp \
Dog.cpp \ Dog.cpp \

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/05 17:40:33 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 <string> #include <string>
#define MAX_IDEAS 10 #define MAX_IDEAS 100
class Brain class Brain
{ {

View File

@ -6,7 +6,7 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 21:32:01 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; std::cout << BOLD_UNDERLINE << COLOR10 << "Creating a Cat and a Dog" << RESET << std::endl;
AAnimal *cat = new Cat(); AAnimal *cat = new Cat();
AAnimal *dog = new Dog(); AAnimal *dog = new Dog();
std::cout << std::endl;
//Can't create an instance of abstract class //Can't create an instance of abstract class
//AAnimal *AAnimal = new AAnimal(); //AAnimal *AAnimal = new AAnimal();
std::cout << std::endl;
std::cout << BOLD_UNDERLINE << COLOR10 << "Cats and Dogs sounds like:" << RESET << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Cats and Dogs sounds like:" << RESET << std::endl;
cat->makeSound(); cat->makeSound();
@ -40,7 +40,7 @@ int main(void)
//This works because we cast the AAnimal pointer to a Cat pointer //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"); ((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; std::cout << BOLD_UNDERLINE << COLOR10 << "Cat brain ideas:" << RESET << std::endl;
((Cat*)cat)->getBrain().printIdeas(); ((Cat*)cat)->getBrain().printIdeas();
std::cout << std::endl; std::cout << std::endl;
@ -52,7 +52,7 @@ int main(void)
std::cout << BOLD_UNDERLINE << COLOR10 << "Cat2 brain ideas:" << RESET << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Cat2 brain ideas:" << RESET << std::endl;
((Cat*)cat2)->getBrain().printIdeas(); ((Cat*)cat2)->getBrain().printIdeas();
std::cout << std::endl; std::cout << std::endl;
std::cout << BOLD_UNDERLINE << COLOR10 << "Creating a Cat3 with AAnimal assignment operator does not copy brain" << RESET << 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(); AAnimal *cat3 = new Cat();
*cat3 = *cat2; *cat3 = *cat2;
@ -69,7 +69,7 @@ int main(void)
std::cout << BOLD_UNDERLINE << COLOR10 << "Cat3 brain ideas:" << RESET << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Cat3 brain ideas:" << RESET << std::endl;
((Cat*)cat3)->getBrain().printIdeas(); ((Cat*)cat3)->getBrain().printIdeas();
std::cout << std::endl; std::cout << std::endl;
std::cout << BOLD_UNDERLINE << COLOR10 << "Pointers of Cats" << RESET << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Pointers of Cats" << RESET << std::endl;
std::cout << std::endl; std::cout << std::endl;
@ -77,7 +77,7 @@ int main(void)
std::cout << COLOR10 << "cat2: " << cat2 << std::endl; std::cout << COLOR10 << "cat2: " << cat2 << std::endl;
std::cout << COLOR10 << "cat3: " << cat3 << std::endl; std::cout << COLOR10 << "cat3: " << cat3 << std::endl;
std::cout << std::endl; std::cout << std::endl;
std::cout << BOLD_UNDERLINE << COLOR10 << "Destructor called on AAnimal object" << RESET << std::endl; std::cout << BOLD_UNDERLINE << COLOR10 << "Destructor called on AAnimal object" << RESET << std::endl;
std::cout << std::endl; std::cout << std::endl;
delete cat; delete cat;

View File

@ -6,7 +6,7 @@
# By: whaffman <whaffman@student.codam.nl> +#+ # # By: whaffman <whaffman@student.codam.nl> +#+ #
# +#+ # # +#+ #
# Created: 2025/03/24 15:14:58 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 SRC= main.cpp AMateria.cpp Ice.cpp Cure.cpp Character.cpp MateriaSource.cpp
-include ../common.mk -include ../common.mk
CFLAGS = -Wall -Wextra -Werror -g -fsanitize=address

View File

@ -6,23 +6,28 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:12:51 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 #pragma once
#include <string> #include <string>
#include "ICharacter.hpp" #include "ICharacter.hpp"
class ICharacter;
class AMateria class AMateria
{ {
protected: protected:
std::string type; std::string type;
public: public:
AMateria() = default; AMateria();
AMateria(AMateria const &other); AMateria(AMateria const &other);
AMateria(std::string const &type); AMateria(std::string const &type);
virtual ~AMateria(); virtual ~AMateria();
AMateria &operator=(AMateria const &other); AMateria &operator=(AMateria const &other);

View File

@ -6,22 +6,25 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:23:59 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 #pragma once
#include "ICharacter.hpp"
#include <string> #include <string>
#include <iostream> #include "AMateria.hpp"
#include "colors.h" #include "ICharacter.hpp"
class Character : public ICharacter class Character : public ICharacter
{ {
private: private:
std::string name; std::string name;
AMateria *inventory[4]; AMateria *inventory[4];
AMateria *blackhole;
void dropMateria(AMateria *m);
public: public:
Character(); Character();

View File

@ -6,17 +6,14 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:21:38 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 #pragma once
#include "AMateria.hpp"
#include "AMateria.hpp"
#include "ICharacter.hpp" #include "ICharacter.hpp"
#include <string>
#include <iostream>
#include "colors.h"
class Cure : public AMateria class Cure : public AMateria
{ {
@ -28,5 +25,5 @@ public:
AMateria *clone() const override; AMateria *clone() const override;
void use(ICharacter &target) override; void use(ICharacter &target) override;
}; };

View File

@ -6,14 +6,18 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:14:07 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 #pragma once
#include <string> #include <string>
#include "AMateria.hpp" #include "AMateria.hpp"
class AMateria;
class ICharacter class ICharacter
{ {
public: public:

View File

@ -6,12 +6,14 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:25:03 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 #pragma once
#include "AMateria.hpp" #include "AMateria.hpp"
#include <string> #include <string>
class IMateriaSource class IMateriaSource

View File

@ -6,16 +6,14 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:23:22 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 #pragma once
#include "AMateria.hpp" #include "AMateria.hpp"
#include "ICharacter.hpp" #include "ICharacter.hpp"
#include <string>
#include <iostream>
#include "colors.h"
class Ice : public AMateria class Ice : public AMateria
{ {
@ -27,4 +25,4 @@ public:
AMateria *clone() const override; AMateria *clone() const override;
void use(ICharacter &target) override; void use(ICharacter &target) override;
}; };

View File

@ -6,14 +6,17 @@
/* By: whaffman <whaffman@student.codam.nl> +#+ */ /* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */ /* +#+ */
/* Created: 2025/04/14 22:26:01 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 #pragma once
#include "IMateriaSource.hpp"
#include <string> #include <string>
#include "AMateria.hpp"
#include "IMateriaSource.hpp"
class MateriaSource : public IMateriaSource class MateriaSource : public IMateriaSource
{ {
private: private:
@ -26,4 +29,6 @@ public:
void learnMateria(AMateria *m) override; void learnMateria(AMateria *m) override;
AMateria *createMateria(std::string const &type) override; AMateria *createMateria(std::string const &type) override;
void printMaterias() const;
}; };

554
ex03/inc/colors.h Normal file
View File

@ -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

View File

@ -1,26 +1,48 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* AMateria.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/17 13:43:35 by whaffman #+# #+# */
/* Updated: 2025/04/17 13:43:36 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include "AMateria.hpp" #include "AMateria.hpp"
#include "ICharacter.hpp" #include "ICharacter.hpp"
#include "colors.h"
#include <iostream> #include <iostream>
#include <string> #include <string>
AMateria::AMateria() : type("default") 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) AMateria::AMateria(std::string const & type) : type(type)
{ {
std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Parametric constructor called" << std::endl;
} }
AMateria::~AMateria() AMateria::~AMateria()
{ {
std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Deconstructor called" << std::endl;
} }
AMateria & AMateria::operator=(AMateria const & other) AMateria & AMateria::operator=(AMateria const & other)
{ {
std::cout << BACKGROUND14 << BOLD << "AMateria" << RESET <<" Copy Assignment operator called" << std::endl;
if (this != &other) if (this != &other)
type = other.type; type = other.type;
return *this; return *this;
@ -33,5 +55,5 @@ std::string const & AMateria::getType() const
void AMateria::use(ICharacter & target) 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;
} }

168
ex03/src/Character.cpp Normal file
View File

@ -0,0 +1,168 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* Character.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/17 13:43:45 by whaffman #+# #+# */
/* Updated: 2025/04/17 13:43:55 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include <iostream>
#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;
}
}

52
ex03/src/Cure.cpp Normal file
View File

@ -0,0 +1,52 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* Cure.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/15 11:33:30 by whaffman #+# #+# */
/* Updated: 2025/04/17 13:44:12 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include <iostream>
#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;
}

52
ex03/src/Ice.cpp Normal file
View File

@ -0,0 +1,52 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* Ice.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/17 13:44:21 by whaffman #+# #+# */
/* Updated: 2025/04/17 13:44:22 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include <iostream>
#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;
}

112
ex03/src/MateriaSource.cpp Normal file
View File

@ -0,0 +1,112 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* MateriaSource.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/17 13:44:57 by whaffman #+# #+# */
/* Updated: 2025/04/17 13:45:04 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include <iostream>
#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;
}
}

99
ex03/src/main.cpp Normal file
View File

@ -0,0 +1,99 @@
/* ************************************************************************** */
/* */
/* :::::::: */
/* main.cpp :+: :+: */
/* +:+ */
/* By: whaffman <whaffman@student.codam.nl> +#+ */
/* +#+ */
/* Created: 2025/04/15 11:38:34 by whaffman #+# #+# */
/* Updated: 2025/04/17 14:04:05 by whaffman ######## odam.nl */
/* */
/* ************************************************************************** */
#include <iostream>
#include <string>
#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;
}