메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
C++왕초보2011.05.27 15:54

오랜만에 다시 작업을 하네요..

 

마무리를 지으려고 합니다.

 

일단은 모든것이 완료 되었고, 이제 마지막으로 보드판에 저장하는것만 하면 되는데,(블록이 천장에 닿으면)

그런데...

 

이게 아예 막히네요..

 

함수를 해석할수가 없어요...

 

void CWATTetrisView::ChecknRemove()
{
 // 벽돌을 보드에 저장하기
 for (int iTempBlockY = 0; iTempBlockY<4 && (m_iNowBlockY+iTempBlockY<BOARD_Y_SIZE); iTempBlockY++)
 {
  for (int iTempBlockX = 0;iTempBlockX<4;iTempBlockX++)
  {
   if(0 == g_BoardInfo[m_iNowBlockY+iTempBlockY][m_iNowBlockX+iTempBlockX] )
   {
    if( 0 !=g_NowBlockInfo[m_iNowBlockShape][m_iNowBlockDir][iTempBlockY][iTempBlockX])
    {
     g_BoardInfo[m_iNowBlockY+iTempBlockY][m_iNowBlockX+iTempBlockX] = g_NowBlockInfo[m_iNowBlockShape][m_iNowBlockDir][iTempBlockY][iTempBlockX];

    }
   }
  }
 }

 // 한줄 없애기
 BOOL bGoodOneLine = TRUE;
 for ( iTempBlockY = 0;iTempBlockY<4 && (m_iNowBlockY+iTempBlockY<BOARD_Y_SIZE);iTempBlockY++)
 {
  bGoodOneLine = TRUE;
  for (int iTempBlockX = 0;iTempBlockX<BOARD_X_SIZE+2;iTempBlockX++)
  {
   if(0 == g_BoardInfo[m_iNowBlockY+iTempBlockY][iTempBlockX] ){ // 한칸이라도 빈칸이 있으면.
    bGoodOneLine = FALSE;
    iTempBlockX = BOARD_X_SIZE + 2;
   }

  }
  if(TRUE == bGoodOneLine){
   int iRemoveLineNum = m_iNowBlockY+iTempBlockY;
   for(int i=iRemoveLineNum ; i>0 ; i--){
    for(int j=1;j<BOARD_X_SIZE+2;j++){
     g_BoardInfo[i][j] =g_BoardInfo[i-1][j] ;
    }
   }
  }
 }


 if(IsGameEnd()){
  KillTimer(1);
  if(IDYES == MessageBox("한판 더 해","게임이 끝났습니다.",MB_YESNOCANCEL)){
   GameStart();
  }

 }
}

BOOL CWATTetrisView::IsGameEnd(){
  for(int tempY = 15;tempY>13 ;tempY--){
   for(int tempX=3; tempX<7; tempX++)
  {
   if(0 != g_BoardInfo[tempY][tempX])
   {
    return TRUE;
    }
  }
  }

 return FALSE;

이 함수 자체가 해석이 안되는데, 해석좀 도와주시고,

마지막으로 제일 윗 천장부터 시작해서 저장이 될수 있도록 도와주세요...

 

제가 프로그램을 건드려 보면서 한거는 g_boradinfo라는 것을 건드리면 될것 같던데...

중요한건

이 프로그램에서 게임이 끝났는지 체크하는 함수에서


BOOL CWATTetrisView::IsGameEnd(){
  for(int tempY = 15;tempY>13 ;tempY--){
   for(int tempX=3; tempX<7; tempX++)
  {
   if(0 != g_BoardInfo[tempY][tempX]){
    return TRUE;
    }
  }
  }

 return FALSE;
}

이런식으로 상수를 바꾸어서 주면,

블럭이 전체적으로 쌓이는 것이 아니라. 원래 다음벽돌에 닿으면 바로 쌓여야 되는데, 그렇지 못하고 원래 쌓인 블럭 안으로 들어가서  쌓여버리는 현상이 나타납니다..

 

뭐가 문젠지... 이해가 잘 안가서..

도와주십시오

사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )