diff options
| author | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
|---|---|---|
| committer | Charles <sircharlesaze@gmail.com> | 2020-04-14 18:02:14 +0200 |
| commit | efea8712aaf8169b1184cceb83705ca6b8783173 (patch) | |
| tree | 3c682f6af9d5877ddfa1740f4bac10f5f5123ddc /cpp04/ex03 | |
| parent | 119f7f96e77a2d86d692e82645dde4c2dc054052 (diff) | |
| download | piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.gz piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.tar.bz2 piscine_cpp-efea8712aaf8169b1184cceb83705ca6b8783173.zip | |
cpp04, ex03 not finished, require more sophisticated main
Diffstat (limited to 'cpp04/ex03')
| -rw-r--r-- | cpp04/ex03/AMateria.cpp | 52 | ||||
| -rw-r--r-- | cpp04/ex03/AMateria.hpp | 40 | ||||
| -rw-r--r-- | cpp04/ex03/Character.cpp | 72 | ||||
| -rw-r--r-- | cpp04/ex03/Character.hpp | 40 | ||||
| -rw-r--r-- | cpp04/ex03/Cure.cpp | 41 | ||||
| -rw-r--r-- | cpp04/ex03/Cure.hpp | 32 | ||||
| -rw-r--r-- | cpp04/ex03/ICharacter.hpp | 34 | ||||
| -rw-r--r-- | cpp04/ex03/IMateriaSource.hpp | 27 | ||||
| -rw-r--r-- | cpp04/ex03/Ice.cpp | 42 | ||||
| -rw-r--r-- | cpp04/ex03/Ice.hpp | 32 | ||||
| -rw-r--r-- | cpp04/ex03/MateriaSource.cpp | 43 | ||||
| -rw-r--r-- | cpp04/ex03/MateriaSource.hpp | 35 | ||||
| -rw-r--r-- | cpp04/ex03/main.cpp | 40 |
13 files changed, 530 insertions, 0 deletions
diff --git a/cpp04/ex03/AMateria.cpp b/cpp04/ex03/AMateria.cpp new file mode 100644 index 0000000..77e674b --- /dev/null +++ b/cpp04/ex03/AMateria.cpp @@ -0,0 +1,52 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AMateria.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:26:57 by charles #+# #+# */ +/* Updated: 2020/04/14 16:35:09 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "AMateria.hpp" + +AMateria::AMateria(AMateria const& other) +{ + *this = other; + m_type = ""; +} + +void AMateria::operator=(AMateria const& other) +{ + _xp = other._xp; +} + +AMateria::~AMateria() +{ +} + +AMateria::AMateria(std::string const& type) + : m_type(type), _xp(0) +{ +} + +std::string const& AMateria::getType() const +{ + return m_type; +} + +unsigned int AMateria::getXP() const +{ + return _xp; +} + +void AMateria::use(ICharacter& target) +{ + _xp += 10; +} + +AMateria::AMateria() +{ +} diff --git a/cpp04/ex03/AMateria.hpp b/cpp04/ex03/AMateria.hpp new file mode 100644 index 0000000..65d5cc5 --- /dev/null +++ b/cpp04/ex03/AMateria.hpp @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* AMateria.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:24:00 by charles #+# #+# */ +/* Updated: 2020/04/14 17:55:18 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef AMATERIA_HPP +# define AMATERIA_HPP + +# include <string> +# include "ICharacter.hpp" + +class AMateria +{ +public: + AMateria(AMateria const& other); + void operator=(AMateria const& other); + virtual ~AMateria(); + + AMateria(std::string const& type); + std::string const& getType() const; + unsigned int getXP() const; + + virtual AMateria* clone() const = 0; + virtual void use(ICharacter& target); + +protected: + AMateria(); + + std::string m_type; + unsigned int _xp; // subject force _xp instead of m_xp +}; + +#endif diff --git a/cpp04/ex03/Character.cpp b/cpp04/ex03/Character.cpp new file mode 100644 index 0000000..34aaa48 --- /dev/null +++ b/cpp04/ex03/Character.cpp @@ -0,0 +1,72 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Character.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:45:54 by charles #+# #+# */ +/* Updated: 2020/04/14 17:59:57 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Character.hpp" + +Character::Character() : m_name(""), m_inventory_size(0) +{ +} + +Character::Character(Character const& other) +{ + *this = other; +} + +void Character::operator=(Character const& other) +{ + for (int i = 0; i < m_inventory_size; i++) + delete m_inventory[i]; + m_inventory_size = other.m_inventory_size; + for (int i = 0; i < m_inventory_size; i++) + m_inventory[i] = other.m_inventory[i]->clone(); + m_name = other.m_name; +} + +Character::~Character() +{ + for (int i = 0; i < m_inventory_size; i++) + delete m_inventory[i]; +} + +Character::Character(std::string const& name) + : m_name(name), m_inventory_size(0) +{ +} + +std::string const& Character::getName() const +{ + return m_name; +} + +void Character::equip(AMateria* m) +{ + if (m_inventory_size >= INVENTORY_MAX_SIZE) + return; + m_inventory[m_inventory_size] = m; + m_inventory_size++; +} + +void Character::unequip(int idx) +{ + if (idx < 0 || idx >= m_inventory_size) + return; + for (int i = idx; i < m_inventory_size - 1; i++) + m_inventory[i] = m_inventory[i + 1]; + m_inventory_size--; +} + +void Character::use(int idx, ICharacter& target) +{ + if (idx < 0 || idx >= m_inventory_size) + return; + m_inventory[idx]->use(target); +} diff --git a/cpp04/ex03/Character.hpp b/cpp04/ex03/Character.hpp new file mode 100644 index 0000000..c6ffc7b --- /dev/null +++ b/cpp04/ex03/Character.hpp @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Character.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:44:43 by charles #+# #+# */ +/* Updated: 2020/04/14 17:31:49 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CHARACTER_HPP +# define CHARACTER_HPP + +# include "ICharacter.hpp" + +# define INVENTORY_MAX_SIZE 4 + +class Character : public ICharacter +{ +public: + Character(); + Character(Character const& other); + void operator=(Character const& other); + virtual ~Character(); + + Character(std::string const& name); + virtual std::string const& getName() const; + virtual void equip(AMateria* m); + virtual void unequip(int idx); + virtual void use(int idx, ICharacter& target); + +private: + AMateria* m_inventory[INVENTORY_MAX_SIZE]; + int m_inventory_size; + std::string m_name; +}; + +#endif diff --git a/cpp04/ex03/Cure.cpp b/cpp04/ex03/Cure.cpp new file mode 100644 index 0000000..1f3e0d5 --- /dev/null +++ b/cpp04/ex03/Cure.cpp @@ -0,0 +1,41 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Cure.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:38:01 by charles #+# #+# */ +/* Updated: 2020/04/14 17:41:32 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Cure.hpp" + +Cure::Cure() : AMateria("cure") +{ +} + +Cure::Cure(Cure const& other) +{ + *this = other; +} + +void Cure::operator=(Cure const& other) +{ + AMateria::operator=(other); +} + +Cure::~Cure() +{ +} + +AMateria* Cure::clone() const +{ + return new Cure(*this); +} + +void Cure::use(ICharacter& target) +{ + std::cout << "* heals " << target.getName() << "'s wounds *" << std::endl; +} diff --git a/cpp04/ex03/Cure.hpp b/cpp04/ex03/Cure.hpp new file mode 100644 index 0000000..4c7a6dd --- /dev/null +++ b/cpp04/ex03/Cure.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Cure.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:37:11 by charles #+# #+# */ +/* Updated: 2020/04/14 17:42:52 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef CURE_HPP +# define CURE_HPP + +# include <iostream> +# include "AMateria.hpp" + +class Cure : public AMateria +{ +public: + Cure(); + Cure(Cure const& other); + void operator=(Cure const& other); + ~Cure(); + + virtual AMateria* clone() const; + virtual void use(ICharacter& target); +private: +}; + +#endif diff --git a/cpp04/ex03/ICharacter.hpp b/cpp04/ex03/ICharacter.hpp new file mode 100644 index 0000000..ea56d47 --- /dev/null +++ b/cpp04/ex03/ICharacter.hpp @@ -0,0 +1,34 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ICharacter.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:40:25 by charles #+# #+# */ +/* Updated: 2020/04/14 17:55:14 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ICHARACTER_HPP +# define ICHARACTER_HPP + +# include <string> +# include "AMateria.hpp" + +class ICharacter +{ +public: + virtual ~ICharacter() {} + virtual std::string const& getName() const = 0; + virtual void equip(AMateria* m) = 0; + virtual void unequip(int idx) = 0; + virtual void use(int idx, ICharacter& target) = 0; + +protected: + ICharacter(); + ICharacter(ICharacter const& other); + void operator=(ICharacter const& other); +}; + +#endif diff --git a/cpp04/ex03/IMateriaSource.hpp b/cpp04/ex03/IMateriaSource.hpp new file mode 100644 index 0000000..5161604 --- /dev/null +++ b/cpp04/ex03/IMateriaSource.hpp @@ -0,0 +1,27 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* IMateriaSource.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:15:52 by charles #+# #+# */ +/* Updated: 2020/04/14 17:21:54 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef IMATERIASOURCE_HPP +# define IMATERIASOURCE_HPP + +# include <string> +# include "AMateria.hpp" + +class IMateriaSource +{ +public: + virtual ~IMateriaSource() {} + virtual void learnMateria(AMateria* materia) = 0; + virtual AMateria* createMateria(std::string const& type) = 0; +}; + +#endif diff --git a/cpp04/ex03/Ice.cpp b/cpp04/ex03/Ice.cpp new file mode 100644 index 0000000..976cb84 --- /dev/null +++ b/cpp04/ex03/Ice.cpp @@ -0,0 +1,42 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Ice.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:32:27 by charles #+# #+# */ +/* Updated: 2020/04/14 17:36:26 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "Ice.hpp" + +Ice::Ice() : AMateria("ice") +{ +} + +Ice::Ice(Ice const& other) +{ + *this = other; +} + +void Ice::operator=(Ice const& other) +{ + AMateria::operator=(other); +} + +Ice::~Ice() +{ +} + +AMateria* Ice::clone() const +{ + return new Ice(*this); +} + +void Ice::use(ICharacter& target) +{ + std::cout << "* shoots an ice bolt at " << target.getName() << " *" << std::endl; + AMateria::use(target); +} diff --git a/cpp04/ex03/Ice.hpp b/cpp04/ex03/Ice.hpp new file mode 100644 index 0000000..55011c0 --- /dev/null +++ b/cpp04/ex03/Ice.hpp @@ -0,0 +1,32 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* Ice.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 16:31:34 by charles #+# #+# */ +/* Updated: 2020/04/14 17:38:30 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef ICE_HPP +# define ICE_HPP + +# include <iostream> +# include "AMateria.hpp" + +class Ice : public AMateria +{ +public: + Ice(); + Ice(Ice const& other); + void operator=(Ice const& other); + ~Ice(); + + virtual AMateria* clone() const; + virtual void use(ICharacter& target); +private: +}; + +#endif diff --git a/cpp04/ex03/MateriaSource.cpp b/cpp04/ex03/MateriaSource.cpp new file mode 100644 index 0000000..bce6e5a --- /dev/null +++ b/cpp04/ex03/MateriaSource.cpp @@ -0,0 +1,43 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* MateriaSource.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:19:10 by charles #+# #+# */ +/* Updated: 2020/04/14 17:51:07 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "MateriaSource.hpp" + +MateriaSource::MateriaSource() +{ + +} + +MateriaSource::MateriaSource(MateriaSource const& other) +{ + *this = other; +} + +void MateriaSource::operator=(MateriaSource const& other) +{ + +} + +MateriaSource::~MateriaSource() +{ + +} + +void MateriaSource::learnMateria(AMateria* materia) +{ + +} + +AMateria* MateriaSource::createMateria(std::string const& type) +{ + return nullptr; +} diff --git a/cpp04/ex03/MateriaSource.hpp b/cpp04/ex03/MateriaSource.hpp new file mode 100644 index 0000000..a8b4c0e --- /dev/null +++ b/cpp04/ex03/MateriaSource.hpp @@ -0,0 +1,35 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* MateriaSource.hpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:17:40 by charles #+# #+# */ +/* Updated: 2020/04/14 17:33:50 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#ifndef MATERIASOURCE_HPP +# define MATERIASOURCE_HPP + +# include "IMateriaSource.hpp" + +# define LEARNED_MAX_SIZE 4 +class MateriaSource : public IMateriaSource +{ +public: + MateriaSource(); + MateriaSource(MateriaSource const& other); + void operator=(MateriaSource const& other); + virtual ~MateriaSource(); + + virtual void learnMateria(AMateria* materia); + virtual AMateria* createMateria(std::string const& type); + +private: + AMateria* m_learned[LEARNED_MAX_SIZE]; + int m_learned_size; +}; + +#endif diff --git a/cpp04/ex03/main.cpp b/cpp04/ex03/main.cpp new file mode 100644 index 0000000..11f471f --- /dev/null +++ b/cpp04/ex03/main.cpp @@ -0,0 +1,40 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* main.cpp :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2020/04/14 17:58:01 by charles #+# #+# */ +/* Updated: 2020/04/14 17:59:02 by charles ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include "MateriaSource.hpp" +#include "Ice.hpp" +#include "Cure.hpp" +#include "Character.hpp" + +int main() +{ + IMateriaSource* src = new MateriaSource(); + src->learnMateria(new Ice()); + src->learnMateria(new Cure()); + + ICharacter* me = new Character("me"); + + AMateria* tmp; + tmp = src->createMateria("ice"); + me->equip(tmp); + tmp = src->createMateria("cure"); + me->equip(tmp); + + ICharacter* bob = new Character("bob"); + + me->use(0, *bob); + me->use(1, *bob); + + delete bob; + delete me; + delete src; +} |
