티스토리 뷰

* 인프런에 있는 "홍정모의 게임 만들기 연습 문제 패키지" 강의를 바탕으로 작성된 글입니다.

 

1. 랜덤넘버를 활용해서 다양한 물체를 그리기

#include "Game2D.h"
#include "RandomNumberGenerator.h"
#include "GeometricObject.h"
#include <vector>
#include <memory>

namespace shyplants
{
	class Example : public Game2D
	{
	public:
		RandomNumberGenerator rnd;
		RGB random_color;
		vec2 random_pos;
		float random_size[2];

		std::vector<GeometricObject*> my_objs;
		
		Example() : Game2D()
		{
			for (int i = 0; i < 3; ++i) {
				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.5f);

				my_objs.push_back(GeometricObject::makeTriangle(random_color, random_pos, random_size[0]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.05f, 0.3f);

				my_objs.push_back(GeometricObject::makeCircle(random_color, random_pos, random_size[0]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.5f);
				random_size[1] = rnd.getFloat(0.2f, 0.5f);

				my_objs.push_back(GeometricObject::makeBox(random_color, random_pos, random_size[0], random_size[1]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.4f);
				random_size[1] = rnd.getFloat(0.1f, 0.3f);

				if (random_size[0] < random_size[1]) {
					float temp = random_size[0];
					random_size[0] = random_size[1];
					random_size[1] = temp;
				}

				my_objs.push_back(GeometricObject::makeStar(random_color, random_pos, random_size[0], random_size[1]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.05f, 0.2f);

				my_objs.push_back(GeometricObject::makePentagon(random_color, random_pos, random_size[0]));
			}
		}

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

		void update() override
		{
			for(const auto& obj : my_objs) {
				obj->draw();
			}
		}
	};
}

 

2. 모든 물체들이 회전하게 만들어보기(부모 클래스 활용)

#include "Game2D.h"
#include "RandomNumberGenerator.h"
#include "GeometricObject.h"
#include <vector>
#include <memory>

namespace shyplants
{
	class Example : public Game2D
	{
	public:
		RandomNumberGenerator rnd;
		RGB random_color;
		vec2 random_pos;
		float random_size[2];

		std::vector<GeometricObject*> my_objs;
		
		Example() : Game2D()
		{
			for (int i = 0; i < 3; ++i) {
				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.5f);

				my_objs.push_back(GeometricObject::makeTriangle(random_color, random_pos, random_size[0]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.05f, 0.3f);

				my_objs.push_back(GeometricObject::makeCircle(random_color, random_pos, random_size[0]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.5f);
				random_size[1] = rnd.getFloat(0.2f, 0.5f);

				my_objs.push_back(GeometricObject::makeBox(random_color, random_pos, random_size[0], random_size[1]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.2f, 0.4f);
				random_size[1] = rnd.getFloat(0.1f, 0.3f);

				if (random_size[0] < random_size[1]) {
					float temp = random_size[0];
					random_size[0] = random_size[1];
					random_size[1] = temp;
				}

				my_objs.push_back(GeometricObject::makeStar(random_color, random_pos, random_size[0], random_size[1]));

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				random_pos = vec2{ rnd.getFloat(-1.0f, 1.0f), rnd.getFloat(-1.0f, 1.0f) };
				random_size[0] = rnd.getFloat(0.05f, 0.2f);

				my_objs.push_back(GeometricObject::makePentagon(random_color, random_pos, random_size[0]));
			}
		}

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

		void update() override
		{
			for(const auto& obj : my_objs) {
				obj->draw();
			}

			for (const auto& obj : my_objs) {
				obj->update(this->getTimeStep());
			}
		}
	};
}

댓글