[게임 개발 : 히어로 체스] 3. 경량 패턴 적용

WIGWAG·2023년 1월 17일
0

히어로 체스

목록 보기
4/5

경량 패턴이란?

공유를 통해 많은 수의 소립 객체들을 효과적으로 지원한다. (GoF의 디자인 패턴 265p)

많은 객체가 사용하는 공통된 데이터나 속성을 하나의 클래스로 묶어서 이 클래스를 많은 객체가 공유하도록 만들어서 데이터 크기를 줄이는 기법이다. 그래픽이 높은 게임에서 자주 사용되는 패턴으로 GPU로 전달되는 데이터를 줄여서 GPU의 부담을 덜어준다.


코드 설명

내가 만들 게임에는 딱히 적용할 요소는 없었다.
그래서 격자의 색깔을 공통된 데이터로 지정하기로 했다.
흙 타일, 풀 타일, 강 타일로 나누어서
흙 타일은 갈색, 풀 타일은 초록색, 강 타일은 파란색으로 칠한다.

이 프로젝트는 재밌는 게임을 만드는 것보다 개인적인 실력을 키우기 위한 프로젝트다!
그러므로 게임 상에서는 필요없는 기능들이 많이 들어갈 것이다.

<C_Board.h>

#pragma once

class C_Grid
{
public:
	C_Grid(int color)
		:color_(color)
	{}

	int Get_Color() const { return color_; }

private:
	int color_;
};

class C_Board
{
public:
	C_Board()
		:grass_tile(RGB(0, 128, 0)),
		ground_tile(RGB(150, 75, 0)),
		river_tile(RGB(0, 10, 96))
	{}

	void Render(HDC hdc);

	int Pos_To_Index(int pos)
	{
		return pos / GRID_WH - 1;
	}

	int Index_To_Pos(int index)
	{
		return (index+1) * GRID_WH;
	}

	void Generate_Grid();
private:
	C_Grid grass_tile;
	C_Grid ground_tile;
	C_Grid river_tile;

	static const int BOARD_W = 7;
	static const int BOARD_H = 10;

	C_Grid* tiles_[BOARD_H][BOARD_W];
};

<C_Board클래스의 Generate_Grid함수>

void C_Board::Generate_Grid()
{
	for (size_t h = 0; h < BOARD_H; h++)
		for (size_t w = 0; w < BOARD_W; w++)
		{
        	//랜덤 1/5확률
			if (uid(dre) == 0)
			{
				tiles_[h][w] = &ground_tile;
			}
			else
			{
				tiles_[h][w] = &grass_tile;
			}
		}
	
    //높이 랜덤
	int h = uid(dre);
	for (size_t w = 0; w < BOARD_W; w++)
	{
		tiles_[h][w] = &river_tile;
	}
}

실행 결과

<타일 마다 고유의 색상을 가진다. 강 타일은 한 줄로 이어져 있다.>

profile
윅왁의 프로그래밍 개발노트

0개의 댓글