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