티스토리 뷰

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

 

1. 콘솔창으로부터 입력을 받아서 화면에 물체를 생성해보기.

더보기

// script.txt

3
Circle 0.1 0.2 0.1
Box 0.3 -0.1 0.1 0.15
Triangle -0.3 0.2 0.2

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

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

		std::vector<GeometricObject*> my_objs;
		
		Example() : Game2D()
		{
			FILE *script_file = nullptr;
			script_file = fopen("script.txt", "r");

			int num_bindings = 0;
			fscanf(script_file, "%d", &num_bindings);

			char object_buffer[255];
			for (int i = 0; i < num_bindings; ++i) {
				fscanf(script_file, "%s", object_buffer);

				random_color = RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f));
				if (!strcmp(object_buffer, "Circle")) {
					fscanf(script_file, "%f %f %f", &pos.x, &pos.y, &size[0]);

					my_objs.push_back(GeometricObject::makeCircle(random_color, pos, size[0]));
				}

				else if (!strcmp(object_buffer, "Triangle")) {
					fscanf(script_file, "%f %f %f", &pos.x, &pos.y, &size[0]);

					my_objs.push_back(GeometricObject::makeTriangle(random_color, pos, size[0]));
				}

				else if (!strcmp(object_buffer, "Box")) {
					fscanf(script_file, "%f %f %f %f", &pos.x, &pos.y, &size[0], &size[1]);

					my_objs.push_back(GeometricObject::makeBox(random_color, pos, size[0], size[1]));
				}
			}
		}

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

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

댓글