--- /dev/null
+CC := clang++
+CFLAGS = -std=c++98 -Wall -Wextra -Werror -Wpedantic
+
+DEP_GEN = g++ -MM
+
+ifneq ("$(wildcard .debug)","")
+ CFLAGS += -g -fno-limit-debug-info
+endif
+
+RM := rm -f
+
+INCDIR := inc
+INCDIR += $(addsuffix /inc, $(SUBPROJECTS));
+ifneq ($(INCLUDE),)
+ INCLUDE := $(addprefix -I, $(INCDIR))
+endif
+
+SRCDIR := .
+
+SOURCES := main.cpp \
+ AMateria.cpp \
+ Ice.cpp \
+ Cure.cpp \
+ MateriaSource.cpp \
+ Character.cpp \
+
+SOURCES := $(addprefix $(SRCDIR)/, $(SOURCES))
+
+OBJECTS := $(SOURCES:.cpp=.o)
+
+NAME := materia
+
+all : $(NAME)
+
+debug : .debug
+ $(MAKE) all
+
+nodebug :
+ $(RM) .debug
+ $(MAKE) re
+
+.% :
+ $(MAKE) fclean
+ touch $@
+
+$(NAME) : $(OBJECTS)
+ $(CC) $(CFLAGS) -o $@ $^ $(LINKS)
+
+%.o : %.cpp
+ $(CC) $(CFLAGS) -o $@ -c $< $(INCLUDE)
+
+clean :
+ $(RM) $(OBJECTS)
+
+fclean : clean
+ $(RM) $(NAME)
+
+re : fclean
+ $(MAKE) all
+
+depend: .depend
+
+.depend: $(SOURCES)
+ rm -f $@
+ $(DEP_GEN) $^ > $@
+
+include .depend
--- /dev/null
+#include "AMateria.h"
+#include "Ice.h"
+#include "Cure.h"
+#include "IMateriaSource.h"
+#include "MateriaSource.h"
+#include "ICharacter.h"
+#include "Character.h"
+
+int main()
+{
+ IMateriaSource* src = new MateriaSource();
+ ICharacter* me = new Character("me");
+ ICharacter* bob = new Character("bob");
+ AMateria* tmp;
+
+ src->learnMateria(new Ice());
+ src->learnMateria(new Cure());
+ tmp = src->createMateria("ice");
+ me->equip(tmp);
+ tmp = src->createMateria("cure");
+ me->equip(tmp);
+ me->use(0, *bob);
+ me->use(1, *bob);
+ delete bob;
+ delete me;
+ delete src;
+ return (0);
+}