2D_game_Factory - 8BitsCoding/RobotMentor GitHub Wiki

๊ธฐ์กด์—๋Š” ๋งค๋ฒˆ ํด๋ž˜์Šค๋ฅผ ์ถ”๊ฐ€ํ• ๋•Œ๋งˆ๋‹ค #include๋ฅผ ํ•ด์ค˜์•ผ ํ–ˆ๋‹ค

#include "Triangel.h"
#include "Circle.h"
#include "bluebox.h"

namespace jm
{
	class Example : public Game2D
	{
	public:
		Example()
			: Game2D()
		{}

		void update() override
		{
            Triangel my_tri;
            my_tri.draw();

            Circle my_cir;
            my_cir.draw();

            bluebox my_bb;
            my_bb.draw();

Factory Pattern -> ํด๋ž˜์Šค(์˜ค๋ธŒ์ ํŠธ)๋ฅผ ๋งŒ๋“œ๋Š” ๋…€์„์„ ํ•˜๋‚˜๋กœ ๋ชจ์œผ์ž.

#include "GeometricObject.h"

namespace jm
{
	class Example : public Game2D
	{
	public:
		std::vector<GeometricObject*> my_objs;

		Example()
			: Game2D()
		{
			my_objs.push_back(GeometricObject::makeTriangle(Colors::gold, vec2{ -0.5f, 0.2f }, 0.25f));
			my_objs.push_back(GeometricObject::makeCircle(Colors::olive, vec2{ 0.1f, 0.1f }, 0.2f));
			my_objs.push_back(GeometricObject::makeBox(Colors::blue, vec2{ 0.0f, 0.5f }, 0.15f, 0.25f));
			my_objs.push_back(GeometricObject::makeStar(Colors::gold, vec2{ 0.0f, -0.5f }, 0.25f, 0.15f));
			/*my_objs.push_back(new Triangle(Colors::gold, vec2{ -0.5f, 0.2f }, 0.25f));
			my_objs.push_back(new Circle(Colors::olive, vec2{ 0.1f, 0.1f }, 0.2f));
			my_objs.push_back(new Box(Colors::black, vec2{ 0.0f, 0.5f }, 0.15f, 0.25f));*/
		}

		~Example()
		{
			for (const auto & obj : my_objs)
				delete obj;
		}

		void update() override
		{
			for (const auto & obj : my_objs)
				obj->draw();
		}
	};
}
// GeometricObject.h
#pragma once

#include "Game2D.h"
#include <memory>

namespace jm
{
	class GeometricObject
	{
	public:
		vec2 pos;
		RGB  color;

		virtual ~GeometricObject()
		{}

		void init(const RGB & _color, const vec2 & _pos)
		{
			color = _color;
			pos = _pos;
		}

		virtual void drawGeometry() const = 0;

		void draw()
		{
			beginTransformation();
			{
				translate(pos);
				drawGeometry();
			}
			endTransformation();
		}

		static GeometricObject * makeTriangle(const RGB & _color, const vec2 & _pos, const float & _size);
		static GeometricObject * makeCircle(const RGB & _color, const vec2 & _pos, const float & _size);
		static GeometricObject * makeBox(const RGB & _color, const vec2 & _pos, const float & _width, const float &_height);
		static GeometricObject * makeStar(const RGB & _color, const vec2 & _pos, const float & _os, const float & _is);
	};
}
// GeometricObject.cpp
#include "GeometricObject.h"

#include "Triangle.h"
#include "Circle.h"
#include "Box.h"
#include "Star.h"

namespace jm
{
	GeometricObject * GeometricObject::makeTriangle(const RGB & _color, const vec2 & _pos, const float & _size)
	{
		return new Triangle(_color, _pos, _size);
	}
	
	GeometricObject * GeometricObject::makeCircle(const RGB & _color, const vec2 & _pos, const float & _size)
	{
		return new Circle(_color, _pos, _size);
	}
	
	GeometricObject * GeometricObject::makeBox(const RGB & _color, const vec2 & _pos, const float & _width, const float & _height)
	{
		return new Box(_color, _pos, _width, _height);
	}

	GeometricObject * GeometricObject::makeStar(const RGB & _color, const vec2 & _pos, const float & _os, const float & _is)
	{
		return new Star(_color, _pos, _os, _is);
	}
}
โš ๏ธ **GitHub.com Fallback** โš ๏ธ