int m_iScore;// 점수 변수를 만들고,
점수 추가 함수 만들고
int CWATOneTetris::AddScore(int iData)
{
                  m_iScore +=iData;
                  return m_iScore;
}
벽돌 한줄이 완성될때마다 점수를 추가한다.
                  if (iRemoveLineCount>0)
                  {
                                   AddScore(iRemoveLineCount*iRemoveLineCount);
                  }
미리보기추가
DrawBoard 함수에서 점수와 다음벽돌을 표시해 주고
                  // 점수 표시
                  pDrawDC->TextOut(m_iBoardX+((BOARD_X_SIZE+3)*m_iOneBlockSize),m_iBoardY,"SCORE");
                  strKeyValue.Format("%d ",AddScore(0));
                  pDrawDC->TextOut(m_iBoardX+((BOARD_X_SIZE+3)*m_iOneBlockSize),m_iBoardY+(0+1)*m_iOneBlockSize,strKeyValue);
                  // 미리보기 표시
                  for(tempY=0;tempY<4;tempY++)
                  {
                                   for( tempX=0;
tempX<4;
tempX++)
                                   {
                                                     if
(0 != g_NowBlockInfo[m_iNextBlockShape][0][tempY][tempX])
                                                     {
                                                                       DrawOneBlockbyCDC( 1+tempY, BOARD_X_SIZE+4+tempX,m_iOneBlockSize,pDrawDC,GetColorByNUM(m_iNextBlockShape+1));
                                                     }
                                   }
                  }
게임 종료체크
끝났는지 체크하여 끝이 났을 경우 더 이상 진행하지 않고,
벽돌은 회색으로 변경시킨다.
void CWATOneTetris::OnTimer()
{
                  CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();
                  CWATTetrisView
*pView
= (CWATTetrisView *)pFrame->GetActiveView();
                  if(CanMove(m_iNowBlockDir,m_iNowBlockY+1,m_iNowBlockX)){
                                   m_iNowBlockY +=1;
                  }else{
                                   if (IsGameEnd())
                                   {
                                         SetGameEND();
                                  }else{
                                                     ChecknRemove();
                                                     
                                                     m_iNowBlockX = BOARD_X_SIZE/2-1;
                                                     m_iNowBlockY = 0;
                                                     m_iNowBlockShape = m_iNextBlockShape;
                                                     m_iNextBlockShape = rand()%7;
                                   }
                  }
                  DrawBoard();
}
void CWATOneTetris::SetGameEND()
{
                  int tempX,tempY;
                  // 모든 벽돌을 회색으로 변경하자.
                 for(tempY
= 0;tempY<BOARD_Y_SIZE+1;tempY++){
                                  for(tempX=0;
tempX<BOARD_X_SIZE+2; tempX++)
                                   {
                                                     if(0
!= m_BoardInfo[tempY][tempX]){
                                                                       m_BoardInfo[tempY][tempX] = GetColorByNUM(0);
 
                                                    }
                                   }
                 }
}
소스 : WATTetris_20071109.zip
실행 파일 : WATTetris.zip

 
	
		 


 
    
 
    
 
     

 2
2
먼저 이건 3년전에 작성했고 지금은 코드를 보지 않아 가물가물하다는 말씀을 드립니다.^^
1. 게임 종료
보드의 특정 위치(아마도 위쪽의 가운데)에 벽돌이 걸리면 게임이 종료됩니다.
현재 특정 메세지는 출력하지 않고, 그냥 타이머 종료로 끝낼겁니다.
IsGameEnd() 함수가 게임 끝인지 검사할겁니다.
그 부분에 Messagebox("끝"); 하면 됩니다.^^
2. 게임 스피드
스피드는 SetTimer 함수를 수정하면 됩니다.
SetTimer(1000,......) 하면 1초마다 벽돌이 떨어지는 것이고,
Settimer(500,......) 하면 0.5초마다 벽돌이 떨어지는 겁니다.^^
3. 1인용 게임
1인용 게임은 View 에서 하나의 CTetris 클래스만 사용하면 되고,
가운데위치에서 출력하려면... 보드를 생성할때, 위치를 설정해 주면 됩니다.^^