똥피하기 소스 질문합니다.
수예
질문 제목 : 똥피하기 소스인데 질문 드립니다.
질문 내용 : 똥피하기 소스를 구해서 연구중인데 잘모르 겠습니다. 고수님들 질문 드립니다. 각각의 함수가 무슨 역할을 하는지
주석이나 설명좀 부탁드리겠습니다. 파일 첨부 할테니 한번 봐주시고 cpp에 주석 달아 주시면 너무 감사하겠습니다.
#include windows.h
#include time.h
#include resource.h
LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);
int game1(HWND,UINT,WPARAM,LPARAM);
HINSTANCE hInst;
HBITMAP hBackBit;
class game {
public:
int frame;
int ddddd;
int x;
int xp;
int y;
int dd[3000];
int dx[3000];
int dy[3000];
int dz[3000];
int dead;
int left,right;
int n;
};
int ss=0;
int px,py,score;
game gameb;
HBITMAP ddf[8],logo,men[7];
int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance
,LPSTR lpszCmdParam,int nCmdShow)
{
HWND hWnd;
MSG Message;
WNDCLASS WndClass;
hInst=hInstance;
WndClass.cbClsExtra=0;
WndClass.cbWndExtra=0;
WndClass.hbrBackground=NULL;
WndClass.hCursor=LoadCursor(NULL,IDC_CROSS);
WndClass.hIcon=LoadIcon(hInstance, (LPCTSTR)IDI_ICON);
WndClass.hInstance=hInstance;
WndClass.lpfnWndProc=(WNDPROC)WndProc;
WndClass.lpszClassName=똥피하기 Class;
WndClass.lpszMenuName=(LPCSTR)IDR_MENU;
WndClass.style=CS_HREDRAW | CS_VREDRAW;
RegisterClass(&WndClass);
hWnd=CreateWindow(똥피하기 Class,똥피하기,WS_BORDER|WS_VISIBLE|WS_SYSMENU|WS_MINIMIZEBOX,
300,150,306,452,
NULL,(HMENU)NULL,hInstance,NULL);
ShowWindow(hWnd,nCmdShow);
ddf[0]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd));
ddf[1]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd2));
ddf[2]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd2));
ddf[3]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd3));
ddf[4]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd3));
ddf[5]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd3));
ddf[6]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd3));
ddf[7]=LoadBitmap(hInst, MAKEINTRESOURCE(ddd3));
logo=LoadBitmap(hInst, MAKEINTRESOURCE(start));
men[0]=LoadBitmap(hInst, MAKEINTRESOURCE(stop));
men[1]=LoadBitmap(hInst, MAKEINTRESOURCE(stop2));
men[2]=LoadBitmap(hInst, MAKEINTRESOURCE(left1));
men[3]=LoadBitmap(hInst, MAKEINTRESOURCE(left2));
men[4]=LoadBitmap(hInst, MAKEINTRESOURCE(right1));
men[5]=LoadBitmap(hInst, MAKEINTRESOURCE(right2));
men[6]=LoadBitmap(hInst, MAKEINTRESOURCE(stop3));
int h;
for(h=0;h3000;h++) {
gameb.dd[h]=0;
gameb.dx[h]=0;
gameb.dy[h]=0;
gameb.dz[h]=0;
}
gameb.ddddd=0;
gameb.x=150;
gameb.y=372;
gameb.dead=0;
gameb.frame=0;
gameb.left=0;
gameb.right=0;
gameb.xp=0;
score=0;
gameb.n=5;
srand(time(NULL));
while(GetMessage(&Message,0,0,0)) {
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
LRESULT CALLBACK WndProc(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
int wmId, wmEvent;
HDC hdc, MemDC, BufDC;
HBITMAP MyBitmap, OldBitmap;
BITMAP bit;
PAINTSTRUCT ps;
RECT crt;
switch(ss) {
case 1:
if(game1(hWnd,Message,wParam,lParam)==0)
return 0;
break;
}
switch(Message) {
case WM_CREATE:
SetTimer(hWnd,1,30,NULL);
break;
case WM_MOUSEMOVE:
px=LOWORD(lParam);
py=HIWORD(lParam);
break;
case WM_KEYDOWN:
if(wParam==VK_RETURN)
ss=1;
if(wParam==VK_ESCAPE)
PostQuitMessage(0);
break;
case WM_COMMAND:
wmId=LOWORD(wParam);
wmEvent=HIWORD(wParam);
switch (wmId) {
case 10:
ss=1;
SendMessage(hWnd,WM_CREATE,0,0);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
default:
return 0;
}
break;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
BufDC=CreateCompatibleDC(hdc);
GetClientRect(hWnd,&crt);
if (hBackBit == NULL) {
hBackBit=CreateCompatibleBitmap(hdc,crt.right,crt.bottom);
}
OldBitmap=(HBITMAP)SelectObject(BufDC,hBackBit);
FillRect(BufDC,&crt,GetSysColorBrush(COLOR_WINDOW));
SelectObject(BufDC,hBackBit);
char msg[200];
wsprintf(msg,점수:%d,score);
TextOut(BufDC,0,0,msg,strlen(msg));
MemDC=CreateCompatibleDC(BufDC);
MyBitmap=logo;
OldBitmap=(HBITMAP)SelectObject(MemDC,MyBitmap);
GetObject(MyBitmap,sizeof(BITMAP),&bit);
TransparentBlt(BufDC,60,90,bit.bmWidth,bit.bmHeight,MemDC,0,0,bit.bmWidth,bit.bmHeight,RGB(255,255,255));
SelectObject(MemDC,OldBitmap);
DeleteDC(MemDC);
BitBlt(hdc, 0,0,700,700,BufDC,0,0,SRCCOPY);
DeleteDC(BufDC);
EndPaint(hWnd, &ps);
break;
case WM_TIMER:
InvalidateRect(hWnd,NULL,TRUE);
break;
case WM_DESTROY:
KillTimer(hWnd,1);
PostQuitMessage(0);
return 0;
}
return(DefWindowProc(hWnd,Message,wParam,lParam));
}
int game1(HWND hWnd,UINT Message,WPARAM wParam,LPARAM lParam)
{
int i;
HDC hdc, MemDC, BufDC;
HBITMAP MyBitmap, OldBitmap;
BITMAP bit;
PAINTSTRUCT ps;
RECT crt;
switch(Message) {
case WM_CREATE:
return 0;
case WM_KEYDOWN:
if(wParam==VK_RETURN) {
if(gameb.dead==1) {
{
int h;
for(h=0;h3000;h++) {
gameb.dd[h]=0;
gameb.dx[h]=0;
gameb.dy[h]=0;
gameb.dz[h]=0;
}
gameb.ddddd=0;
gameb.x=150;
gameb.y=372;
gameb.dead=0;
gameb.frame=0;
gameb.left=0;
gameb.right=0;
gameb.xp=0;
score=0;
gameb.n=5;
srand(time(NULL));
}
}
}
if(wParam==VK_ESCAPE)
PostQuitMessage(0);
if(wParam==VK_LEFT)
gameb.left=1;
if(wParam==VK_RIGHT)
gameb.right=1;
return 0;
case WM_KEYUP:
if(wParam==VK_LEFT)
gameb.left=0;
if(wParam==VK_RIGHT)
gameb.right=0;
return 0;
case WM_TIMER:
if(score==100) {//난이도
gameb.n=5;
}
if(score==150) {
gameb.n=4;
}
if(score==250) {
gameb.n=3;
}
if(score==450) {
gameb.n=2;
}
if(score==10000) {
gameb.n=1;
}
if(gameb.dead==0) {
gameb.frame++;
if(gameb.left==0&&gameb.right==0) {
if(gameb.frgameb.frame==3) {
if(gameb.ddddd==1) {
gameb.ddddd=0;
} else {
gameb.ddddd=1;
}
gameb.frame=0;
}
}
if(gameb.left==1) {//인간 이동
if(gameb.frame==3) {
if(gameb.ddddd==2) {
gameb.ddddd=3;
} else {
gameb.ddddd=2;
}
gameb.frame=0;
}
if(gameb.xp0) {
gameb.xp-=1;
}
gameb.xp-=1;
}
if(gameb.right==1) {
if(gameb.frame==3) {
if(gameb.ddddd==4) {
gameb.ddddd=5;
} else {
gameb.ddddd=4;
}
gameb.frame=0;
}
if(gameb.xp0) {
gameb.xp+=1;
}
gameb.xp+=1;
}
if(gameb.xp=-11) {
gameb.xp+=1;
}
if(gameb.xp=11) {
gameb.xp-=1;
}
if(gameb.left==0&&gameb.right==0) {
if(gameb.xp0) {
gameb.xp-=1;
}
if(gameb.xp0) {
gameb.xp+=1;
}
}
if(gameb.x+gameb.xp3) {
gameb.x=3;
gameb.xp=0;
}
if(gameb.x+gameb.xp280) {
gameb.x=280;
gameb.xp=0;
}
gameb.x+=gameb.xp;
}
if(rand()%gameb.n+1==1) {//똥 생성
for(i=0;gameb.dd[i]!=0;i++){}
gameb.dd[i]=1;
gameb.dx[i]=rand()%280;
gameb.dy[i]=-21;
gameb.dz[i]=0;
}
for(i=0;i3000;i++) {
if(gameb.dd[i]==1) {
gameb.dy[i]+=7;
if(gameb.dy[i]380) {
gameb.dy[i]-=7;
gameb.dz[i]++;
if(gameb.dz[i]==7) {
gameb.dd[i]=0;
gameb.dz[i]=0;
if(gameb.dead==0) {
score++;
}
}
}
}
}
for(i=0;i3000;i++) {
if(gameb.dd[i]==1) {
if(gameb.dz[i]==0||gameb.dz[i]==1) {
if(gameb.dy[i]357) {
if(gameb.dx[i]=gameb.x-14&&gameb.dx[i]=gameb.x+14) {
gameb.dead=1;
gameb.ddddd=6;
}
}
}
}
}
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case WM_PAINT:
hdc=BeginPaint(hWnd, &ps);
BufDC=CreateCompatibleDC(hdc);
GetClientRect(hWnd,&crt);
if (hBackBit == NULL) {
hBackBit=CreateCompatibleBitmap(hdc,crt.right,crt.bottom);
}
OldBitmap=(HBITMAP)SelectObject(BufDC,hBackBit);
FillRect(BufDC,&crt,GetSysColorBrush(COLOR_WINDOW));
SelectObject(BufDC,hBackBit);
char msg[200];
wsprintf(msg,점수:%d,score);
TextOut(BufDC,0,0,msg,strlen(msg));
if(gameb.dead==1) {
TextOut(BufDC,30,70,다시하기:엔터,13);
}
for(i=0;i3000;i++) {
if(gameb.dz[i]!=0) {
MemDC=CreateCompatibleDC(BufDC);
MyBitmap=ddf[gameb.dz[i]];
OldBitmap=(HBITMAP)SelectObject(MemDC,MyBitmap);
GetObject(MyBitmap,sizeof(BITMAP),&bit);
TransparentBlt(BufDC,gameb.dx[i],gameb.dy[i],bit.bmWidth,bit.bmHeight,MemDC,0,0,bit.bmWidth,bit.bmHeight,RGB(255,255,255));
DeleteObject(OldBitmap);
SelectObject(MemDC,OldBitmap);
DeleteDC(MemDC);
continue;
}
if(gameb.dd[i]==1) {
MemDC=CreateCompatibleDC(BufDC);
MyBitmap=ddf[0];
OldBitmap=(HBITMAP)SelectObject(MemDC,MyBitmap);
GetObject(MyBitmap,sizeof(BITMAP),&bit);
TransparentBlt(BufDC,gameb.dx[i],gameb.dy[i],bit.bmWidth,bit.bmHeight,MemDC,0,0,bit.bmWidth,bit.bmHeight,RGB(255,255,255));
DeleteObject(OldBitmap);
SelectObject(MemDC,OldBitmap);
DeleteDC(MemDC);
}
}
//인간 출력
MemDC=CreateCompatibleDC(BufDC);
MyBitmap=men[gameb.ddddd];
OldBitmap=(HBITMAP)SelectObject(MemDC,MyBitmap);
GetObject(MyBitmap,sizeof(BITMAP),&bit);
TransparentBlt(BufDC,gameb.x,gameb.y,bit.bmWidth,bit.bmHeight,MemDC,0,0,bit.bmWidth,bit.bmHeight,RGB(255,255,255));
DeleteObject(OldBitmap);
SelectObject(MemDC,OldBitmap);
DeleteDC(MemDC);
BitBlt(hdc, 0,0,700,700,BufDC,0,0,SRCCOPY);
DeleteDC(BufDC);
EndPaint(hWnd, &ps);
return 0;
}
return 1;
}
