📄 game1.cpp
字号:
#include<windows.h>
#include<stdlib.h>
#include<string.h>
#include"game1.h"
//函数声明
long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam);
BOOL CALLBACK DlgProc(HWND,UINT,WPARAM,LPARAM);
BOOL InitWindowsClass(HINSTANCE hInstance);
BOOL InitWindows(HINSTANCE hInstance,int nCmdShow);
BOOL getpath(char szTemp[200]);
BOOL getdir(char szDir[200]);
BOOL DataToFile(HWND hWnd,LPCTSTR lpszFileName);
BOOL FileToData(HWND hWnd,LPSTR lpszFileName);
//定义全局句柄
HWND hWndMain;
HMENU hMenu;
HWND hWnd;
HINSTANCE hInst;
HANDLE hFile;
//HINSTANCE hInst1;
HBITMAP hBm;
HDC hDC;
HDC hdcmem;
BITMAP bm;
HWND hdlg;
//定义全局变量
int ispeed1[4] = {1,0,0,0};
int ispeed2[4] = {1,0,0,0};
int isize1[4] = {1,0,0,0};
int isize2[4] = {1,0,0,0};
int ndlg;
int crRGB[3] = {0,0,0},crRGBbuf[3] = {0,0,0};//
int i, D = 40, L = 80, sball = 2, sline = 10;//
int Dbuf = D ,Lbuf = L, sballbuf = sball, slinebuf = sline;
int x = 30, y = 40, fx = 1, fy = 1;//
int x1 = 30;//
int life = 3, p = 1, eg = 21, ready = 10, gameover = 0;//
char lpszFileName[200];
char *lpBufPtr;
DWORD dwFileSize;
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//
// 入口函数(主函数)
//
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
MSG Message;
hBm = LoadBitmap(hInstance,"bitmap1.bmp");
if(!InitWindowsClass(hInstance))
return FALSE;
if(!InitWindows(hInstance,nCmdShow))
return FALSE;
hInst = hInstance;
while(GetMessage(&Message,0,0,0))
{
TranslateMessage(&Message);
DispatchMessage(&Message);
}
return Message.wParam;
}
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//
// 消息处理函数
//
long WINAPI WndProc(HWND hWnd,UINT iMessage,
UINT wParam,LONG lParam)
{
HBRUSH hBrush;
HPEN hPen;
HFONT hF;
char lpsz_1[] = "按Ctrl键开始";
char lpsz_2[] = "LIFE = ";
char lpsz_4[] = "你挂了";
PAINTSTRUCT PtStr;
//TEXTMETRIC tm;
static int xc1 = 50, xc2 = xc1, yc1 = 50, yc2 = yc1+20,
yc3 = yc2, xc3 = xc1+50,
xc4 = 250, yc4 = 200,
nCharlen1 = strlen(lpsz_1),
nCharlen2 = strlen(lpsz_2),
nCharlen4 = strlen(lpsz_4);
char lpsz_3[] = "3";
//-----------------------------------------------
//-----------------------------------------------
switch(iMessage)
{
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDM_DATE:
DialogBox(hInst,"Date",hWnd,(DLGPROC)DlgProc);
break;
case IDM_SIZE:
ndlg = 1;
DialogBox(hInst,"Size",hWnd,(DLGPROC)DlgProc);
break;
case IDM_SPEED:
ndlg = 2;
DialogBox(hInst,"Speed",hWnd,(DLGPROC)DlgProc);
break;
case IDM_COLOR:
ndlg = 3;
DialogBox(hInst,"Color",hWnd,(DLGPROC)DlgProc);
break;
case IDM_SAVE:
ndlg = 4;
DialogBox(hInst,"Save",hWnd,(DLGPROC)DlgProc);
break;
case IDM_LOAD:
ndlg = 5;
DialogBox(hInst,"Load",hWnd,(DLGPROC)DlgProc);
break;
case IDM_README:
MessageBox(hWnd,
"暂停:小键盘0键;向左移动:左箭头健;向右移动:右箭头健;开始:Ctrl键。",
"READ ME",
MB_OK);
break;
case IDM_EXIT:
PostQuitMessage(0);
break;
case IDM_EG:
eg = eg*(-1);
if(eg == 21)
CheckMenuItem(hMenu,IDM_EG,MF_BYCOMMAND|MF_UNCHECKED);
else
CheckMenuItem(hMenu,IDM_EG,MF_BYCOMMAND|MF_CHECKED);
//InvalidateRect(hWnd,NULL,1);
break;
case IDM_TWO:
CheckMenuItem(hMenu,IDM_TWO,MF_BYCOMMAND|MF_CHECKED);
CheckMenuItem(hMenu,IDM_THREE,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_FOUR,MF_BYCOMMAND|MF_UNCHECKED);
life = 2;
InvalidateRect(hWnd,NULL,1);
break;
case IDM_THREE:
CheckMenuItem(hMenu,IDM_TWO,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_THREE,MF_BYCOMMAND|MF_CHECKED);
CheckMenuItem(hMenu,IDM_FOUR,MF_BYCOMMAND|MF_UNCHECKED);
life = 3;
InvalidateRect(hWnd,NULL,1);
break;
case IDM_FOUR:
CheckMenuItem(hMenu,IDM_TWO,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_THREE,MF_BYCOMMAND|MF_UNCHECKED);
CheckMenuItem(hMenu,IDM_FOUR,MF_BYCOMMAND|MF_CHECKED);
life = 4;
InvalidateRect(hWnd,NULL,1);
break;
}
//-------------------------------------
case WM_KEYDOWN:
{
switch(wParam)
{
case VK_CONTROL:
ready = 11;
EnableMenuItem(hMenu,IDM_SIZE,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_TWO,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_THREE,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_FOUR,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_SPEED,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_COLOR,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_EG,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_README,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_SAVE,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_LOAD,MF_BYCOMMAND|MF_GRAYED);
InvalidateRect(hWnd,NULL,1);
break;
case VK_NUMPAD0:
if(ready == 11)
{
p = p*(-1);
if(p == 1)
{
EnableMenuItem(hMenu,IDM_README,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_SAVE,MF_BYCOMMAND|MF_GRAYED);
EnableMenuItem(hMenu,IDM_LOAD,MF_BYCOMMAND|MF_GRAYED);
InvalidateRect(hWnd,NULL,1);
}
else
{
EnableMenuItem(hMenu,IDM_README,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_SAVE,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_LOAD,MF_BYCOMMAND|MF_ENABLED);
}
}
break;
case VK_LEFT:
if(p == 1 && x1 >20)
x1 = x1-sline;
//InvalidateRect(hWnd,NULL,1);
break;
case VK_RIGHT:
if(p == 1 && x1+L <620)
x1 = x1+sline;
//InvalidateRect(hWnd,NULL,1);
break;
}
}
//-------------------------------------
case WM_CREATE:
hDC = GetDC(hWnd);
hdcmem = CreateCompatibleDC(hDC);
ReleaseDC(hWnd,hDC);
if(life == 3)
CheckMenuItem(hMenu,IDM_THREE,MF_BYCOMMAND|MF_CHECKED);
break;
case WM_PAINT:
hDC = BeginPaint(hWnd,&PtStr);
SetMapMode(hDC,MM_ANISOTROPIC);
SetWindowExtEx(hDC,640,480,NULL);
SetViewportExtEx(hDC,640,480,NULL);
switch(ready)
{
case 10:
//hF = CreateFont(0,0,0,0,400,);
hF = (HFONT)GetStockObject(SYSTEM_FONT);
SelectObject(hDC,hF);
TextOut(hDC,xc1,yc1,&lpsz_1[0],nCharlen1);
TextOut(hDC,xc2,yc2,&lpsz_2[0],nCharlen2);
switch(life)
{
case 1:
lpsz_3[0] = '1';
break;
case 2:
lpsz_3[0] = '2';
break;
case 3:
lpsz_3[0] = '3';
break;
case 4:
lpsz_3[0] = '4';
break;
}
TextOut(hDC,xc3,yc3,&lpsz_3[0],1);
DeleteObject(hF);
break;
case 11:
hPen = CreatePen(PS_SOLID,2,RGB(255,0,0));
SelectObject(hDC,hPen);
MoveToEx(hDC,20,460,NULL);
LineTo(hDC,20,20);
LineTo(hDC,620,20);
LineTo(hDC,620,460);
DeleteObject(hPen);
hPen = CreatePen(PS_SOLID,2,RGB(0,255,0));
SelectObject(hDC,hPen);
MoveToEx(hDC,x1,460,NULL);
LineTo(hDC,x1+L,460);
DeleteObject(hPen);
switch(eg)
{
case 21:
hPen = CreatePen(PS_SOLID,2,RGB(crRGB[0],crRGB[1],crRGB[2]));
SelectObject(hDC,hPen);
hBrush = CreateHatchBrush(HS_DIAGCROSS,RGB(crRGB[0],crRGB[1],crRGB[2]));
SelectObject(hDC,hBrush);
Ellipse(hDC,x,y,x+D,y+D);
DeleteObject(hPen);
DeleteObject(hBrush);
break;
case -21:
//hdcmem = CreateCompatibleDC(hDC);
SelectObject(hdcmem,hBm);
BitBlt(hDC,x,y,D,D,hdcmem,0,0,SRCCOPY);
//DeleteDC(hdcmem);
break;
}
if(x <= 20)
fx = 1;
if(x >= 620-D)
fx = -1;
if(y <= 20)
fy = 1;
if(y >= 460-D && x+D/2 >= x1 && x+D/2 <= x1+L)
fy = -1;
if(p == 1)
{
x = x + fx*sball;
y = y + fy*sball;
}
if(y>460-D+sball)
{
life--;
x = 30;y = 40;
fx = 1;fy = 1;
x1 = 30;
ready = 10;
InvalidateRect(hWnd,NULL,1);
Sleep(500);
EnableMenuItem(hMenu,IDM_README,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_SAVE,MF_BYCOMMAND|MF_ENABLED);
EnableMenuItem(hMenu,IDM_LOAD,MF_BYCOMMAND|MF_ENABLED);
}
break;
case 12:
hF = (HFONT)GetStockObject(SYSTEM_FONT);
SelectObject(hDC,hF);
TextOut(hDC,xc4,yc4,&lpsz_4[0],nCharlen4);
DeleteObject(hF);
//Sleep(2000);
break;
}
if(ready == 12)
{
gameover = 1;
//Sleep(2000);
PostQuitMessage(0);
}
if(life == 0)
ready = 12;
if(ready == 11 && p == 1)
InvalidateRect(hWnd,NULL,1);
Sleep(10);
if(gameover == 1)
Sleep(2000);
EndPaint(hWnd,&PtStr);
break;
//-------------------------------------
case WM_DESTROY:
DeleteObject(hBm);
DeleteDC(hdcmem);
PostQuitMessage(0);
break;
default:
return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}
return 0;
}
//-------------------------------------------------------------------
//-------------------------------------------------------------------
//
// 对话框消息处理函数
//
BOOL CALLBACK DlgProc(HWND hdlg,UINT message,WPARAM wParam,LPARAM lParam)
{
static int CurrentVal[3],PrewVal[3];
static HWND hwScroll[3];
char szString[10];
int nIndex,r;
DWORD dwNameSize;
static char szDirs[200] = "c:",szDir1s[200] = "c:\\";
static char szTemps[200],szPaths[200] = "c:\\*.*";
char szDir2s[200];
static char szDirl[200] = "c:",szDir1l[200] = "c:\\";
static char szTempl[200],szPathl[200] = "c:\\*.*";
char szDir2l[200];
//-----------------------------------------------
//-----------------------------------------------
switch(message)
{
case WM_INITDIALOG:
switch(ndlg)
{
case 1:
for(i=0;i<4;i++){isize1[i]=0;}
for(i=0;i<4;i++){isize2[i]=0;}
switch(D)
{
case 40:
isize1[0] = 1;
break;
case 60:
isize1[1] = 1;
break;
case 80:
isize1[2] = 1;
break;
case 20:
isize1[3] = 1;
break;
}
switch(L)
{
case 80:
isize2[0] = 1;
break;
case 100:
isize2[1] = 1;
break;
case 120:
isize2[2] = 1;
break;
case 40:
isize2[3] = 1;
break;
}
SendDlgItemMessage(hdlg,IDRADIOBUTTON9,BM_SETCHECK,isize1[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON10,BM_SETCHECK,isize1[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON11,BM_SETCHECK,isize1[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON12,BM_SETCHECK,isize1[3],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON13,BM_SETCHECK,isize2[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON14,BM_SETCHECK,isize2[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON15,BM_SETCHECK,isize2[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON16,BM_SETCHECK,isize2[3],0);
Dbuf = D; Lbuf = L;
break;
case 2:
for(i=0;i<4;i++){ispeed1[i]=0;}
for(i=0;i<4;i++){ispeed2[i]=0;}
switch(sball)
{
case 2:
ispeed1[0] = 1;
break;
case 4:
ispeed1[1] = 1;
break;
case 6:
ispeed1[2] = 1;
break;
case 1:
ispeed1[3] = 1;
break;
}
switch(sline)
{
case 10:
ispeed2[0] = 1;
break;
case 20:
ispeed2[1] = 1;
break;
case 30:
ispeed2[2] = 1;
break;
case 5:
ispeed2[3] = 1;
break;
}
SendDlgItemMessage(hdlg,IDRADIOBUTTON1,BM_SETCHECK,ispeed1[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON2,BM_SETCHECK,ispeed1[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON3,BM_SETCHECK,ispeed1[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON4,BM_SETCHECK,ispeed1[3],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON5,BM_SETCHECK,ispeed2[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON6,BM_SETCHECK,ispeed2[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON7,BM_SETCHECK,ispeed2[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON8,BM_SETCHECK,ispeed2[3],0);
sballbuf = sball; slinebuf = sline;
break;
case 3:
for(i=0;i<3;i++)
{
crRGBbuf[i] = crRGB[i];
CurrentVal[i] = crRGBbuf[i];
PrewVal[i] = crRGBbuf[i];
hwScroll[i] = GetDlgItem(hdlg,IDC_RED+i);
SetScrollRange(hwScroll[i],SB_CTL,0,255,FALSE);
SetScrollPos(hwScroll[i],SB_CTL,crRGBbuf[i],TRUE);
SetDlgItemText(hdlg,IDC_VALRED+i,itoa(CurrentVal[i],szString,10));
}
break;
case 4:
SendDlgItemMessage(hdlg,IDS_LISTBOX1,LB_DIR,0x4010,(LPARAM)szPaths);
SetDlgItemText(hdlg,IDS_EDITTEXT1,szDir1s);
break;
case 5:
SendDlgItemMessage(hdlg,IDS_LISTBOX2,LB_DIR,0x4010,(LPARAM)szPathl);
SetDlgItemText(hdlg,IDS_EDITTEXT3,szDir1l);
break;
default:
break;
}
return 1;
//-----------------------------------------------
//-----------------------------------------------
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDRADIOBUTTON1:
for(i=0;i<4;i++){ispeed1[i]=0;}
ispeed1[0] = 1;
SendDlgItemMessage(hdlg,IDRADIOBUTTON1,BM_SETCHECK,ispeed1[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON2,BM_SETCHECK,ispeed1[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON3,BM_SETCHECK,ispeed1[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON4,BM_SETCHECK,ispeed1[3],0);
sballbuf = 2;
break;
case IDRADIOBUTTON2:
for(i=0;i<4;i++){ispeed1[i]=0;}
ispeed1[1] = 1;
SendDlgItemMessage(hdlg,IDRADIOBUTTON1,BM_SETCHECK,ispeed1[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON2,BM_SETCHECK,ispeed1[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON3,BM_SETCHECK,ispeed1[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON4,BM_SETCHECK,ispeed1[3],0);
sballbuf = 4;
break;
case IDRADIOBUTTON3:
for(i=0;i<4;i++){ispeed1[i]=0;}
ispeed1[2] = 1;
SendDlgItemMessage(hdlg,IDRADIOBUTTON1,BM_SETCHECK,ispeed1[0],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON2,BM_SETCHECK,ispeed1[1],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON3,BM_SETCHECK,ispeed1[2],0);
SendDlgItemMessage(hdlg,IDRADIOBUTTON4,BM_SETCHECK,ispeed1[3],0);
sballbuf = 6;
break;
case IDRADIOBUTTON4:
for(i=0;i<4;i++){ispeed1[i]=0;}
ispeed1[3] = 1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -