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 |
댓글