📄 elsgame.c
字号:
#include "Game.h"
#define IDT_TETRIS 100
extern int level;
extern int speed;
extern int time[15];
extern int dtime;
extern int TextX;
extern RECT rctWnd;
static LRESULT WINAPI TetrisWndProc(HWND hWnd,UINT msg,WPARAM wParam,LPARAM lParam)
{
static int tmcount=0;
switch (msg)
{
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc=BeginPaint(hWnd,&ps);
DrawSence(hdc);
EndPaint(hWnd,&ps);
}
return 0;
case WM_TIMER:
if(g_AppData.bIsActive){
int speed=GetDlgItemInt(hWnd,IDC_SPEED,NULL,FALSE);
tmcount+=10;
if(tmcount>=time[speed]){
Fall(hWnd);
tmcount=0;
}
}
break;
case WM_DRAWITEM:
{
//SS_OWNERDRAW
UINT idCtl = (UINT) wParam; // control identifier
LPDRAWITEMSTRUCT lpdis =(LPDRAWITEMSTRUCT) lParam;
if(idCtl==IDC_NEXTOBJ){
RECT rc;
int i,x,y;
FillRect(lpdis->hDC,NULL,(HBRUSH)(COLOR_WINDOWTEXT+1));
for(i=0;i<4;i++){
x=NextObj.pos[i].x-60;
y=NextObj.pos[i].y;
GetCellRect(&rc,NextObj.pos[i].x-6,NextObj.pos[i].y);
InflateRect(&rc,-1,-1);
FillRect(lpdis->hDC,&rc,(HBRUSH)(COLOR_BTNFACE+1));
//DrawObject(lpdis->hDC,&NextObj);
//TRACE("===(%d,%d)\r\n",NextObj.pos[i].x,NextObj.pos[i].y);
}
}
}break;
case WM_KEYDOWN:
switch(wParam)
{
case VK_LEFT:
case VK_RIGHT:
if(g_AppData.bIsActive)
Move(hWnd,wParam==VK_LEFT?LEFT:RIGHT);
else{
int speed=GetDlgItemInt(hWnd,IDC_SPEED,NULL,FALSE);
speed+=(wParam==VK_LEFT?-1:1);speed=(speed+16)%16;
SetDlgItemInt(hWnd,IDC_SPEED,speed,FALSE);
}
break;
case VK_DOWN:
if(g_AppData.bIsActive){
dtime=20;
Fall(hWnd);
}else{
int level=GetDlgItemInt(hWnd,IDC_LEVEL,NULL,FALSE)-1;
if(level==-1) level=19;
SetDlgItemInt(hWnd,IDC_LEVEL,level,FALSE);
}
break;
case VK_UP:
if(g_AppData.bIsActive)
Flip(hWnd);
else{
int level=GetDlgItemInt(hWnd,IDC_LEVEL,NULL,FALSE)+1;
if(level>19) level=0;
SetDlgItemInt(hWnd,IDC_LEVEL,level,FALSE);
}
break;
case VK_RETURN:
g_AppData.bIsActive=!g_AppData.bIsActive;
if(g_AppData.bIsActive)
BeginGame(hWnd);
break;
default:
return DefWindowProc(hWnd,msg,wParam,lParam);
}
break;
default:
return DefWindowProc(hWnd, msg, wParam, lParam);
}
return 0;
}
HWND CreateTetris(void)
{
int i,j;
hGame=CreateMainWindow("TERTRIS",WS_VISIBLE|WS_CAPTION|WS_SYSMENU,
10,10,420,520,TetrisWndProc);
CreateWindow("Static",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|SS_OWNERDRAW,280,10,100,100,hGame,(HMENU)IDC_NEXTOBJ,NULL,NULL);
CreateWindow("Static","Score",WS_CHILD|WS_VISIBLE|SS_RIGHT,250,120,80,22,hGame,(HMENU)77,NULL,NULL);
CreateWindow("Static",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|SS_RIGHT,330,120,80,22,hGame,(HMENU)IDC_SCORE,NULL,NULL);
CreateWindow("Static","Speed",WS_CHILD|WS_VISIBLE|SS_RIGHT,250,150,80,22,hGame,(HMENU)88,NULL,NULL);
CreateWindow("Static",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|SS_RIGHT,330,150,80,22,hGame,(HMENU)IDC_SPEED,NULL,NULL);
CreateWindow("Static","Level",WS_CHILD|WS_VISIBLE|SS_RIGHT,250,180,80,22,hGame,(HMENU)99,NULL,NULL);
CreateWindow("Static",NULL,WS_CHILD|WS_VISIBLE|WS_BORDER|SS_RIGHT,330,180,80,22,hGame,(HMENU)IDC_LEVEL,NULL,NULL);
//level=0;
SetDlgItemInt(hGame,IDC_SPEED,0,FALSE);
SetDlgItemInt(hGame,IDC_SCORE,0,FALSE);
SetDlgItemInt(hGame,IDC_LEVEL,0,FALSE);
for(i=0;i<MAXX;i++)
for(j=0;j<MAXY;j++)
Ev[i][j]=0;
CreateObj(&NextObj);
SetCruObjZero();
//============================================
g_AppData.bIsActive=0;
SetTimer(hGame,IDT_TETRIS,10,NULL);
ShowWindow(hGame,SW_SHOWNORMAL);
SetActiveWindow(hGame);
return hGame;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -