응애맘마조
슬라이드 퍼즐 본문
이전 게시글에 이어서 코드 내용입니다.
https://keisukeaso.tistory.com/86
//main.cpp
#include "stdafx.h"
#include "Main.h"
void Main::Init()
{
original = new ObImage(L"doramon2.jpg");
original->scale = Vector2(500.0f, 500.0f);
original->SetWorldPosX(250.0f);
puzzleNum = 3;
CreatePuzzle();
Shuffle();
}
void Main::Release()
{
SafeDelete(original);
DeletePuzzle();
}
void Main::Update()
{
int temp = puzzleNum;
if (ImGui::SliderInt("PuzzleNum", &temp, 2, 10))
{
DeletePuzzle();
puzzleNum = temp;
CreatePuzzle();
Shuffle();
}
if (ImGui::Button("Shuffle"))
{
Shuffle();
}
if (ImGui::Button("Cheat"))
{
for (int i = 0; i < puzzleNum; i++)
{
for (int j = 0; j < puzzleNum; j++)
{
puzzle[i][j]->uv = Vector4((i * 1.0f) / puzzleNum, (j * 1.0f) / puzzleNum,
(i + 1.0f) / puzzleNum, (j + 1.0f) / puzzleNum);
}
}
}
if (INPUT->KeyDown('W'))
{
if (emptySpace.y > 0)
{
Utility::Swap(puzzle[emptySpace.x][emptySpace.y]->uv,
puzzle[emptySpace.x][emptySpace.y - 1]->uv);
emptySpace.y--;
}
}
else if (INPUT->KeyDown('S'))
{
if (emptySpace.y < puzzleNum - 1)
{
Utility::Swap(puzzle[emptySpace.x][emptySpace.y]->uv,
puzzle[emptySpace.x][emptySpace.y + 1]->uv);
emptySpace.y++;
}
}
else if (INPUT->KeyDown('A'))
{
if (emptySpace.x > 0)
{
Utility::Swap(puzzle[emptySpace.x][emptySpace.y]->uv,
puzzle[emptySpace.x - 1][emptySpace.y]->uv);
emptySpace.x--;
}
}
else if (INPUT->KeyDown('D'))
{
if (emptySpace.x < puzzleNum - 1)
{
Utility::Swap(puzzle[emptySpace.x][emptySpace.y]->uv,
puzzle[emptySpace.x + 1][emptySpace.y]->uv);
emptySpace.x++;
}
}
original->Update();
for (int i = 0; i < puzzleNum; i++)
{
for (int j = 0; j < puzzleNum; j++)
{
puzzle[i][j]->Update();
}
}
}
void Main::LateUpdate()
{
}
void Main::Render()
{
original->Render();
for (int i = 0; i < puzzleNum; i++)
{
for (int j = 0; j < puzzleNum; j++)
{
if (i == emptySpace.x && j == emptySpace.y)
continue;
puzzle[i][j]->Render();
}
}
}
void Main::ResizeScreen()
{
}
void Main::DeletePuzzle()
{
for (int i = 0; i < puzzleNum; i++)
{
for (int j = 0; j < puzzleNum; j++)
{
SafeDelete(puzzle[i][j]);
}
SafeDelete(puzzle[i]);
}
SafeDelete(puzzle);
}
void Main::CreatePuzzle()
{
puzzle = new ObImage * *[puzzleNum];
for (int i = 0; i < puzzleNum; i++)
{
puzzle[i] = new ObImage * [puzzleNum];
for (int j = 0; j < puzzleNum; j++)
{
puzzle[i][j] = new ObImage(L"doramon2.jpg");
puzzle[i][j]->scale = Vector2(500.0f / puzzleNum, 500.0f / puzzleNum);
puzzle[i][j]->pivot = OFFSET_LT;
puzzle[i][j]->SetLocalPos(Vector2(500.0f / puzzleNum * i,
500.0f / puzzleNum * -j));
puzzle[i][j]->uv = Vector4((i * 1.0f) / puzzleNum, (j * 1.0f) / puzzleNum,
(i + 1.0f) / puzzleNum, (j + 1.0f) / puzzleNum);
if (!(i == 0 && j == 0))
{
puzzle[i][j]->SetParentRT(*puzzle[0][0]);
}
}
puzzle[0][0]->SetWorldPos(Vector2(-500.0f, 250.0f));
}
emptySpace = Int2(0, 0);
}
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][sour2]->uv, puzzle[dest1][dest2]->uv);
}
}
int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
app.SetAppName(L"Game2");
app.SetInstance(instance);
app.InitWidthHeight(1000.0f, 500.0f);
WIN->Create();
Main* main = new Main();
int wParam = (int)WIN->Run(main);
SafeDelete(main);
WIN->Destroy();
WIN->DeleteSingleton();
return wParam;
}
코드입니다.
읽어주셔서 감사합니다.
'공부 > 2D과제' 카테고리의 다른 글
쿠키런 2탄 : 착지, 젤리 먹기, 타격 (0) | 2023.01.25 |
---|---|
쿠키런 1탄 : 달리기, 점프, 2단 점프, 슬라이드 (0) | 2023.01.20 |
이동 제한 (0) | 2023.01.17 |
deque, map (0) | 2023.01.17 |
잔상 만들기 (0) | 2023.01.16 |