티스토리 뷰
* 인프런에 있는 "홍정모의 게임 만들기 연습 문제 패키지" 강의를 바탕으로 작성된 글입니다.
1. 여러 채의 집들을 지붕, 벽, 창문의 색상이 다양하게 그리기
#include "Game2D.h"
#include "RandomNumberGenerator.h"
namespace shyplants
{
class House
{
private:
RGB roof_color, window_color, wall_color;
vec2 pos;
float angle;
public:
House() : roof_color(Colors::red), window_color(Colors::blue),wall_color(Colors::yellow), pos(0.0f, 0.0f), angle(0.0f)
{}
void setPos(const vec2& _pos)
{
pos = _pos;
}
void setAngle(const float& _angle)
{
angle = _angle;
}
void setRoofColor(const RGB& _roof_color)
{
roof_color = _roof_color;
}
void setWindowColor(const RGB& _window_color)
{
window_color = _window_color;
}
void setWallColor(const RGB& _wall_color)
{
wall_color = _wall_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(roof_color, { -0.13f, 0.1f }, { 0.13f, 0.1f }, { 0.0f, 0.2f });
// window
drawFilledBox(window_color, 0.1f, 0.1f);
drawWiredBox(window_color, 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 Example : public Game2D
{
public:
House houses[10];
Example() : Game2D()
{
RandomNumberGenerator rnd;
for (int i = 0; i < 10; ++i) {
houses[i].setPos({ -1.3f + 0.3f * float(i), rnd.getFloat(-0.5f, 0.5f) });
houses[i].setRoofColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWindowColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWallColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
}
}
void update() override
{
for (int i = 0; i < 10; ++i) {
houses[i].draw();
}
}
};
}

2. 여러 채의 집들이 서로 다른 속도로 회전하기
#include "Game2D.h"
#include "RandomNumberGenerator.h"
namespace shyplants
{
class House
{
private:
RGB roof_color, window_color, wall_color;
vec2 pos;
float angle, rotate_speed;
public:
House() : roof_color(Colors::red), window_color(Colors::blue),wall_color(Colors::yellow), pos(0.0f, 0.0f), angle(0.0f), rotate_speed(1.0f)
{}
void setPos(const vec2& _pos)
{
pos = _pos;
}
void setAngle(const float& _angle)
{
angle = _angle;
}
void setRotateSpeed(const float& _rotate_speed)
{
rotate_speed = _rotate_speed;
}
void setRoofColor(const RGB& _roof_color)
{
roof_color = _roof_color;
}
void setWindowColor(const RGB& _window_color)
{
window_color = _window_color;
}
void setWallColor(const RGB& _wall_color)
{
wall_color = _wall_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(roof_color, { -0.13f, 0.1f }, { 0.13f, 0.1f }, { 0.0f, 0.2f });
// window
drawFilledBox(window_color, 0.1f, 0.1f);
drawWiredBox(window_color, 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();
}
void update(float time)
{
angle = time * rotate_speed;
}
};
class Example : public Game2D
{
private:
float time;
public:
House houses[10];
Example() : Game2D()
{
RandomNumberGenerator rnd;
for (int i = 0; i < 10; ++i) {
houses[i].setPos({ -1.3f + 0.3f * float(i), rnd.getFloat(-0.5f, 0.5f) });
houses[i].setRotateSpeed(rnd.getFloat(-10.0f, 10.0f) * 10.0f);
houses[i].setRoofColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWindowColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWallColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
}
time = 0.0f;
}
void update() override
{
for (int i = 0; i < 10; ++i) {
houses[i].draw();
}
for (int i = 0; i < 10; ++i) {
houses[i].update(time);
}
time += this->getTimeStep();
}
};
}

3. 동그란 창문을 가진 집 그려보기 (상속 이용)
#include "Game2D.h"
#include "RandomNumberGenerator.h"
namespace shyplants
{
class Window
{
private:
int shape_type; // {0:circle, 1:box}
float angle;
RGB color;
public:
Window() : shape_type(0), angle(0.0f), color(Colors::blue)
{}
void setWindowShapeType(const int& _shape_type)
{
shape_type = _shape_type;
}
void setWindowAngle(const float& _angle)
{
angle = _angle;
}
void setWindowColor(const RGB& _color)
{
color = _color;
}
void windowDraw()
{
switch (shape_type)
{
case 0:
drawFilledCircle(color, 0.05f);
drawWiredCircle(color, 0.05f);
break;
case 1:
drawFilledBox(color, 0.1f, 0.1f);
drawWiredBox(color, 0.1f, 0.1f);
break;
default:
break;
}
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 });
}
};
class House : public Window
{
private:
RGB roof_color, wall_color;
vec2 pos;
float angle, rotate_speed;
public:
House() : roof_color(Colors::red), wall_color(Colors::yellow), pos(0.0f, 0.0f), angle(0.0f), rotate_speed(1.0f)
{}
void setPos(const vec2& _pos)
{
pos = _pos;
}
void setAngle(const float& _angle)
{
angle = _angle;
}
void setRotateSpeed(const float& _rotate_speed)
{
rotate_speed = _rotate_speed;
}
void setRoofColor(const RGB& _roof_color)
{
roof_color = _roof_color;
}
void setWallColor(const RGB& _wall_color)
{
wall_color = _wall_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(roof_color, { -0.13f, 0.1f }, { 0.13f, 0.1f }, { 0.0f, 0.2f });
// window
windowDraw();
}
endTransformation();
}
void update(float time)
{
angle = time * rotate_speed;
}
};
class Example : public Game2D
{
private:
float time;
public:
House houses[10];
Example() : Game2D()
{
RandomNumberGenerator rnd;
for (int i = 0; i < 10; ++i) {
houses[i].setPos({ -1.3f + 0.3f * float(i), rnd.getFloat(-0.5f, 0.5f) });
houses[i].setRotateSpeed(rnd.getFloat(-10.0f, 10.0f) * 10.0f);
houses[i].setRoofColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWindowColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
houses[i].setWallColor(RGB(rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f), rnd.getFloat(0.0f, 1.0f)));
}
time = 0.0f;
}
void update() override
{
for (int i = 0; i < 10; ++i) {
houses[i].draw();
}
time += this->getTimeStep();
}
};
}

'개발 > 게임개발' 카테고리의 다른 글
c++ 게임만들기 연습문제 2.3 (0) | 2023.02.28 |
---|---|
c++ 게임만들기 연습문제 2.2 (0) | 2023.02.27 |
c++ 게임만들기 연습문제 1.5 (1) | 2023.02.01 |
c++ 게임만들기 연습문제 1.4 (0) | 2023.01.31 |
c++ 게임만들기 연습문제 1.3 (0) | 2023.01.31 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 퀸 움직이기
- Python
- 브레젠험 알고리즘
- 백준 2365
- 코드포스
- BOJ 27469
- Codeforces
- C++게임개발
- 테트리스
- 언리얼 프로젝트 재생성 자동화
- UE5.3
- pygame
- 정보올림피아드
- 언리얼 자동화
- tetris
- C++게임
- 언리얼 프로젝트 재생성
- opengl
- Unreal Engine
- OpenVDB
- 숫자판 만들기
- 백준
- 백준 27469
- ndisplay
- ICPC 후기
- DP
- unreal enigne
- 홍정모의 게임 만들기 연습 문제 패키지
- 초등부
- BOJ 2365
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
글 보관함