메뉴 바로가기
서브메뉴 바로가기
본문 바로가기
오랜만에 다시 작업을 하네요..
마무리를 지으려고 합니다.
일단은 모든것이 완료 되었고, 이제 마지막으로 보드판에 저장하는것만 하면 되는데,(블록이 천장에 닿으면)
그런데...
이게 아예 막히네요..
함수를 해석할수가 없어요...
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%)
오랜만에 다시 작업을 하네요..
마무리를 지으려고 합니다.
일단은 모든것이 완료 되었고, 이제 마지막으로 보드판에 저장하는것만 하면 되는데,(블록이 천장에 닿으면)
그런데...
이게 아예 막히네요..
함수를 해석할수가 없어요...
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;
}
이런식으로 상수를 바꾸어서 주면,
블럭이 전체적으로 쌓이는 것이 아니라. 원래 다음벽돌에 닿으면 바로 쌓여야 되는데, 그렇지 못하고 원래 쌓인 블럭 안으로 들어가서 쌓여버리는 현상이 나타납니다..
뭐가 문젠지... 이해가 잘 안가서..
도와주십시오