본문 바로가기
공부

[C++/DX11] - Uv를 이용한 슬라이드 퍼즐 게임

by MY블로그 2023. 1. 18.

uv의 좌표를 이용하여 슬라이드 퍼즐을 만드는 게임.
일반배열로 시도하였을때 그림을 쪼개는 것 까지는 가능하였으나 uv의 좌표를 스왑 시키는 부분에서 문제가있었다.

  • 우측 해답의 이미지는 하나이므로 포인터로 생성
  • 좌측 퍼즐부분은 기본 포인터 1개 + 이중배열 포인터2개로 3개포인터사용
  • 오측이미지는 SafeDelete, 좌측이미지배열은 일반Delete 로 해제.(WHY?)
  • 퍼즐의 가로세로 갯수가 ImGui로 조절되도록 하려면 temp 를 사용해준다.
// 코드 예시
	int temp = puzzleNum;
	if (ImGui::SliderInt("PuzzleNum", &temp, 2, 10))
	{
		DeletePuzzle();
		puzzleNum = temp;
		CreatePuzzle();
		Shuffle();
	}
  • 각퍼즐에 필요한 uv 좌표는 이중포문 [i][j] 를 이용한다. Vector4(i,j,i,j)
  • 셔플을 이용하여 uv 좌표를 랜덤으로 정해준다.
// 코드 예시
void Main::Shuffle()
{
	for (int i = 0; i < 1000; i++)
	{
		int sour1 = RANDOM->Int(0, puzzleNum - 1);
		int sour2 = RANDOM->Int(0, puzzleNum - 1);
		int dest1 = RANDOM->Int(0, puzzleNum - 1);
		int dest2 = RANDOM->Int(0, puzzleNum - 1);

		Utility::Swap(puzzle[sour1][dest1]->uv,
			puzzle[sour2][dest2]->uv);
	}
}
  • 0,0 번칸 (좌측상단)에 있는 좌표이미지는 렌더를 빼주도록 한다.(그외는 전부 렌더)
// 코드 예시
void Main::Render()
{
	answer->Render();
	for (int i = 0; i < puzzleNum; i++)
	{
		for (int j = 0; j < puzzleNum; j++)
		{
			if (blank.x == i && blank.y == j)
				continue;
			puzzle[i][j]->Render();
		}
	}
}

'공부' 카테고리의 다른 글

[C++/DX11] - 런게임  (0) 2023.01.25
[C++/DX11] - 런게임  (0) 2023.01.19
[C++/DX11] - Trail ( 잔상 효과 )  (0) 2023.01.16
[C++/DX11] - AABB 충돌  (0) 2023.01.12
[C++/DX11] - 충돌,마우스좌표 컬러벡터  (0) 2023.01.10

댓글