<Windows API>
Game
1) 벽 뚫 막기!
case WM_KEYDOWN:
caMap[iY][iX] = ' ';
switch(wParam)
{
case VK_UP:
BM_Jola = BM_Jola_TYPE[BACK];
if(caMap[iY - 1][iX] != ' ')
{ break; }
--iY;
break;
case VK_DOWN:
BM_Jola = BM_Jola_TYPE[FRONT];
if(caMap[iY + 1][iX] != ' ')
{ break; }
++iY;
break;
case VK_RIGHT:
BM_Jola = BM_Jola_TYPE[RIGHT];
if(caMap[iY][iX +1] != ' ')
{ break; }
++iX;
break;
case VK_LEFT:
BM_Jola = BM_Jola_TYPE[LEFT];
if(caMap[iY][iX -1] != ' ')
{ break; }
--iX;
break;
}
caMap[iY][iX] = '@';
InvalidateRect(hWnd,NULL,TRUE); // reFresh
return 0;
음... 이 상황에서;
if(caMap[iY][iX -1] != ' ') 이거나 if(caMap[iY][iX –1] == '*')
이거나 상관없음! 근데 나중에 박스 옮겨야 하는걸 생각해보면..
박스 생성
1- 변수 선언, 2- Wm_Create (로드로 적재) 3- wm_Destroy에서 파.괘.
2) 특정 위치에 박스를 놓아야한다.
spot 생성
@, 가 이동하면서 ‘ ’ 을 생성하기 때문에 해당 자리가 지워진다.
1- 골뱅이 이동 할 경우에 원맵에서 #의 자리가 있으면 그걸 계속 새로 그려주는거
(이동할 때마다 복원)
2- 움직이는 애는 박스와 캐릭터 뿐이다.
그리거나 참고할때는 Stage를 쓰고 이동할때는 caMap 만 사용한다.
(현재 위치를 Stage에서 참조)
spot 이냐 아니냐에 따라서 확인해서 spot 의 위치는 Stage를 참조하고,
박스와 캐릭터는 caMap을 참조한다
3) 스테이지 생성
<-- 요렇게
case WM_PAINT:
hdc = BeginPaint(hWnd,&ps);
MemDC = CreateCompatibleDC(hdc);
OldBitmap = (HBITMAP)SelectObject(MemDC, BM_Wall);
for(yCnt = 0; yCnt < 10 ;++yCnt)
{
for(xCnt = 0; xCnt < 13 ;++xCnt)
{
if( caStage[uiStage][yCnt][xCnt] == '*')
{
BitBlt(hdc,(X_SIZE * xCnt),(Y_SIZE * yCnt),X_SIZE,Y_SIZE,MemDC,0,0,SRCCOPY);
}
else if( caMap[yCnt][xCnt] == '@')
{
iX = xCnt;
iY = yCnt;
SelectObject(MemDC,BM_Jola);
BitBlt(hdc,(X_SIZE * xCnt),(Y_SIZE * yCnt),X_SIZE,Y_SIZE,MemDC,0,0,SRCCOPY);
SelectObject(MemDC,BM_Wall);
}
else if( caMap[yCnt][xCnt] == '+')
{
SelectObject(MemDC,BM_Box);
BitBlt(hdc,(X_SIZE * xCnt),(Y_SIZE * yCnt),X_SIZE,Y_SIZE,MemDC,0,0,SRCCOPY);
SelectObject(MemDC,BM_Wall);
}
else if( caStage[uiStage][yCnt][xCnt] == '#')
{
SelectObject(MemDC,BM_Spot);
BitBlt(hdc,(X_SIZE * xCnt),(Y_SIZE * yCnt),X_SIZE,Y_SIZE,MemDC,0,0,SRCCOPY);
SelectObject(MemDC,BM_Wall);
}
}
}
또한 PageUp/Down 키로 스테이지의 변화
case VK_PRIOR: //pageup
if(uiStage > 0)
{
--uiStage;
}
memcpy(caMap,caStage[uiStage],sizeof(caMap) );
InvalidateRect(hWnd,NULL,TRUE);
return 0;
case VK_NEXT: //pageDown
if(uiStage < STAGE_NUM -1)
{
++uiStage;
}
memcpy(caMap,caStage[uiStage],sizeof(caMap) );
InvalidateRect(hWnd,NULL,TRUE);
return 0;
}
4) 이제 중요한 스토리를 생각해보자.
- 게임은 경쟁인데, 박스를 저기에 가따놓는건 누구라도 한다. 그럼,
위의 게임에서의 스토리는 뭘까.
스테이지가 시작될 때 0, Spot에 박스가 도달했을 경우 까지 ++ 된다.
(마치 골프처럼)
1판은 스팟이 3개
2판은 스팟이 4개 ~~ 라는 식으로 난이도를 올리고
스팟과 박스의 위치가 다 일치하는지 스캔하는 함수를 만들어서 스테이지의
클리어를 체크! 하는 것이 최종적인 포인트이다.
횟수, 클리어 조건 등등
횟수는
클리어 조건에 대해서 생각해보자.
단 하나라도 # 과 + 가 일치하지 않는 경우에는 End_Game 변수는
False 가 된다. 모두 일치하여, true 가 된다고 가정하면,
해당 스테이지의 종료 절차를 시행한다.
'코스웨어' 카테고리의 다른 글
기상장비 개발 제조 업체, 웰비안시스템 구인합니다. (0) | 2014.11.26 |
---|---|
20141110[usart] (0) | 2014.11.10 |
ARM 구조체 Source 김상엽 (0) | 2014.10.29 |
ARM고윤석 (0) | 2014.10.29 |
20140905 업무일지 출석번호 1번 고윤석 (6) | 2014.09.05 |
2014년 4월 17일 업무일지 김화린 출석번호 10번 (16) | 2014.04.17 |
모니터받침대 (4) | 2014.04.10 |
안녕하세요 (0) | 2014.03.05 |