资源描述:
《visual studio 2010 扫雷游戏API的实现方法》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、经典扫雷游戏C++API函数的实现方法扫雷对大家来说应该是非常熟悉和经典的游戏之一了,但是这样一个看似简单的小游戏是如何实现的呢?其实方法有很多种,相信我们大家都学过C++,我就先提供一种利用C++中的API函数实现扫雷的方法。代码使用说明:游戏实现后的功能,鼠标左键单击掀开未知区域,鼠标右键单击设置标记,鼠标中间滑轮单击实现自动翻开功能。1首先打开VisualStudio2010软件;2点击文件->新建->项目3选择Win32中的Win32项目:4确定后点击“下一步”:如下图中勾选,点击完成即可:5点击视图主菜单(View)->解决方案资源管理器:6
2、在右侧的解决方案资源管理器中的头文件文件夹中添加下面的头文件(.h),在源文件文件夹下添加下面的源文件(.cpp文件)以下是实现的各部分代码:首先我们来写程序的入口程序WinMain函数:文档命名为WinMain.cpp#include"proc.h"#include"caculate.h"externcharco[xk][yk];externcharth[xk][yk];intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow){creat(
3、th);num(th);cover(th,co);MSGMsg;if(!InitWindowsClass(hInstance))returnFALSE;if(!InitWindows(hInstance,nCmdShow))returnFALSE;//-----------------消息循环----------------------while(GetMessage(&Msg,NULL,0,0)){TranslateMessage(&Msg);DispatchMessage(&Msg);}returnMsg.wParam;//消息循环结束即程序终止时
4、将信息返回系统}由于Windows是基于消息的传递机制,所以接下来编写过程处理函数:命名为Proc.cpp#include"proc.h"#include"caculate.h"externintrecord[xk][yk]={0};//记录窗口的图形状态0为关闭、1为开启、2为占旗externcharco[xk][yk];externcharth[xk][yk];externintxs,ys;externinttn;voidprint(charco[xk][yk],HWNDhWnd,intini_x,intini_y,intwidth,intheig
5、ht,intcir_len);longWINAPIWndProc(HWNDhWnd,UINTiMessage,UINTwParam,LONGlParam){intwidth=d_width,height=d_height,ini_x=d_ini_x,ini_y=d_ini_y,cir_len=8,mine_x=ys,mine_y=xs,cyc_x,cyc_y;intmove_x,move_y,record_i,record_j,flag;inttest_x,test_y;WORDmouse_x,mouse_y;HDChDC;//定义指向设备的句柄HBR
6、USHhBrush,hB;//定义指向画刷的句柄HPENhPen;//定义指向画笔的句柄PAINTSTRUCTPtStr;//定义指向包含绘图信息的结构体变量WORDx,y;HCURSORhCursor;TEXTMETRICtm;wchar_tlpsz1[]=L"重新开局",lpsz2[]=L"重试本局",lpsz[3],lpsz_text[]=L"剩余标记数:";inti,j;//揭开时的坐标switch(iMessage)//处理消息{caseWM_MOUSEMOVE:x=LOWORD(lParam);y=HIWORD(lParam);if(x>=
7、ini_x&&x<=ini_x+width*mine_x&&y>=ini_y&&y<=ini_y+height*mine_y){hCursor=LoadCursor(NULL,IDC_CROSS);SetCursor(hCursor);}/*if(x>=20+2*d_ini_x+ys*d_width&&x<=20+2*d_ini_x+ys*d_width+70&&y>=10&&y<=10+height){hDC=GetDC(hWnd);SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式hPen=(HPEN)GetStockO
8、bject(BLACK_PEN);//黑色画笔hB=(HBRUSH)GetStockObjec