📄 terris.cpp
字号:
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 + -