aboutsummaryrefslogtreecommitdiff
path: root/cpp04/ex03
diff options
context:
space:
mode:
Diffstat (limited to 'cpp04/ex03')
-rw-r--r--cpp04/ex03/Character.cpp5
-rw-r--r--cpp04/ex03/MateriaSource.cpp12
-rw-r--r--cpp04/ex03/main.cpp213
3 files changed, 223 insertions, 7 deletions
diff --git a/cpp04/ex03/Character.cpp b/cpp04/ex03/Character.cpp
index bc58588..57fcfeb 100644
--- a/cpp04/ex03/Character.cpp
+++ b/cpp04/ex03/Character.cpp
@@ -6,14 +6,14 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/14 16:45:54 by charles #+# #+# */
-/* Updated: 2020/11/15 17:10:46 by charles ### ########.fr */
+/* Updated: 2020/11/17 08:30:21 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include "Character.hpp"
Character::Character(std::string const& name)
- : m_name(name), m_inventory_size(0) {}
+ : m_inventory_size(0), m_name(name) {}
Character::Character(Character const& other)
: m_inventory_size(0) { *this = other; }
@@ -44,6 +44,7 @@ void Character::unequip(int idx)
{
if (idx < 0 || idx >= m_inventory_size)
return;
+ delete m_inventory[idx];
for (int i = idx; i < m_inventory_size - 1; i++)
m_inventory[i] = m_inventory[i + 1];
m_inventory_size--;
diff --git a/cpp04/ex03/MateriaSource.cpp b/cpp04/ex03/MateriaSource.cpp
index 0d21ab8..6747a93 100644
--- a/cpp04/ex03/MateriaSource.cpp
+++ b/cpp04/ex03/MateriaSource.cpp
@@ -6,13 +6,14 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/14 17:19:10 by charles #+# #+# */
-/* Updated: 2020/11/15 17:22:19 by charles ### ########.fr */
+/* Updated: 2020/11/17 08:32:37 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
#include "MateriaSource.hpp"
-MateriaSource::MateriaSource() : m_learned_size(0) {}
+MateriaSource::MateriaSource()
+ : m_learned_size(0) {}
MateriaSource::MateriaSource(MateriaSource const& other)
: m_learned_size(0) { *this = other; }
@@ -30,9 +31,12 @@ MateriaSource::~MateriaSource() { destroyLearned(); }
void MateriaSource::learnMateria(AMateria* materia)
{
- if (m_learned_size >= 4 || materia == NULL)
+ if (m_learned_size >= LEARNED_MAX_SIZE || materia == NULL)
+ {
+ delete materia;
return;
- m_learned[m_learned_size] = materia->clone();
+ }
+ m_learned[m_learned_size] = materia;
m_learned_size++;
}
diff --git a/cpp04/ex03/main.cpp b/cpp04/ex03/main.cpp
index 6444877..bede834 100644
--- a/cpp04/ex03/main.cpp
+++ b/cpp04/ex03/main.cpp
@@ -6,7 +6,7 @@
/* By: charles <charles.cabergs@gmail.com> +#+ +:+ +#+ */
/* +#+#+#+#+#+ +#+ */
/* Created: 2020/04/14 17:58:01 by charles #+# #+# */
-/* Updated: 2020/11/15 17:23:07 by charles ### ########.fr */
+/* Updated: 2020/11/17 08:33:22 by cacharle ### ########.fr */
/* */
/* ************************************************************************** */
@@ -35,4 +35,215 @@ int main()
delete me;
delete src;
}
+
+ Character ch("YO");
+
+ std::cout << std::endl;
+
+ {
+ std::cout << "================== ICE ==================" << std::endl;
+ Ice i;
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ Ice i2(i);
+ std::cout << "Type: " << i2.getType() << ", XP: " << i2.getXP() << std::endl;
+ Ice i3;
+ i3 = i2;
+ std::cout << "Type: " << i2.getType() << ", XP: " << i2.getXP() << std::endl;
+ AMateria *i4 = new Ice(i);
+ std::cout << "Type: " << i4->getType() << ", XP: " << i4->getXP() << std::endl;
+
+ std::cout << "################## NO ASSIGN TYPE" << std::endl;
+ AMateria *c = new Cure();
+ *c = i3;
+ std::cout << "Type: " << c->getType() << ", XP: " << c->getXP() << std::endl;
+
+ std::cout << "################## CLONE" << std::endl;
+ AMateria *cl = i3.clone();
+ std::cout << "Type: " << cl->getType() << ", XP: " << cl->getXP() << std::endl;
+
+ std::cout << "################## USE" << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+ i.use(ch);
+ std::cout << "Type: " << i.getType() << ", XP: " << i.getXP() << std::endl;
+
+ delete cl;
+ delete c;
+ delete i4;
+ }
+
+ std::cout << std::endl;
+
+ {
+ std::cout << "================== ICE ==================" << std::endl;
+ Cure c;
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ Cure c2(c);
+ std::cout << "Type: " << c2.getType() << ", XP: " << c2.getXP() << std::endl;
+ Cure c3;
+ c3 = c2;
+ std::cout << "Type: " << c2.getType() << ", XP: " << c2.getXP() << std::endl;
+ AMateria *c4 = new Cure(c);
+ std::cout << "Type: " << c4->getType() << ", XP: " << c4->getXP() << std::endl;
+
+ std::cout << "################## NO ASSIGN TYPE" << std::endl;
+ AMateria *i = new Ice();
+ *i = c3;
+ std::cout << "Type: " << i->getType() << ", XP: " << i->getXP() << std::endl;
+
+ std::cout << "################## CLONE" << std::endl;
+ AMateria *cl = c3.clone();
+ std::cout << "Type: " << cl->getType() << ", XP: " << cl->getXP() << std::endl;
+
+ std::cout << "################## USE" << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+ c.use(ch);
+ std::cout << "Type: " << c.getType() << ", XP: " << c.getXP() << std::endl;
+
+ delete cl;
+ delete i;
+ delete c4;
+ }
+
+ std::cout << std::endl;
+
+ {
+ std::cout << "================== CHARACTER ==================" << std::endl;
+ Character c("Jean-Didier");
+ std::cout << "Name: " << c.getName() << std::endl;
+ Character c2(c);
+ std::cout << "Name: " << c2.getName() << std::endl;
+ Character c3("SHOULD NOT BE PRINTED");
+ c3 = c;
+ std::cout << "Name: " << c3.getName() << std::endl;
+
+ std::cout << "################## EQUIP/USE" << std::endl;
+ c.equip(new Ice());
+ c.equip(new Cure());
+ c.use(0, ch);
+ c.use(1, ch);
+ c.equip(new Cure());
+ c.equip(new Ice());
+ c.use(2, ch);
+ c.use(3, ch);
+ c.use(-1, ch);
+ c.use(4, ch);
+ c.unequip(0);
+ c.use(0, ch);
+ c.use(3, ch);
+ c.unequip(0);
+ c.use(0, ch);
+ c.use(2, ch);
+ c.unequip(0);
+ c.use(0, ch);
+ c.use(1, ch);
+ c.unequip(0);
+ c.use(0, ch);
+ c.unequip(0);
+ c.unequip(0);
+ c.unequip(0);
+ c.unequip(0);
+ c.unequip(0);
+ c.equip(NULL);
+ c.use(0, ch);
+ c.equip(NULL);
+ c.use(1, ch);
+
+ std::cout << "################## DEEP COPY" << std::endl;
+ c.equip(new Ice());
+ c.use(0, ch);
+ Character copy(c);
+ std::cout << "Copied name: " << copy.getName() << std::endl;
+ copy.use(0, ch);
+ c.equip(new Cure());
+ c.use(1, ch);
+ copy.use(1, ch);
+ Character assigned("SHOULD NOT BE PRINTED");
+ assigned = c;
+ std::cout << "Assign name: " << copy.getName() << std::endl;
+ assigned.use(1, ch);
+ c.equip(new Ice());
+ c.use(2, ch);
+ assigned.use(2, ch);
+
+ std::cout << "################## INTERFACE" << std::endl;
+ ICharacter *ic = new Character(c);
+ std::cout << "Interface name: " << ic->getName() << std::endl;
+ ic->use(0, ch);
+ ic->use(1, ch);
+ ic->use(2, ch);
+ ic->equip(new Ice());
+ ic->use(3, ch);
+ ic->unequip(1);
+ ic->use(1, ch);
+ delete ic;
+ }
+
+ std::cout << std::endl;
+
+ {
+ std::cout << "================== MATERIA SRC ==================" << std::endl;
+ MateriaSource ms;
+ ms.learnMateria(new Ice());
+ MateriaSource ms2(ms);
+ MateriaSource ms3;
+ ms3.learnMateria(new Cure());
+ ms3 = ms;
+ std::cout << ms3.createMateria("cure") << std::endl;
+ AMateria *m;
+ m = ms.createMateria("ice");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+ m = ms2.createMateria("ice");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+ m = ms3.createMateria("ice");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+
+ m = ms.createMateria("");
+ std::cout << m << std::endl;
+ m = ms.createMateria("foo");
+ std::cout << m << std::endl;
+ ms.learnMateria(NULL);
+
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ ms.learnMateria(new Ice());
+ m = ms.createMateria("ice");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+
+ std::cout << "################## INTERFACE" << std::endl;
+ IMateriaSource *ims = new MateriaSource(ms2);
+ m = ims->createMateria("ice");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+ ims->learnMateria(new Cure());
+ m = ims->createMateria("cure");
+ std::cout << "Type: " << m->getType() << ", XP: " << m->getXP() << std::endl;
+ delete m;
+ delete ims;
+ }
}