⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 terris.cpp

📁 俄罗斯方块vc++编码
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			MoveBlockFromSrcToDes(BlockArray, i + 2, j + 1, i, j + 1);
			DrawBlock(hdc, i,  j + 1, 2);
			EraseBlock(hdc, i + 2, j + 1);
		}
	ReleaseDC(hwnd,hdc);
	return ;	
	}
	/*    @
      @ @ @ */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][j - 1].Flag_Is_Moveable == TRUE )
	{
		

		if( i == ROWS - 2) return ;

		if(BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE || \
		   BlockArray[  i  ][j - 2].Flag_Is_Filled == TRUE )
		return;

		if(BlockArray[i + 2][j - 1].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][j - 2].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i, j, i, j - 2);
			DrawBlock(hdc, i, j - 2,2);
			EraseBlock(hdc,i, j);

			MoveBlockFromSrcToDes(BlockArray,i + 1, j, i, j - 1);
			DrawBlock(hdc, i, j - 1,2);
			EraseBlock(hdc,i + 1, j);

			MoveBlockFromSrcToDes(BlockArray,i + 1, j - 2, i + 2, j - 1);
			DrawBlock(hdc, i + 2, j - 1,2);
			EraseBlock(hdc,i + 1, j - 2);
		}
	ReleaseDC(hwnd,hdc);
	return ;
	}
	/* @ @
	     @
	     @ */ /*当前积木所处的形态*/
	if ( BlockArray[  i  ][j + 1].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 1][j + 1].Flag_Is_Moveable == TRUE)
	{
		if( j == COLS - 2) return ;

		if(BlockArray[i + 1][  j  ].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][  j  ].Flag_Is_Filled == TRUE )
           return;

		if(BlockArray[i + 1][j + 2].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][j + 2].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i, j, i + 2, j);
			DrawBlock(hdc, i + 2, j, 2);
			EraseBlock(hdc,i, j);

			MoveBlockFromSrcToDes(BlockArray,i, j + 1, i + 1, j);
			DrawBlock(hdc, i + 1, j, 2);
			EraseBlock(hdc,i,  j + 1);

			MoveBlockFromSrcToDes(BlockArray,i + 2, j + 1, i + 1, j + 2);
			DrawBlock(hdc, i + 1, j + 2,2);
			EraseBlock(hdc,i + 2, j + 1);
		}
	ReleaseDC(hwnd,hdc);
	return;
	}
    
	
}

void RotateStyleThree(HWND hwnd,BLOCK BlockArray[ROWS][COLS])
{
	int i, j;

	HDC hdc;

	hdc=GetDC(hwnd);
    /* 这一段for循环的代码是用来寻找当前移动积木的最左上角的那个方块所对应的矩阵中的的位置 */
	
	for(i = 2 ; i < ROWS ; i++)
	{
	   for(j = 0 ; j < COLS; j++)
	   {
		   if ( BlockArray[i][j].Flag_Is_Moveable == TRUE )
               break;
	   }
	   if ( j < COLS )
		   break;
	}      
	
	/* @ @ @
	     @   */ /*当前积木所处的形态*/
	if( BlockArray[  i  ][j + 1].Flag_Is_Moveable == TRUE && \
		BlockArray[  i  ][j + 2].Flag_Is_Moveable == TRUE )
	{
   	    if ( i == 2  ) return; /* 叛定积木是不是在最上面一行*/

		if ( BlockArray[i + 1][  j  ].Flag_Is_Filled == TRUE ) 
		     return;

		if ( BlockArray[i + 1][j + 2].Flag_Is_Filled == TRUE )
			 return;

		if ( BlockArray[i - 1][j + 1].Flag_Is_Filled == TRUE || \
			 BlockArray[i - 1][j + 2].Flag_Is_Filled == TRUE)
			 return;

		{
			MoveBlockFromSrcToDes(BlockArray, i, j, i - 1, j + 1);
			DrawBlock(hdc, i - 1, j + 1, 3);
			EraseBlock(hdc,i, j);

		}	
	ReleaseDC(hwnd,hdc);
	return ;
	}
	/* @
	   @ @
	   @  */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][j + 1].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 2][  j  ].Flag_Is_Moveable == TRUE)
	{
		if ( j == 0 ) return;

		if ( BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE || \
			 BlockArray[i + 1][j - 1].Flag_Is_Filled == TRUE )
             return;

		if ( BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE )
			 return;

		if ( BlockArray[  i  ][j + 1].Flag_Is_Filled == TRUE)
			 return;

		{
			MoveBlockFromSrcToDes(BlockArray, i + 2, j, i + 1, j - 1);
			DrawBlock(hdc, i + 1, j - 1, 3);
			EraseBlock(hdc,i + 2, j);
		}
	ReleaseDC(hwnd,hdc);
	return ;	
	}
	/*   @
       @ @ @ */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][j - 1].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 1][j + 1].Flag_Is_Moveable == TRUE)
	{
		if( i == ROWS - 2) return ;

		if(BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[i + 2][  j  ].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][j - 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[  i  ][j + 1].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i + 1, j + 1, i + 2, j);
			DrawBlock(hdc, i + 2, j, 3);
			EraseBlock(hdc,i + 1, j + 1);

		}
	ReleaseDC(hwnd,hdc);
	return ;
	}
	/*   @
	   @ @
	     @ */ /*当前积木所处的形态*/
	if ( BlockArray[i + 2][  j  ].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 1][j - 1].Flag_Is_Moveable == TRUE)
	{
		if( j == COLS - 1) return ;

		if( BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[i + 2][j - 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i, j, i + 1, j + 1);
			DrawBlock(hdc, i + 1, j + 1, 3);
			EraseBlock(hdc,i, j);
		}
	ReleaseDC(hwnd,hdc);
	return;
	}
}
void RotateStyleFour(HWND hwnd,BLOCK BlockArray[ROWS][COLS])
{
	int i, j;

	HDC hdc;

	hdc=GetDC(hwnd);

	/* 这一段for循环的代码是用来寻找当前移动的积木最左上角的那个方块所对应的矩阵中的的位置 */
	for(i = 2 ; i < ROWS ; i++)
	{
	   for(j = 0 ;j < COLS ;j++)
	   {
		   if (BlockArray[i][j].Flag_Is_Moveable == TRUE)
	           break;
	   }
	   if ( j < COLS )
		  break;
	}      

	/*  @ @  
	      @ @   */  /* 当前积木所处的形态 */
    if ( BlockArray[ i ][j + 1].Flag_Is_Moveable == TRUE )    
	{
		if( i == 2) 
			return;

		if( BlockArray[i + 1][  j  ].Flag_Is_Filled == TRUE )  return;

		if( BlockArray[  i  ][j + 2].Flag_Is_Filled == TRUE )  return;

		if( BlockArray[i - 1][j + 2].Flag_Is_Filled == TRUE )  return;

		{
			MoveBlockFromSrcToDes(BlockArray, i, j ,i, j + 2);
			DrawBlock(hdc, i, j + 2, 4);
			EraseBlock(hdc,i, j );

			MoveBlockFromSrcToDes(BlockArray, i + 1, j + 2, i - 1,j + 2);
			DrawBlock(hdc, i - 1, j + 2, 4);
			EraseBlock(hdc,i + 1, j + 2);
		}
	}
	/*   @
	   @ @
	   @   */   /* 当前积木所处的形态 */
	else
	{
		if ( j == 1 ) 
			return;

		if ( BlockArray[i + 2][  j  ].Flag_Is_Filled == TRUE) return;

		if ( BlockArray[i + 2][j - 2].Flag_Is_Filled == TRUE || \
			 BlockArray[i + 1][j - 2].Flag_Is_Filled == TRUE ) 
			 return;

		{
			MoveBlockFromSrcToDes(BlockArray, i, j, i + 2, j);
			DrawBlock(hdc,  i + 2, j, 4);
			EraseBlock(hdc, i, j);

			MoveBlockFromSrcToDes(BlockArray, i + 1, j, i + 1, j - 2);
			DrawBlock(hdc, i + 1,j - 2,4);
			EraseBlock(hdc,i + 1,j );
		}

	}
    ReleaseDC(hwnd,hdc);
}
void RotateStyleSix(HWND hwnd,BLOCK BlockArray[ROWS][COLS])
{
	int i, j;

	HDC hdc;

	hdc=GetDC(hwnd);
    /* 这一段for循环的代码是用来寻找当前移动积木的最左上角的那个方块所对应的矩阵中的的位置 */

	for(i = 2 ; i < ROWS ; i++)
	{
	   for(j = 0 ;j < COLS ;j++)
	   {
		   if (BlockArray[i][j].Flag_Is_Moveable == TRUE)
			   break;
	   }
	   if (j < COLS )
		  break;
	}      
	
	/* @ @ @
	       @ */ /*当前积木所处的形态*/
	if( BlockArray[ i ][j + 1].Flag_Is_Moveable == TRUE && \
		BlockArray[ i ][j + 2].Flag_Is_Moveable == TRUE )
	{
	
		if ( i == 2 ) return; // 判定积木是不是在最上面一行

		if ( BlockArray[i + 1][  j  ].Flag_Is_Filled == TRUE  || \
			 BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE) 
 	         return;

		if ( BlockArray[i - 1][j + 1].Flag_Is_Filled == TRUE || \
			 BlockArray[i - 1][j + 2].Flag_Is_Filled == TRUE)
			 return;

		{
			MoveBlockFromSrcToDes(BlockArray, i, j, i + 1, j + 1);
			DrawBlock(hdc, i + 1, j + 1, 6);
			EraseBlock(hdc, i, j);

			MoveBlockFromSrcToDes(BlockArray, i, j + 2, i - 1, j + 1);
			DrawBlock(hdc, i - 1, j + 1, 6);
			EraseBlock(hdc,i,     j + 2);

			MoveBlockFromSrcToDes(BlockArray, i + 1, j + 2, i - 1, j + 2);
			DrawBlock(hdc, i - 1, j + 2, 6);
			EraseBlock(hdc, i + 1, j + 2 );
		}
	ReleaseDC(hwnd,hdc);
	return ;
	}
	/* @ @
	   @
	   @  */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][  j  ].Flag_Is_Moveable == TRUE && \
		 BlockArray[  i  ][j + 1].Flag_Is_Moveable == TRUE)
	{
		if ( i == 2 ) return;
		if ( j == 0 ) return;

		if ( BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE || \
			 BlockArray[i + 1][j - 1].Flag_Is_Filled == TRUE )
 		     return;

		if ( BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE)
			 return;

		if ( BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE || \
			 BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE )
			 return;

		{
			MoveBlockFromSrcToDes(BlockArray, i, j, i + 1, j - 1);
			DrawBlock(hdc, i + 1, j - 1, 6);
			EraseBlock(hdc, i, j);

			MoveBlockFromSrcToDes(BlockArray, i, j + 1, i, j - 1);
			DrawBlock (hdc, i,   j - 1, 6);
			EraseBlock(hdc, i, j + 1);

			MoveBlockFromSrcToDes(BlockArray, i + 2, j , i + 1, j + 1);
			DrawBlock(hdc, i + 1,  j + 1, 6);
			EraseBlock(hdc, i + 2, j);
		}
	ReleaseDC(hwnd,hdc);
	return ;	
	}
  /*  @
      @ @ @ */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][  j  ].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 1][j + 1].Flag_Is_Moveable == TRUE  )
	{
		if( i == ROWS - 2) return ;

		if( BlockArray[i + 2][ j  ].Flag_Is_Filled == TRUE )
		    return;

		if(BlockArray[i + 2][  j  ].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[  i  ][j + 1].Flag_Is_Filled == TRUE || \
		   BlockArray[  i  ][j + 2].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i, j, i + 2, j);
			DrawBlock(hdc, i + 2, j, 6);
			EraseBlock(hdc,i, j);

			MoveBlockFromSrcToDes(BlockArray,i + 1, j, i + 2, j + 1);
			DrawBlock(hdc, i + 2, j + 1,6);
			EraseBlock(hdc,i + 1, j);

			MoveBlockFromSrcToDes(BlockArray,i + 1, j + 2, i , j + 1);
			DrawBlock(hdc, i, j + 1, 6);
			EraseBlock(hdc,i + 1, j + 2);
		}
	ReleaseDC(hwnd,hdc);
	return ;
	}
	/*   @
	     @
	   @ @ */ /*当前积木所处的形态*/
	if ( BlockArray[i + 1][  j  ].Flag_Is_Moveable == TRUE && \
		 BlockArray[i + 2][j - 1].Flag_Is_Moveable == TRUE)
	{
		if( j == COLS - 1) return ;

		if(BlockArray[  i  ][j - 1].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 1][j - 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE )
		   return;

		if(BlockArray[i + 2][j + 1].Flag_Is_Filled == TRUE || \
		   BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE)
		   return;

		{
			MoveBlockFromSrcToDes(BlockArray,i, j, i + 1, j - 1);
			DrawBlock(hdc, i + 1, j - 1, 6);
			EraseBlock(hdc,i, j);

			MoveBlockFromSrcToDes(BlockArray,i + 2, j - 1, i + 2, j + 1);
			DrawBlock(hdc, i + 2, j + 1, 6);
			EraseBlock(hdc,i + 2, j - 1);

			MoveBlockFromSrcToDes(BlockArray,i + 2, j, i + 1, j + 1);
			DrawBlock(hdc, i + 1, j + 1,6);
			EraseBlock(hdc,i + 2, j);
		}
	ReleaseDC(hwnd,hdc);
	return;
	}
    
	
}

void RefreshWindow(HWND hWnd,BLOCK BlockArray[ROWS][COLS])
{
	int i,j;
	HDC hdc;
	hdc=GetDC(hWnd);

	DrawBackground(hdc);

    for(i = 0;i < ROWS; i++)
	   for(j = 0; j < COLS; j++)
	  	  if(BlockArray[i][j].Flag_Is_Filled)
    		 DrawBlock(hdc,i,j,BlockArray[i][j].BlockStyle);
		
	ReleaseDC(hWnd,hdc);
}

void ChangeBlockStyleToGray(BLOCK BlockArray[ROWS][COLS])
{
	int i,j;

	for(i = ROWS-1;i >= 2;i--)
	   for(j = 0; j <= COLS - 1; j++)
	  	  if(BlockArray[i][j].Flag_Is_Filled)
    		 BlockArray[i][j].BlockStyle = 7;

	for(i = 2;i <= 3; i ++)
	   for(j = 0;j <= COLS - 1;j ++)
	   {
	  	  BlockArray[i][j].Flag_Is_Filled = FALSE;
	   }
}
LRESULT CALLBACK HyperLinkProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	HINSTANCE hInst;
	HCURSOR   hCursorHand;
	long      result;
	switch(uMsg)
	{
	case WM_LBUTTONUP:
		 switch(GetDlgCtrlID(hWnd))
		 {
		 case IDC_EMAIL:
		      ShellExecute(0,0,"mailto:xiejacky@etang.com",0,0,0);
		      break;
		 case IDC_HOMEPAGE:
		      ShellExecute(0,0,"http://www.hunau.net",0,0,0);
			  break;
		 }
		 break;
    case WM_NCHITTEST:
		 return (TRUE);
		 break;
    case WM_MOUSEMOVE:
		 hInst=GetModuleHandle(NULL);
		 hCursorHand=LoadCursor(hInst,"HandCur");
		 SetCursor(hCursorHand);
    	 break;
	default:
		 result=GetWindowLong(hWnd,GWL_USERDATA);
		 return CallWindowProc((WNDPROC) result, hWnd, uMsg, wParam, lParam);
	}
	return (0);

}
BOOL CALLBACK AboutDialogProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam)
{
	HINSTANCE hInst;
	long      result;
    HWND      hWndTemp;
	HFONT     hFontStatic;
	LOGFONT   LogicFontText;
	switch(uMsg)
	{
	case WM_INITDIALOG:
		 hInst=GetModuleHandle(NULL);
		 SendMessage(hWnd,WM_SETICON,(WPARAM)(ICON_SMALL),
			         (LPARAM)LoadIcon(hInst,"TerrisSmall"));

		 hWndTemp=GetDlgItem(hWnd,IDC_EMAIL);
		 result=(long)SetWindowLong(hWndTemp,GWL_WNDPROC,(long)HyperLinkProc);
		 SetWindowLong(hWndTemp,GWL_USERDATA,result);

		 hWndTemp=GetDlgItem(hWnd,IDC_HOMEPAGE);
		 result=SetWindowLong(hWndTemp,GWL_WNDPROC,(long)HyperLinkProc);
		 SetWindowLong(hWndTemp,GWL_USERDATA,result);
		 break;
    case WM_CTLCOLORSTATIC:
		 if (GetDlgCtrlID((HWND)lParam)==IDC_EMAIL || GetDlgCtrlID((HWND)lParam)==IDC_HOMEPAGE)
		 {
			hFontStatic=(HFONT)SendMessage((HWND)lParam,WM_GETFONT,0,0);
            GetObject(hFontStatic,sizeof(LOGFONT),&LogicFontText);
            LogicFontText.lfUnderline=TRUE;
			hFontStatic=CreateFontIndirect(&LogicFontText);
			SelectObject((HDC)wParam,hFontStatic);
			SetTextColor((HDC)wParam,RGB(0,0,255));
			SetBkColor((HDC)wParam,GetSysColor(COLOR_MENU));
            DeleteObject(hFontStatic);
		    return	(long)GetStockObject(NULL_BRUSH);
		 } 
		 break;
	case WM_COMMAND:
		 if((HIWORD(wParam)==IDOK)&&(LOWORD(wParam)==BN_CLICKED))
			 EndDialog(hWnd,TRUE);
	case WM_CLOSE:
		 EndDialog(hWnd,TRUE);
		 break;
	default:
		  return(FALSE);
	}
	return (TRUE);
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -