|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
기존 배열에 벽돌의 종류를 추가하면 된다.
배열이 3차원에서 4차원으로 확장되었으니,
현재 벽돌 모양을 나타내는 변수 m_iNowBlockShape를 추가 하고,
OnPaint()함수도 변경해줘야 한다.
for(int tempY=0;tempY<4;tempY++)
{
for(int tempX=0;
tempX<4;
tempX++)
{
if
(1 == g_NowBlockInfo[m_iNowBlockShape][m_iNowBlockDir][tempY][tempX])
{
pDC.FillSolidRect((m_iNowBlockX+tempX)*m_iOneBlockSize, (m_iNowBlockY+tempY)*m_iOneBlockSize,
m_iOneBlockSize, m_iOneBlockSize, RGB(250,250,250));
}else{
// 벽돌이 아닌 곳을 회색으로 표시
pDC.FillSolidRect((m_iNowBlockX+tempX)*m_iOneBlockSize, (m_iNowBlockY+tempY)*m_iOneBlockSize,
m_iOneBlockSize, m_iOneBlockSize, RGB(200,200,200));
}
}
}
벽돌이 바닥에 닿았을 때 벽돌 모양을 바꿔보자.
void CWATTetrisView::OnTimer(UINT nIDEvent)
{
m_iNowBlockY
+=1;
if(m_iNowBlockY>=20){
m_iNowBlockY = 0;
m_iNowBlockShape
= (++m_iNowBlockShape)%2;
}
Invalidate();
CFormView::OnTimer(nIDEvent);
}
7가지 모양은 아래와 같다
0번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6번 모양
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
=> |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
소스 : WATTetris_20071016.zip
..
선생님~~ 질문잇습니다 ^^;;
void CWATTetrisView::OnTimer(UINT nIDEvent)
{
m_iNowBlockY +=1;
if(m_iNowBlockY>=20){
m_iNowBlockY = 0;
m_iNowBlockShape = (++m_iNowBlockShape)%7;
}
Invalidate();
CFormView::OnTimer(nIDEvent);
}
아까도 질문했었는데요^^;;
이 부분에서요~
m_iNowBlockShape = (++m_iNowBlockShape)%7;
%7이 의미하는것은 7가지의 모양인가요??
a
그리구요 OnPaint 함수부분에서
if (1 == g_NowBlockInfo[m_iNowBlockShape][m_iNowBlockDir][tempY][tempX])
이 부분이요~
g_NowBlockInfo == 1 이라는 말이 무슨말인지 모르겠어요;
제가 생각하기론 g_NowBlockInfo 의 배열 전부가 1이면 {} 을 수행하라
아니면 else {} 이 부분을 수행하라라고 이해되는데 잘못이해한거 같아서요^^;;
아 그리구 강의 너무 감사하게 잘 보구 있습니다 ^^*
답변 기다리겠습니다!