KoreanFoodie's Study
윈도우 API 프로그래밍 6 : 간단한 UI 구현과 똥피하기 게임 예제 본문
윈도우 API 프로그래밍 6 : 간단한 UI 구현과 똥피하기 게임 예제
이전 글에 이어서 추가적인 기능을 약간 추가해 보자.
전역 변수 재설정
struct tagBox
{
RECT rt;
float speed;
};
vector<tagBox> vecBox; // 떨어지는 렉트들의 정보
int nDelay = 50;
struct tagBox를 새로 선언하여 RECT를 대체했다. 그 이유는, 각각의 상자마다 떨어지는 속도를 다르게 만들기 위해서인데, 이는 난이도나 약간의 재미 요소를 첨가하는데 사용될 수 있다.
WM_TIMER : 점수 계산과 타입 수정
case WM_TIMER: // 타이머에 의해서 호출
{
InvalidateRect(hWnd, NULL, true);
nLevel = nScore / 100 + 1;
// 포지션 위치에 따른 렉트 정보 업데이트
rtBox1 = RECT_MAKE(ptPos1.x, ptPos1.y, 50);
if (nDelay >= 50)
{
tagBox box;
box.rt.left = rand() % (WINSIZEX - 15);
box.rt.right = box.rt.left + 30;
box.rt.top = -30;
box.rt.bottom = 0;
box.speed = rand() % 11 + 5;
vecBox.push_back(box);
nDelay = rand() % 50;
}
else
nDelay += nLevel;
vector<tagBox>::iterator iter;
for (iter = vecBox.begin(); iter != vecBox.end(); iter++)
{
iter->rt.top += iter->speed;
iter->rt.bottom += iter->speed;
RECT rt;
RECT rtIter = iter->rt;
if (iter->rt.top > WINSIZEY)
{
nScore++;
vecBox.erase(iter);
break;
}
else if (IntersectRect(&rt, &rtBox1, &rtIter))
{
nScore -= 10;
vecBox.erase(iter);
break;
}
else if (PtInRect(&rtIter, ptMouse))
{
nScore += 5;
vecBox.erase(iter);
break;
}
}
}
break;
RECT를 tagBox로 변경하면서, rt.right 대신 box.rt.right 같은 형식으로 약간의 수정이 있었다.
사실 뒷부분을 보면, 스코어를 더하고 빼는 부분을 추가하여 점수를 계산할 수있도록 만들었다. 그중 PtInRect(&rtIter, ptMouse) 부분은 마우스가 해당 RECT안으로 들어왔는지를 판단하는 함수이다. 여기서는 마우스 포인터가 떨어지는 RECT블록을 건드리면 점수가 5점 추가되면서 해당 tagBox를 지우도록 구현하였다.
WM_PAINT : 간단한 TEXT UI
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
RECT_DRAW(rtBox1);
for (int i = 0; i < vecBox.size(); i++)
{
RECT_DRAW(vecBox[i].rt);
}
char szBuf[32];
_itoa_s(nLevel, szBuf, 10);
string str = string(szBuf);
TextOutA(hdc, 10, 10, str.c_str(), str.length());
_itoa_s(nScore, szBuf, 10); // 정수값을 문자열 값으로 변환 해주는 함수
str = string(szBuf);
TextOutA(hdc, 10, 30, str.c_str(), str.length());
EndPaint(hWnd, &ps);
}
break;
_itoa_s 함수를 통해 레벨과 스코어를 szBuf에 저장한 후, string으로 형변환하여 TextOutA로 넣었다. TextOutA 함수는 지정한 위치에 해당하는 텍스트를 출력하게 되는데, 이는 이전 글에서 보았던 왼쪽 상단의 텍스트 부분을 의미한다!
더 자세한 내용이 궁금하시다면 직접 들어보시는 걸 추천드립니다!
'Game Dev > 윈도우 API' 카테고리의 다른 글
윈도우 API 프로그래밍 8 : 객체 지향적인 윈도우 API 프로그래밍 (0) | 2021.10.15 |
---|---|
윈도우 API 프로그래밍 7 : 게임 프레임워크 구성 (0) | 2021.10.15 |
윈도우 API 프로그래밍 5 : 물체 떨어뜨리기 (간단한 똥피하기 게임 예제) (0) | 2021.10.15 |
윈도우 API 프로그래밍 4 : 충돌 검사 (IntersectRect...) (0) | 2021.10.15 |
윈도우 API 프로그래밍 3 : 키 입력과 게임 업데이트 (0) | 2021.10.15 |
Comments