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

📄 i_gov1.cpp

📁 一个用SDK实现的俄罗斯方块程序,比较简单地实现基本应用功能
💻 CPP
📖 第 1 页 / 共 2 页
字号:
						sq.ps[i].x = xFirstUnitPos+1;
						sq.ps[i].y = 0;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
					else 
					{
						sq.ps[i].x = xFirstUnitPos+i-1;
						sq.ps[i].y = 1;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
				}

				break;

			/* @@
			    @@ */
			case 4:
				sq.type = 4;
				for( i=0;i<4;i++)
				{
					if (i==0 || i==1 )
					{
						sq.ps[i].x = xFirstUnitPos+i;
						sq.ps[i].y = 0;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
					else 
					{
						sq.ps[i].x = xFirstUnitPos+i-1;
						sq.ps[i].y = 1;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
				}
				break;

			/* @@
			  @@	*/
			case 5:
				sq.type = 5;
				for( i=0;i<4;i++)
				{
					if (i==0 || i==1 )
					{
						sq.ps[i].x = xFirstUnitPos+i+1;
						sq.ps[i].y = 0;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
					else 
					{
						sq.ps[i].x = xFirstUnitPos+i-2;
						sq.ps[i].y = 1;
						sq.hUnitWnd[i] = CreateWindow("BUTTON",NULL,WS_VISIBLE|WS_CHILD,sq.ps[i].x*UNIT_SIZE,0,
							UNIT_SIZE,UNIT_SIZE,hWnd,NULL,hInst,NULL);
					}
				}
				break;
			
			}
			SetTimer(hWnd,MYTIMER,DIFLEVEL,NULL);
			break;
			
		case WM_KEYDOWN:
			switch(wParam)
			{
			case VK_LEFT:
				for (i=0;i<4;i++)
				{
					if ( sq.ps[i].x-1 < 0 || IsFilled[sq.ps[i].x-1][sq.ps[i].y] == TRUE )   
					return 0; 				
				}
				for (i=0;i<4;i++)
					MoveWindow(sq.hUnitWnd[i],--sq.ps[i].x*UNIT_SIZE,
				        sq.ps[i].y*UNIT_SIZE,UNIT_SIZE,UNIT_SIZE,TRUE);
				break;
			case VK_RIGHT:
				for (i=0;i<4;i++)
				{
					if ( sq.ps[i].x+1 > SQUARE_AMOUNT-1 || IsFilled[sq.ps[i].x+1][sq.ps[i].y] == TRUE )   
					return 0; 				
				}
				for (i=0;i<4;i++)
					MoveWindow(sq.hUnitWnd[i],++sq.ps[i].x*UNIT_SIZE,
				        sq.ps[i].y*UNIT_SIZE,UNIT_SIZE,UNIT_SIZE,TRUE);
				break;
			case VK_DOWN:
				SendMessage(hWnd,WM_TIMER,0,0);
				break;
			
			case VK_SPACE://方块变形
				int shaft;
				switch(sq.type)//确定每个方块的中轴方向
				{
				/* @@@@ */
				case 0:
					shaft = 1;	
					break;

				/* @
			       @@@ */
				case 1:
					shaft = 1;
					break;

				/* @@
			       @@ */
				case 2:
					return 0;
					break;

				/* @
			      @@@*/
				case 3:
					shaft = 2;
					break;

				/* @@
			        @@ */
				case 4:
					shaft = 2;
					break;

				/* @@
			      @@ */
				case 5:
					shaft = 0;
					break;

				}
				
				int offset[4][2];//保存每个unit和中心轴模块的距离,以判断所在象限和区域
				for (i=0;i<4;i++)
				{
					offset[i][0] = sq.ps[i].x - sq.ps[shaft].x;
					offset[i][1] = sq.ps[i].y - sq.ps[shaft].y;
				}
				
				Square  sqTemp = sq;
				long tempx,tempy;
 				for (i=0;i<4;i++)
					if ( offset[i][0]>0 && offset[i][1]==0 )//x轴正半轴
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = 0 + sq.ps[shaft].x;
						sqTemp.ps[i].y = tempx + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}else
					if (offset[i][0]>0 && offset[i][1] >0 )//第一象限
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = -tempx + sq.ps[shaft].x;
						sqTemp.ps[i].y = tempy + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}else
					if (offset[i][0] == 0 && offset[i][1] >0 )//y轴正半轴
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = -tempy + sq.ps[shaft].x;
						sqTemp.ps[i].y = 0+ sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}else
					if (offset[i][0]<0 && offset[i][1] >0 )//第二象限
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = tempx + sq.ps[shaft].x;
						sqTemp.ps[i].y = -tempy + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}
					else
					if (offset[i][0]<0 && offset[i][1] == 0 )//x轴负半轴
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = 0 + sq.ps[shaft].x;
						sqTemp.ps[i].y = tempx + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}
					else
					if (offset[i][0]<0 && offset[i][1] <0 )//第三象限
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = -tempx + sq.ps[shaft].x;
						sqTemp.ps[i].y = tempy + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||     
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}
					else
					if (offset[i][0] == 0 && offset[i][1] <0 )//y轴负半轴
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = -tempy + sq.ps[shaft].x;
						sqTemp.ps[i].y = 0 + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}
					else
					if (offset[i][0]>0 && offset[i][1] <0 )//第四象限
					{
						tempx = offset[i][0];
						tempy = offset[i][1]; 
						sqTemp.ps[i].x = tempx + sq.ps[shaft].x;
						sqTemp.ps[i].y = -tempy + sq.ps[shaft].y;
						if ( IsFilled[sqTemp.ps[i].x][sqTemp.ps[i].y] ||
							sqTemp.ps[i].x<0 ||sqTemp.ps[i].x>SQUARE_AMOUNT-1 ||
							sqTemp.ps[i].y<0 ||sqTemp.ps[i].y>SQUARE_AMOUNT-1 )
							return 0;//检测是否越界或是与已有方块冲突
					}
				sq = sqTemp;
				for (i=0;i<4;i++)//重新移动方块
					MoveWindow(sq.hUnitWnd[i],sq.ps[i].x*UNIT_SIZE,sq.ps[i].y*UNIT_SIZE,
						UNIT_SIZE,UNIT_SIZE,TRUE);
				break;
			}
			break;
		case WM_COMMAND:
			hMenu= GetMenu(hWnd);
			wmId    = LOWORD(wParam); 
			wmEvent = HIWORD(wParam); 
			// Parse the menu selections:
			switch (wmId)
			{
				case IDM_ABOUT:
				   DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, hWnd, (DLGPROC)About);
				   break;
				case IDM_START:
					SendMessage(hWnd,WM_NEWSQUARE,NULL,NULL);
					EnableMenuItem(hMenu,IDM_START,MF_DISABLED|MF_GRAYED);
					
					break;
				case IDM_EXIT:
				   DestroyWindow(hWnd);
				   break;
				default:
				   return DefWindowProc(hWnd, message, wParam, lParam);
			}
			break;
		case WM_PAINT:
			hdc = BeginPaint(hWnd, &ps);
			// TODO: Add any drawing code here...
			RECT rt;
			GetClientRect(hWnd, &rt);
			//DrawText(hdc, szHello, strlen(szHello), &rt, DT_CENTER);
			EndPaint(hWnd, &ps);
			break;
		case WM_DESTROY:
			KillTimer(hWnd,MYTIMER);
			PostQuitMessage(0);
			break;
		default:
			return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}

// Mesage handler for about box.
LRESULT CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
	switch (message)
	{
		case WM_INITDIALOG:
				return TRUE;

		case WM_COMMAND:
			if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL) 
			{
				EndDialog(hDlg, LOWORD(wParam));
				return TRUE;
			}
			break;
	}
    return FALSE;
}

⌨️ 快捷键说明

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