보드 만들기 전에다른 작업을 하기 전에 벽돌그리는 부분을 함수화 하고 벽돌 모양도 좀더 깔끔하게 하자.
(앞으로 벽돌을 계속 그려야 하는데, 작업량이 많아질것을 대비해서 간단한 함수로 변경하자.)
void CWATTetrisView::DrawOneBlock(int y,int x,int iSize,CClientDC *pDC, COLORREF crRGB) {
pDC->FillSolidRect((x)*iSize, (y)*iSize, iSize, iSize, crRGB);
pDC->Draw3dRect((x)*iSize, (y)*iSize, iSize, iSize, RGB(255,255,255), RGB(255,255,255));
}
보드 만들기
테트리스 게임을 하기 위해서는 일정한 크기의 보드가 있어야 한다.
보드는 어떤 식으로 정보를 가지고 있어야 하나?
제일 간단한 방법이 배열을 사용하는 것이다.
이제 뭔가 틀이 잡힌듯 하지만 아직 멀었다^^..
벽돌범위체크
키보드를 누르면 보드의 벽은 아무런 기능을 하지 않는다.
범위를 벗어나지 못하도록 추가하자.
왼쪽벽을 먼저 생각해 보자.
왼쪽 키보드를 눌렀을 때 벽돌이 왼쪽으로 이동하기 전에
왼쪽 벽과 걸리는지 안걸리는지를 체크해야 한다.
만약 벽과 걸린다면 이동하지 말아야하고
벽에 걸리지 않는다면 이동할수 있다.
이동할수 있는지 체크할수 있는 함수를 만들고
BOOL CWATTetrisView::CanMove(int iDir, int iCheckY,int iCheckX)
{
for (int iTempBlockY = 0;iTempBlockY<4;iTempBlockY++)
{
for (int iTempBlockX = 0;iTempBlockX<4;iTempBlockX++)
{
if(0 != g_BoardInfo[iCheckY+iTempBlockY][iCheckX+iTempBlockX] && 0 != g_NowBlockInfo[m_iNowBlockShape][iDir][iTempBlockY][iTempBlockX]){
return FALSE;
}
}
}
return TRUE;
}
소스 : WATTetris_20071017.zip
.
안녕하세요! 8장되니깐 갑자기 하드코어로 돌변했네요.. 질문글이 없는거 보니깐 저만 그런가요? ㅠ
질문좀 드릴께요~~
1. iSize가 iOneBlockSize 인것 같은데요 초기화는 안해준것 같은데 어디서 해주셨나요?? 그냥 1인가요?
2. pDC->FillSolidRect((x)*iSize, (y)*iSize, iSize, iSize, crRGB); 에서 crRGB란 무슨말인가요?@_@
수고하시구요! 답변 기다리겠습니다 ^^