본문 바로가기
스터디/OpenGL

[ OpenGL ] 랜덤 함수와 집 객체

by 알 수 없는 사용자 2019. 10. 31.

( ** 인프런에서 들은 강의 '홍정모의 게임 만들기 연습 문제 패키지'를 통해서 공부한 내용과 연습 문제 풀이입니다. **)

 

namespace jm
{
	class House
	{
	private:
		RGB roof_color;
		RGB wall_color;
		RGB window_color;
		vec2 pos;
		float angle = 0.0f;

	public:
		House()
			: roof_color(Colors::red), wall_color(Colors::yellow), window_color(Colors::skyblue), pos(0.0f,0.0f), angle(0.0f)
		{ }
		
		void setPos(const vec2& _pos)
		{
			pos = _pos;
		}

		void setAngle(const float& _angle)
		{
			angle = _angle;
		}

		void setRoof_C(const RGB& _roof_color)
		{
			roof_color = _roof_color;
		}

		void setWall_C(const RGB& _wall_color)
		{
			wall_color = _wall_color;
		}

		void setWindow_C(const RGB& _window_color)
		{
			window_color = _window_color;
		}

		void draw()
		{
			// draw a house
			beginTransformation();
			{
				translate(pos);
				rotate(angle);

				// wall
				drawFilledBox(wall_color, 0.2f, 0.2f);

				// roof
				drawFilledTriangle(roof_color, { -0.13f, 0.1f }, { 0.13f, 0.1f }, { 0.0f, 0.2f });
				drawWiredTriangle(Colors::red, { -0.13f, 0.1f }, { 0.13f, 0.1f }, { 0.0f, 0.2f });

				// window
				drawFilledBox(window_color, 0.1f, 0.1f);
				drawWiredBox(Colors::gray, 0.1f, 0.1f);
				drawLine(Colors::gray, { 0.0f, -0.05f }, Colors::gray, { 0.0f, 0.05f });
				drawLine(Colors::gray, { -0.05f, 0.0f }, Colors::gray, { 0.05f, 0.0f });

			}
			endTransformation();
		}

	};

	class MyExample5 : public Game2D
	{
	public:
		House houses[100];

		MyExample5()
			: Game2D()
		{
			RandomNumberGenerator rnd;

			for (int i = 0; i < 100; ++i)
			{
				// set pos & angle
				houses[i].setPos(vec2{ rnd.getFloat(-1.0f,1.0f) , rnd.getFloat(-1.0f,1.0f) });
				houses[i].setAngle(rnd.getFloat(-10.0f, 10.0f));

				// set colors
				houses[i].setRoof_C({ rnd.getInt(0, 255.0), rnd.getInt(0, 255.0), rnd.getInt(0, 255.0) });
				houses[i].setWall_C({ rnd.getInt(0, 255.0), rnd.getInt(0, 255.0), rnd.getInt(0, 255.0) });
				houses[i].setWindow_C({ rnd.getInt(0, 255.0), rnd.getInt(0, 255.0), rnd.getInt(0, 255.0) });

			}
		}

		void update() override
		{

			for (int i = 0; i < 100; ++i)
			{
				houses[i].draw();
			}

			//House left_house, center_house, right_house;

			//left_house.setPos(vec2(-0.5f, 0.0f));
			//center_house.setPos(vec2(0.0f, 0.0f));
			//center_house.setAngle(10.0f);
			//right_house.setPos(vec2(10.5f, 0.0f));
			//
			//left_house.draw();
			//center_house.draw();
			//right_house.draw();

			//drawHouse(Colors::red, { -0.5f, 0.0f }); // left House
			//drawHouse(Colors::blue, { 0.0f, 0.0f }, 10.0f); // center House
			//drawHouse(Colors::olive, { 0.5f, 0.0f }); // right House
		}
	};
}

 

 

**** 키워드 : 랜덤 함수 응용 ****