|
![]() | 作者: gaojixiang [gaojixiang]
![]() |
登录 |
帮帮吗 |
地主 发表时间: 05-01-01 12:37 |
![]() | 回复: leonshoh [leonshoh] ![]() |
登录 |
/// ///terris.cpp /// # include <windows.h> # include <time.h> # include "terris.h" const char MenuName[]=TEXT("TerrisMenu"); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInst, LPSTR CommandLine,int CommandShow) { MSG msg; if(!InitClass(hInstance)) return (0); if(!InitWindow(hInstance)) return (0); while(GetMessage(&msg,NULL,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return (msg.wParam); } BOOL InitClass(HINSTANCE hInstMain) { WNDCLASSEX wc; wc.cbSize=sizeof(WNDCLASSEX); wc.style=CS_HREDRAW | CS_VREDRAW; wc.lpfnWndProc=(WNDPROC)(WndProc); wc.cbClsExtra=0; wc.cbWndExtra=0; wc.hInstance=hInstMain; wc.hIcon=LoadIcon(hInstMain,"TerrisBig"); wc.hIconSm=LoadIcon(hInstMain,"TerrisSmall"); wc.hCursor=LoadCursor(NULL,IDC_ARROW); wc.hbrBackground=(HBRUSH)(COLOR_BTNFACE+1); wc.lpszMenuName=MenuName; wc.lpszClassName="Terris"; if (RegisterClassEx(&wc)) return (TRUE); else return (FALSE); } BOOL InitWindow(HINSTANCE hInstMain) { HWND hwnd=CreateWindowEx(WS_EX_CLIENTEDGE, "Terris", "Terris", WS_SYSMENU | WS_CAPTION | WS_MINIMIZEBOX | WS_VISIBLE, CW_USEDEFAULT,CW_USEDEFAULT,300,460, NULL,NULL,hInstMain,NULL); if(hwnd) return (TRUE); else return (FALSE); } LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; static HINSTANCE hInst; static BLOCK BlockArray[ROWS][COLS]; static TimerInterval; static bool FlagGameJustStart = TRUE; switch(uMsg) { case WM_CREATE: hInst=((LPCREATESTRUCT)lParam)->hInstance; TimerInterval = EasyInterval; CheckMenuRadioItem( GetMenu(hWnd), IDM_EASY,IDM_DIFFICULT,IDM_EASY,MF_BYCOMMAND); break; case WM_TIMER: if(NeedGenerateNewBlock(BlockArray)) { KillFullLine(hWnd,BlockArray); if(GameOver(BlockArray)) { KillTimer(hWnd,TIMERID); EnableMenuItem( GetMenu(hWnd ),IDM_START,MF_ENABLED); EnableMenuItem( GetMenu(hWnd ),IDM_PAUSE,MF_GRAYED); FlagGameJustStart = TRUE; ChangeBlockStyleToGray(BlockArray); RefreshWindow(hWnd,BlockArray); MessageBox(hWnd,"对不起,请再来一盘","注意",MB_OK | MB_ICONEXCLAMATION); } else { MoveBlockFromPreviewToGameArea(hWnd,BlockArray); GenerateNewBlock(hWnd,BlockArray); } } else { if (CanBlockMoveDown(BlockArray)) MoveBlockDown(hWnd,BlockArray); else { Moveable2Stable(BlockArray); } } break; case WM_KEYDOWN: if ( GetMenuState(GetMenu(hWnd), IDM_START, MF_BYCOMMAND) != MF_GRAYED ) break; switch(wParam) { case VK_RIGHT: if(CanBlockMoveRight(BlockArray)) { MoveBlockRight(hWnd,BlockArray); } break; case VK_LEFT: if(CanBlockMoveLeft(BlockArray)) { MoveBlockLeft(hWnd,BlockArray); } break; case VK_DOWN: if(CanBlockMoveDown(BlockArray)) { MoveBlockDown(hWnd,BlockArray); } break; case VK_UP: switch(JudgeBlockStyle(BlockArray)) { case 0: RotateStyleZero(hWnd,BlockArray); break; case 1: RotateStyleOne(hWnd,BlockArray); break; case 2: RotateStyleTwo(hWnd,BlockArray); break; case 3: RotateStyleThree(hWnd,BlockArray); break; case 4: RotateStyleFour(hWnd,BlockArray); break; case 5: break; case 6: RotateStyleSix(hWnd,BlockArray); break; } break; } break; case WM_COMMAND: switch (LOWORD (wParam)) { case IDM_START: if ( FlagGameJustStart == TRUE) { InitializeBlock( BlockArray ); RefreshWindow(hWnd, BlockArray ); FlagGameJustStart = FALSE; } SetTimer(hWnd,TIMERID,TimerInterval,NULL); EnableMenuItem( GetMenu(hWnd), IDM_START, MF_GRAYED); EnableMenuItem( GetMenu(hWnd), IDM_PAUSE, MF_ENABLED); break; case IDM_PAUSE: KillTimer(hWnd,TIMERID); EnableMenuItem( GetMenu(hWnd), IDM_START,MF_ENABLED); EnableMenuItem( GetMenu(hWnd), IDM_PAUSE,MF_GRAYED); break; case IDM_EXIT: if ( GetMenuState(GetMenu(hWnd), IDM_START, MF_BYCOMMAND) == MF_GRAYED) KillTimer( hWnd,TIMERID); DestroyWindow(hWnd); break; case IDM_EASY: TimerInterval = EasyInterval; CheckMenuRadioItem( GetMenu(hWnd),IDM_EASY,IDM_DIFFICULT,IDM_EASY,MF_BYCOMMAND); if(GetMenuState(GetMenu(hWnd),IDM_START,MF_BYCOMMAND) == MF_GRAYED) { KillTimer(hWnd,TIMERID); SetTimer(hWnd,TIMERID,TimerInterval,NULL); } break; case IDM_MEDIUM: TimerInterval = MediumInterval; CheckMenuRadioItem( GetMenu(hWnd),IDM_EASY,IDM_DIFFICULT,IDM_MEDIUM,MF_BYCOMMAND); if(GetMenuState(GetMenu(hWnd),IDM_START,MF_BYCOMMAND) == MF_GRAYED) { KillTimer(hWnd,TIMERID); SetTimer(hWnd,TIMERID,TimerInterval,NULL); } break; case IDM_DIFFICULT: TimerInterval = DifficultInterval; CheckMenuRadioItem( GetMenu(hWnd),IDM_EASY,IDM_DIFFICULT,IDM_DIFFICULT,MF_BYCOMMAND); if(GetMenuState(GetMenu(hWnd),IDM_START,MF_BYCOMMAND) == MF_GRAYED) { KillTimer(hWnd,TIMERID); SetTimer(hWnd,TIMERID,TimerInterval,NULL); } break; case IDM_ABOUT: DialogBoxParam(hInst,"DLG_ABOUT",hWnd,\ (DLGPROC)AboutDialogProc,(LPARAM)0); break; } break; case WM_PAINT: hdc=BeginPaint(hWnd,&ps); DrawBackground(hdc); RefreshWindow(hWnd,BlockArray); EndPaint(hWnd,&ps); break; case WM_DESTROY: KillTimer(hWnd,TIMERID); PostQuitMessage(0); break; default: return DefWindowProc(hWnd,uMsg,wParam,lParam); } return (0); } void DrawBackground(HDC hdc) { HBRUSH hBrush; POINT pt[8]; pt[0].x = OriginXPos; pt[0].y = OriginYPos + 4 * BLOCKSIZE; pt[1].x = OriginXPos; pt[1].y = OriginYPos + ROWS * BLOCKSIZE; pt[2].x = pt[1].x + COLS * BLOCKSIZE; pt[2].y = pt[1].y; pt[3].x = pt[2].x; pt[3].y = pt[0].y; pt[4].x = pt[3].x + 5; pt[4].y = pt[3].y; pt[5].x = pt[4].x; pt[5].y = pt[2].y + 5; pt[6].x = pt[0].x - 5; pt[6].y = pt[1].y + 5; pt[7].x = pt[6].x; pt[7].y = pt[0].y; SelectObject(hdc,GetStockObject(NULL_PEN)); SelectObject(hdc,GetStockObject(WHITE_BRUSH)); Polygon(hdc,pt,8); SelectObject(hdc,GetStockObject(BLACK_BRUSH)); Polygon(hdc,pt,4); pt[0].x=OriginXPos; pt[0].y=OriginYPos; pt[1].x=pt[0].x + BLOCKSIZE * COLS; pt[1].y=pt[0].y; pt[2].x=pt[1].x; pt[2].y=pt[1].y + BLOCKSIZE * 4; pt[3].x=pt[0].x; pt[3].y=pt[2].y; hBrush=CreateSolidBrush(GetPixel(hdc,0,0)); SelectObject(hdc,hBrush); Polygon(hdc,pt,4); SelectObject(hdc,GetStockObject(BLACK_PEN)); SelectObject(hdc,GetStockObject(NULL_BRUSH)); DeleteObject(hBrush); } void DrawBlock(HDC hdc,int row,int column,int BlockStyle) { POINT pt[4]; COLORREF BrightBrushColor[8]={RGB(255,0,0),RGB(0,255,0),RGB(0,0,255),\ RGB(0,255,255),RGB(255,0,255),RGB(255,255,0),\ RGB(200,200,200),RGB(200,200,200)}; COLORREF MediumBrushColor[8]={RGB(180,0,0),RGB(0,180,0),RGB(0,0,180),\ RGB(0,200,200),RGB(200,0,200),RGB(200,200,0),\ RGB(90,90,90),RGB(140,140,140)}; COLORREF DarkBrushColor[8]={RGB(90,0,0),RGB(0,90,0),RGB(0,0,90),\ RGB(0,90,90),RGB(90,0,90),RGB(90,90,0),\ RGB(40,40,40),RGB(100,100,100)}; HBRUSH hBrushBright,hBrushMedium,hBrushDark; hBrushBright=CreateSolidBrush(BrightBrushColor[BlockStyle]); hBrushMedium=CreateSolidBrush(MediumBrushColor[BlockStyle]); hBrushDark=CreateSolidBrush(DarkBrushColor[BlockStyle]); SelectObject(hdc,GetStockObject(NULL_PEN)); SelectObject(hdc,hBrushBright); pt[0].x=column* BLOCKSIZE + OriginXPos; pt[0].y=row* BLOCKSIZE + OriginYPos; pt[1].x=pt[0].x+BLOCKSIZE; pt[1].y=pt[0].y; pt[2].x=pt[1].x-3; pt[2].y=pt[1].y+3; pt[3].x=pt[0].x+3; pt[3].y=pt[0].y+3; Polygon(hdc,pt,4); pt[0].x=column* BLOCKSIZE + OriginXPos; pt[0].y=row* BLOCKSIZE + OriginYPos; pt[1].x=pt[0].x+3; pt[1].y=pt[0].y+3; pt[3].x=pt[0].x; pt[3].y=pt[0].y+BLOCKSIZE; pt[2].x=pt[3].x+3; pt[2].y=pt[3].y-3; Polygon(hdc,pt,4); SelectObject(hdc,hBrushMedium); pt[0].x=column* BLOCKSIZE + OriginXPos+3; pt[0].y=row* BLOCKSIZE + OriginYPos+3; pt[1].x=column* BLOCKSIZE + OriginXPos+BLOCKSIZE-3; pt[1].y=row* BLOCKSIZE + OriginYPos + 3; pt[2].x=column* BLOCKSIZE + OriginXPos+BLOCKSIZE-3; pt[2].y=row* BLOCKSIZE + OriginYPos+BLOCKSIZE - 3; pt[3].x=column* BLOCKSIZE + OriginXPos +3; pt[3].y=row* BLOCKSIZE + OriginYPos+BLOCKSIZE - 3; Polygon(hdc,pt,4); SelectObject(hdc,hBrushDark); pt[0].x=column* BLOCKSIZE + OriginXPos+BLOCKSIZE; pt[0].y=row* BLOCKSIZE + OriginYPos; pt[1].x=pt[0].x; pt[1].y=pt[0].y+BLOCKSIZE; pt[2].x=pt[1].x - 3; pt[2].y=pt[1].y - 3; pt[3].x=pt[0].x - 3; pt[3].y=pt[0].y + 3; Polygon(hdc,pt,4); pt[0].x=column* BLOCKSIZE + OriginXPos + BLOCKSIZE; pt[0].y=row* BLOCKSIZE + OriginYPos + BLOCKSIZE; pt[1].x=pt[0].x-BLOCKSIZE; pt[1].y=pt[0].y; pt[2].x=pt[1].x + 3; pt[2].y=pt[1].y - 3; pt[3].x=pt[0].x - 3; pt[3].y=pt[0].y - 3; Polygon(hdc,pt,4); SelectObject(hdc,GetStockObject(NULL_BRUSH)); SelectObject(hdc,GetStockObject(BLACK_PEN)); DeleteObject(hBrushBright); DeleteObject(hBrushMedium); DeleteObject(hBrushDark); } void InitializeBlock(BLOCK BlockArray[ROWS][COLS]) { int i, j; for (i = 0; i < ROWS; i ++) for (j = 0; j < COLS; j ++) { BlockArray[i][j].Flag_Is_Filled = FALSE; BlockArray[i][j].Flag_Is_Moveable = FALSE; BlockArray[i][j].BlockStyle = 0; } } void EraseBlock(HDC hdc,int row,int column) { POINT pt[4]; HBRUSH hBrush; pt[0].x=BLOCKSIZE * column + OriginXPos; pt[0].y=BLOCKSIZE * row +OriginYPos; pt[1].x=pt[0].x+BLOCKSIZE; pt[1].y=pt[0].y; pt[2].x=pt[1].x; pt[2].y=pt[1].y+BLOCKSIZE; pt[3].x=pt[0].x; pt[3].y=pt[0].y+BLOCKSIZE; if ((row >= 0) && ( row <= 3)) { hBrush=CreateSolidBrush(GetPixel(hdc,0,0)); SelectObject(hdc,GetStockObject(NULL_PEN)); SelectObject(hdc,hBrush); Polygon(hdc,pt,4); SelectObject(hdc,GetStockObject(BLACK_PEN)); SelectObject(hdc,GetStockObject(NULL_BRUSH)); DeleteObject(hBrush); } else { SelectObject(hdc,GetStockObject(NULL_PEN)); SelectObject(hdc,GetStockObject(BLACK_BRUSH)); Polygon(hdc,pt,4); SelectObject(hdc,GetStockObject(BLACK_PEN)); SelectObject(hdc,GetStockObject(NULL_BRUSH)); } } void MoveBlockFromSrcToDes (BLOCK BlockArray[ROWS][COLS],int SrcRow, int SrcCol, int DesRow, int DesCol) /* 将某一个方块从源地址移到目的地址 */ { BlockArray[DesRow][DesCol].Flag_Is_Filled = BlockArray[SrcRow][SrcCol].Flag_Is_Filled; BlockArray[DesRow][DesCol].Flag_Is_Moveable = BlockArray[SrcRow][SrcCol].Flag_Is_Moveable; BlockArray[DesRow][DesCol].BlockStyle = BlockArray[SrcRow][SrcCol].BlockStyle; BlockArray[SrcRow][SrcCol].Flag_Is_Filled = FALSE; BlockArray[SrcRow][SrcCol].Flag_Is_Moveable = FALSE; BlockArray[SrcRow][SrcCol].BlockStyle = 0; } void MoveBlockFromPreviewToGameArea(HWND hwnd, BLOCK BlockArray[ROWS][COLS]) { int i,j; HDC hdc; hdc = GetDC(hwnd); for (i = 0; i < 2; i ++) for (j = 0 ;j < COLS; j ++) { if (BlockArray[ i ][ j ].Flag_Is_Filled == TRUE) { MoveBlockFromSrcToDes(BlockArray,i, j, i + 2, j + 3 ); DrawBlock(hdc, i + 2,j + 3, BlockArray[i + 2][j + 3 ].BlockStyle); EraseBlock(hdc,i, j); } } ReleaseDC(hwnd,hdc); } void GenerateNewBlock(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { int i,j; HDC hdc; srand( (unsigned)time( NULL ) ); switch ( rand()%7 ) { case 0: BlockArray[0][0].BlockStyle=0;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=0;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[0][2].BlockStyle=0;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE; BlockArray[0][3].BlockStyle=0;BlockArray[0][3].Flag_Is_Filled=TRUE;BlockArray[0][3].Flag_Is_Moveable=TRUE; break; case 1: BlockArray[0][1].BlockStyle=1;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[0][2].BlockStyle=1;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE; BlockArray[1][0].BlockStyle=1;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE; BlockArray[1][1].BlockStyle=1;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE; break; case 2: BlockArray[0][0].BlockStyle=2;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=2;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[0][2].BlockStyle=2;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE; BlockArray[1][0].BlockStyle=2;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE; break; case 3: BlockArray[0][0].BlockStyle=3;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=3;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[0][2].BlockStyle=3;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE; BlockArray[1][1].BlockStyle=3;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE; break; case 4: BlockArray[0][0].BlockStyle=4;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=4;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[1][1].BlockStyle=4;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE; BlockArray[1][2].BlockStyle=4;BlockArray[1][2].Flag_Is_Filled=TRUE;BlockArray[1][2].Flag_Is_Moveable=TRUE; break; case 5: BlockArray[0][0].BlockStyle=5;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=5;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[1][0].BlockStyle=5;BlockArray[1][0].Flag_Is_Filled=TRUE;BlockArray[1][0].Flag_Is_Moveable=TRUE; BlockArray[1][1].BlockStyle=5;BlockArray[1][1].Flag_Is_Filled=TRUE;BlockArray[1][1].Flag_Is_Moveable=TRUE; break; case 6: BlockArray[0][0].BlockStyle=6;BlockArray[0][0].Flag_Is_Filled=TRUE;BlockArray[0][0].Flag_Is_Moveable=TRUE; BlockArray[0][1].BlockStyle=6;BlockArray[0][1].Flag_Is_Filled=TRUE;BlockArray[0][1].Flag_Is_Moveable=TRUE; BlockArray[0][2].BlockStyle=6;BlockArray[0][2].Flag_Is_Filled=TRUE;BlockArray[0][2].Flag_Is_Moveable=TRUE; BlockArray[1][2].BlockStyle=6;BlockArray[1][2].Flag_Is_Filled=TRUE;BlockArray[1][2].Flag_Is_Moveable=TRUE; break; } hdc=GetDC(hwnd); for(i=0;i<2;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); } BOOL GameOver(BLOCK Block[ROWS][COLS]) { int i; BOOL Flag=FALSE; for(i=0;i<COLS;i++) if (Block[4][i].Flag_Is_Moveable==FALSE && Block[4][i].Flag_Is_Filled==TRUE) Flag=TRUE; return (Flag); } BOOL NeedGenerateNewBlock(BLOCK Block[ROWS][COLS]) { int i,j; BOOL Flag=TRUE; for(i = 2;i < ROWS ;i ++) for(j = 0;j < COLS; j ++) if (Block[i][j].Flag_Is_Moveable==TRUE) Flag=FALSE; return (Flag); } BOOL CanBlockMoveDown(BLOCK Block[ROWS][COLS]) { int i,j; int Flag=TRUE; for(i = 2; i < ROWS; i++) for(j = 0; j < COLS; j++) { if (Block[i][j].Flag_Is_Moveable==TRUE) { if (i==ROWS-1) Flag=FALSE; if(Block[i+1][j].Flag_Is_Filled==TRUE && Block[i+1][j].Flag_Is_Moveable==FALSE) Flag=FALSE; } } return (Flag); } BOOL CanBlockMoveRight(BLOCK BlockArray[ROWS][COLS]) { int i,j; int Flag=TRUE; for(i = 2 ;i < ROWS; i ++) for(j = 0 ; j < COLS; j ++) { if (BlockArray[i][j].Flag_Is_Moveable==TRUE) { if (j==COLS-1) Flag=FALSE; if(BlockArray[i][j+1].Flag_Is_Filled==TRUE && BlockArray[i][j+1].Flag_Is_Moveable==FALSE) Flag=FALSE; } } return (Flag); } BOOL CanBlockMoveLeft(BLOCK BlockArray[ROWS][COLS]) { int i,j; int Flag=TRUE; for(i = 2; i < ROWS; i ++) for(j = 0;j <COLS ;j ++) { if (BlockArray[i][j].Flag_Is_Moveable==TRUE) { if (j==0) Flag=FALSE; if(BlockArray[i][j-1].Flag_Is_Filled==TRUE && BlockArray[i][j-1].Flag_Is_Moveable==FALSE) Flag=FALSE; } } return (Flag); } void Moveable2Stable(BLOCK Block[ROWS][COLS]) { int i,j; for(i = 2; i < ROWS; i++) for(j = 0;j < COLS; j++) if (Block[i][j].Flag_Is_Filled==TRUE) Block[i][j].Flag_Is_Moveable=FALSE; } void KillFullLine(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { HDC hdc; int i,j; int m,n; int Flag; hdc=GetDC(hwnd); for(i=ROWS-1;i >= 4;i--) { Flag=TRUE; for(j=0;j<COLS;j++) if (BlockArray[i][j].Flag_Is_Filled == FALSE) Flag=FALSE; if(Flag==TRUE) { for(m=i;m >= 4;m--) for(n=0;n<COLS;n++) { MoveBlockFromSrcToDes(BlockArray,m - 1, n, m, n); if(BlockArray[m][n].Flag_Is_Filled==TRUE) DrawBlock(hdc,m,n,BlockArray[m][n].BlockStyle); else EraseBlock(hdc,m,n); } i++; } } ReleaseDC(hwnd,hdc); } void MoveBlockDown(HWND hwnd,BLOCK Block[ROWS][COLS]) { int i,j; HDC hdc; hdc=GetDC(hwnd); for(i = ROWS-1;i >= 2;i--) for(j=0;j<COLS;j++) if (Block[i][j].Flag_Is_Moveable==TRUE) { MoveBlockFromSrcToDes(Block,i,j,i+1,j); DrawBlock(hdc,i+1,j,Block[i+1][j].BlockStyle); EraseBlock(hdc,i,j); } ReleaseDC(hwnd,hdc); } void MoveBlockRight(HWND hwnd, BLOCK BlockArray[ROWS][COLS]) { int i,j; HDC hdc; hdc=GetDC(hwnd); for(i = COLS-1 ;i >= 0; i--) for(j = 2;j < ROWS; j++) { if (BlockArray[j][i].Flag_Is_Moveable==TRUE) { MoveBlockFromSrcToDes(BlockArray,j,i,j,i+1); DrawBlock(hdc,j,i+1,BlockArray[j][i+1].BlockStyle); EraseBlock(hdc,j,i); } } ReleaseDC(hwnd,hdc); } void MoveBlockLeft(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { int i,j; HDC hdc; hdc=GetDC(hwnd); for(i = 0 ;i < COLS; i++) for(j = 2;j < ROWS; j++) { if (BlockArray[j][i].Flag_Is_Moveable==TRUE) { MoveBlockFromSrcToDes(BlockArray,j,i,j,i-1); DrawBlock(hdc,j,i-1,BlockArray[j][i-1].BlockStyle); EraseBlock(hdc,j,i); } } ReleaseDC(hwnd,hdc); } int JudgeBlockStyle(BLOCK BlockArray[ROWS][COLS]) { int style; int i,j; for(i = 2; i < ROWS ; i++) { for(j = 0; j < COLS; j++) if(BlockArray[i][j].Flag_Is_Moveable==TRUE) { style=BlockArray[i][j].BlockStyle; break; } if (j < COLS) break; } return (style); } void RotateStyleZero(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { int i,j; int m,n; HDC hdc; hdc=GetDC(hwnd); 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 (i >= ROWS -2) return ; if (BlockArray[i-1][j].Flag_Is_Filled==TRUE || BlockArray[i-1][j+1].Flag_Is_Filled==TRUE) return ; for(m= i + 1 ;m <= i + 2 ; m++) { for (n = j + 1; n <= j + 3; n++ ) { if ( BlockArray[m][n].Flag_Is_Filled == TRUE ) return ; } } { MoveBlockFromSrcToDes(BlockArray, i, j, i - 1,j + 1); DrawBlock(hdc,i-1,j+1,0); EraseBlock(hdc,i,j); MoveBlockFromSrcToDes(BlockArray,i,j + 2,i + 1,j + 1); DrawBlock(hdc,i + 1, j + 1,0); EraseBlock(hdc,i,j + 2); MoveBlockFromSrcToDes(BlockArray, i,j + 3, i + 2,j + 1); DrawBlock(hdc,i + 2, j + 1,0); EraseBlock(hdc,i,j + 3); } } else { if (j >= COLS - 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 ; for(m= i + 1 ;m <= i + 3 ; m++) { for (n = j + 1; n <= j + 2; n++ ) { if ( BlockArray[m][n].Flag_Is_Filled == TRUE ) return ; } } { MoveBlockFromSrcToDes(BlockArray, i, j, i + 1,j - 1); DrawBlock(hdc,i + 1,j - 1,0); EraseBlock(hdc,i,j); MoveBlockFromSrcToDes(BlockArray,i + 2,j ,i + 1,j + 1); DrawBlock(hdc,i + 1, j + 1,0); EraseBlock(hdc,i + 2, j ); MoveBlockFromSrcToDes(BlockArray, i + 3 , j , i + 1,j + 2); DrawBlock( hdc, i + 1, j + 2,0); EraseBlock( hdc , i + 3, j ); } } ReleaseDC(hwnd,hdc); } void RotateStyleOne(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { int i, j; int m ; HDC hdc; hdc=GetDC(hwnd); 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( i >= ROWS - 2) return; if( BlockArray[i - 1][ j ].Flag_Is_Filled == TRUE) return; if( BlockArray[i - 1][j + 1].Flag_Is_Filled == TRUE) return; if( BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE ) return; for(m = j -1 ; m <= j + 1; m++) if (BlockArray[i + 2][ m ].Flag_Is_Filled == TRUE ) return; { MoveBlockFromSrcToDes(BlockArray, i + 1, j ,i -1,j); DrawBlock(hdc, i - 1, j, 1); EraseBlock(hdc,i + 1, j ); MoveBlockFromSrcToDes(BlockArray, i + 1, j - 1, i + 1,j + 1); DrawBlock(hdc, i + 1, j + 1, 1); EraseBlock(hdc,i + 1, j - 1); } } else { if ( i >= ROWS -3) return; if ( j < 1 ) return; if ( BlockArray[ i ][j + 1].Flag_Is_Filled == TRUE) return; if ( BlockArray[i + 2][ j ].Flag_Is_Filled == TRUE) return; if ( BlockArray[i + 2][j - 1].Flag_Is_Filled == TRUE) return; for(m = j ; m <= j + 1; m ++) if (BlockArray[i + 3][ m ].Flag_Is_Filled == TRUE ) return; { MoveBlockFromSrcToDes(BlockArray, i, j, i + 2, j); DrawBlock(hdc, i + 2, j, 1); EraseBlock(hdc, i, j); MoveBlockFromSrcToDes(BlockArray, i + 2, j + 1, i + 2, j - 1); DrawBlock(hdc, i + 2,j - 1,1); EraseBlock(hdc,i + 2,j + 1); } } ReleaseDC(hwnd,hdc); } void RotateStyleTwo(HWND hwnd,BLOCK BlockArray[ROWS][COLS]) { int i, j; int m ; HDC hdc; hdc=GetDC(hwnd); 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 + 1][j].Flag_Is_Moveable == TRUE ) { if ( i == 2 ) return; // 叛定积木是不是在最上面一行 if ( 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; 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, 2); EraseBlock(hdc, i, j); MoveBlockFromSrcToDes(BlockArray, i, j + 2, i - 1, j + 1); DrawBlock(hdc, i - 1, j + 1, 2); EraseBlock(hdc, i, j + 2); MoveBlockFromSrcToDes(BlockArray, i + 1, j, i + 1, j + 2); DrawBlock(hdc, i + 1, j + 2, 2); EraseBlock(hdc, i + 1, j ); } ReleaseDC(hwnd,hdc); return ; } if ( BlockArray[i + 1][ j ].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 + 3][ j ].Flag_Is_Filled == TRUE || \ BlockArray[i + 1][j + 1].Flag_Is_Filled == TRUE ) return; if ( BlockArray[ i ][j + 1].Flag_Is_Filled == TRUE) return; for(m = i; m < i + 3; m ++) if( BlockArray[ m ][j + 2].Flag_Is_Filled == TRUE) return; { MoveBlockFromSrcToDes(BlockArray, i, j, i + 1, j - 1); DrawBlock(hdc, i + 1, j - 1, 2); EraseBlock(hdc, i, j); MoveBlockFromSrcToDes(BlockArray, i + 2, j, i + 1, j + 1); DrawBlock (hdc, i + 1, j + 1, 2); EraseBlock(hdc, i + 2, j); 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(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(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(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: MessageBox(NULL,"邮箱破了",NULL,MB_OK); break; case IDC_HOMEPAGE: MessageBox(NULL,"本人No Money,no girl",NULL,MB_OK); 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); } |
B1层 发表时间: 05-01-08 12:08 |
![]() | 回复: leonshoh [leonshoh] ![]() |
登录 |
// //terris.h // #ifndef _TERRIS_H #define _TERRIS_H # define IDM_START 100 # define IDM_PAUSE 101 # define IDM_EXIT 102 # define IDM_EASY 200 # define IDM_MEDIUM 201 # define IDM_DIFFICULT 202 # define IDM_ABOUT 300 #define IDC_EMAIL 2000 #define IDC_HOMEPAGE 2001 #define IDC_STATIC -1 //数据常量 # define BLOCKSIZE 15 # define ROWS 24 # define COLS 10 # define OriginXPos 8 # define OriginYPos 30 # define TIMERID 1 # define EasyInterval 300 # define MediumInterval 200 # define DifficultInterval 100 typedef struct{ BOOL Flag_Is_Moveable; BOOL Flag_Is_Filled; int BlockStyle; }BLOCK; void DrawBackground(HDC); void DrawBlock(HDC, int, int, int); void DrawGrayBlock(HDC, int, int); void EraseBlock(HDC, int, int); void InitializeBlock(BLOCK BlockArray[ROWS][COLS]); BOOL GameOver(BLOCK BlockArray[ROWS][COLS]); void GenerateNewBlock(HWND,BLOCK BlockArray[ROWS][COLS]); BOOL NeedGenerateNewBlock(BLOCK Block[ROWS][COLS]); void KillFullLine(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); BOOL CanBlockMoveDown(BLOCK Block[ROWS][COLS]); BOOL CanBlockMoveRight(BLOCK BlockArray[ROWS][COLS]); BOOL CanBlockMoveLeft(BLOCK BlockArray[ROWS][COLS]); void MoveBlockFromSrcToDes (BLOCK BlockArray[ROWS][COLS],int SrcRow, int SrcCol, int DesRow, int DesCol); void MoveBlockFromPreviewToGameArea(HWND hwnd, BLOCK BlockArray[ROWS][COLS]); void MoveBlockDown(HWND hwnd,BLOCK Block[ROWS][COLS]); void MoveBlockRight(HWND hwnd, BLOCK BlockArray[ROWS][COLS]); void MoveBlockLeft(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); void Moveable2Stable(BLOCK Block[ROWS][COLS]); void RefreshWindow(HWND hWnd,BLOCK BlockArray[ROWS][COLS]); int JudgeBlockStyle(BLOCK BlockArray[ROWS][COLS]); void ChangeBlockStyleToGray(BLOCK BlockArray[ROWS][COLS]); void RotateStyleZero(HWND,BLOCK BlockArray[ROWS][COLS]); void RotateStyleOne(HWND,BLOCK BlockArray[ROWS][COLS]); void RotateStyleTwo(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); void RotateStyleThree(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); void RotateStyleFour(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); void RotateStyleSix(HWND hwnd,BLOCK BlockArray[ROWS][COLS]); BOOL InitClass(HINSTANCE); BOOL InitWindow(HINSTANCE); LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM); BOOL CALLBACK AboutDialogProc (HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); LRESULT CALLBACK HyperLinkProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); #endif |
B2层 发表时间: 05-01-08 12:11 |
![]() | 回复: leonshoh [leonshoh] ![]() |
登录 |
// // 资源文件 rsrc.rc // TERRISMENU MENU DISCARDABLE BEGIN POPUP "Game" BEGIN MENUITEM "开始", IDM_START MENUITEM "暂停", IDM_PAUSE, GRAYED MENUITEM SEPARATOR MENUITEM "退出", IDM_EXIT END POPUP "Level" BEGIN MENUITEM "简单", IDM_EASY MENUITEM "中级", IDM_MEDIUM MENUITEM "难", IDM_DIFFICULT END POPUP "Help" BEGIN MENUITEM "关于本软件", IDM_ABOUT END END DLG_ABOUT DIALOG DISCARDABLE 0, 0, 168, 94 STYLE DS_MODALFRAME | DS_3DLOOK | DS_CENTER | WS_VISIBLE | WS_CAPTION | WS_SYSMENU CAPTION "关于Terris" FONT 9, "宋体" BEGIN CTEXT "【Terris】Ver 1.0 Beta",IDC_STATIC,42,6,90,9 LTEXT "No Money,no girl,no job,I have nothing...",IDC_STATIC,46,18,100,9 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,42,166,1 LTEXT "Homepage:No Homepage,我是穷人,没主页,没钱",IDC_HOMEPAGE,62,49,86,9 LTEXT "E-Mail:申请不到,没钱上网",IDC_EMAIL,62,60,78,9 CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,1,72,166,1 DEFPUSHBUTTON "确定",IDOK,62,78,46,12 ICON "TERRISSMALL",IDC_STATIC,10,17,20,20 END |
B3层 发表时间: 05-01-08 12:16 |
![]() | 回复: leonshoh [leonshoh] ![]() |
登录 |
SDK写的Terris,资源文件的图标请大家随便找一个换上编译就可以了 cl /c terris.cpp rc rsrc.rc link terris.obj rsrc.res /subsystem:windows /out:terris.exe ////////////////////////////////////////// // No money ,No girl,No job ////////////////////////////////////////// |
B4层 发表时间: 05-01-08 12:19 |
|
20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon
粤ICP备05087286号