벽돌 그려주는 함수 변경
for(tempY=0;tempY<4;tempY++)
{
for( tempX=0;
tempX<4;
tempX++)
{
if (0 != g_NowBlockInfo[m_iNowBlockShape][m_iNowBlockDir][tempY][tempX])
{
DrawOneBlockbyCDC( m_iNowBlockY+tempY, m_iNowBlockX+tempX,m_iOneBlockSize,pDrawDC,GetColorByNUM(m_iNowBlockShape));
}
}
}
벽돌이 바닥에 닿았을 때도 벽돌의 색깔을 유지해야 한다.
벽돌이 바닥에 닿고, 보드에 정보를 저장할때 현재 벽돌의 색깔을 저장한후
그 정보로 보드의 색깔을 그려주면 된다.
현재벽돌색깔을 저장(모양을 저장하면 된다.)
m_BoardInfo[m_iNowBlockY+iTempBlockY][m_iNowBlockX+iTempBlockX] = m_iNowBlockShape;
for(tempY
= 0;tempY<BOARD_Y_SIZE+1;tempY++){
for(tempX=0;
tempX<BOARD_X_SIZE+2; tempX++)
{
if(0
!= m_BoardInfo[tempY][tempX]){
DrawOneBlockbyCDC((tempY),tempX,m_iOneBlockSize,pDrawDC,GetColorByNUM(m_BoardInfo[tempY][tempX]));
}
}
}
보드 크기 자동 조절
윈도우의 크기가 변해도 테트리스를 하는데 지장이 있으면 안된다.
윈도우의 크기에 따라 벽돌 크기가 조절되도록 수정해보자.
1. 윈도우의 크기가 변할때 실행되는 메세지와 함수를 찾는다.
2. 그 함수에 벽돌크기를 조절하는 기능 추가
윈도우 크기가 변할때는 WM_SIZE 메세지가 발생하고, 그 메세지는 OnSize() 함수로 맵핑되어 있다.
void CWATTetrisView::OnSize(UINT nType, int cx, int cy)
{
CFormView::OnSize(nType, cx, cy);
int iBlockSizeX = cx/((BOARD_X_SIZE+3)*3);
int iBlockSizeY = (cy-60)/(BOARD_Y_SIZE+1);
int iBlockSize = (iBlockSizeX<iBlockSizeY)? iBlockSizeX :iBlockSizeY;
m_oneTetris[0].SetBlockSize(iBlockSize);
m_oneTetris[1].SetBlockSize(iBlockSize);
m_oneTetris[2].SetBlockSize(iBlockSize);
m_oneTetris[0].SetBoardXY(0,0);
m_oneTetris[1].SetBoardXY((iBlockSizeX*(BOARD_X_SIZE+3)),0);
m_oneTetris[2].SetBoardXY( iBlockSizeX*(BOARD_X_SIZE+3)*2,0);
}
하지만 윈도우 크기가 너무 작아지면 벽돌을 알아 볼수가 없어 테트리스를 할 수가 없다.
윈도우의 최소크기를 결정하자.
윈도우의 최소,최대 크기는 메인 클래스의
OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI) 에서 할수 있다.
void CMainFrame::OnGetMinMaxInfo(MINMAXINFO FAR* lpMMI)
{
lpMMI->ptMinTrackSize.x =300;
lpMMI->ptMinTrackSize.y =300;
CFrameWnd::OnGetMinMaxInfo(lpMMI);
}
.