visual studio 扫雷游戏API的实现方法.docx

上传人:b****5 文档编号:28098528 上传时间:2023-07-08 格式:DOCX 页数:31 大小:551.48KB
下载 相关 举报
visual studio 扫雷游戏API的实现方法.docx_第1页
第1页 / 共31页
visual studio 扫雷游戏API的实现方法.docx_第2页
第2页 / 共31页
visual studio 扫雷游戏API的实现方法.docx_第3页
第3页 / 共31页
visual studio 扫雷游戏API的实现方法.docx_第4页
第4页 / 共31页
visual studio 扫雷游戏API的实现方法.docx_第5页
第5页 / 共31页
点击查看更多>>
下载资源
资源描述

visual studio 扫雷游戏API的实现方法.docx

《visual studio 扫雷游戏API的实现方法.docx》由会员分享,可在线阅读,更多相关《visual studio 扫雷游戏API的实现方法.docx(31页珍藏版)》请在冰豆网上搜索。

visual studio 扫雷游戏API的实现方法.docx

visualstudio扫雷游戏API的实现方法

经典扫雷游戏C++API函数的实现方法

扫雷对大家来说应该是非常熟悉和经典的游戏之一了,但是这样一个看似简单的小游戏是如何实现的呢?

其实方法有很多种,相信我们大家都学过C++,我就先提供一种利用C++中的API函数实现扫雷的方法。

代码使用说明:

游戏实现后的功能,鼠标左键单击掀开未知区域,鼠标右键单击设置标记,鼠标中间滑轮单击实现自动翻开功能。

1首先打开VisualStudio2010软件;

2点击文件->新建->项目

3选择Win32中的Win32项目:

4确定后点击“下一步”:

如下图中勾选,点击完成即可:

5点击视图主菜单(View)->解决方案资源管理器:

6在右侧的解决方案资源管理器中的头文件文件夹中添加下面的头文件(.h),在源文件文件夹下添加下面的源文件(.cpp文件)

以下是实现的各部分代码:

首先我们来写程序的入口程序WinMain函数:

文档命名为WinMain.cpp

#include"proc.h"

#include"caculate.h"

externcharco[xk][yk];

externcharth[xk][yk];

intWINAPIWinMain(HINSTANCEhInstance,HINSTANCEhPrevInst,LPSTRlpszCmdLine,intnCmdShow)

{

creat(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;//消息循环结束即程序终止时将信息返回系统

}

由于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,intheight,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;//定义指向设备的句柄

HBRUSHhBrush,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>=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)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

RoundRect(hDC,20+2*d_ini_x+ys*d_width,10,20+2*d_ini_x+ys*d_width+70,10+height,cir_len,cir_len);

EndPaint(hWnd,&PtStr);//结束绘图

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

SetTextColor(hDC,RGB(255,233,0));

GetTextMetrics(hDC,&tm);

TextOut(hDC,20+2*d_ini_x+ys*d_width+2,10+2,lpsz1,4);

EndPaint(hWnd,&PtStr);//结束绘图

}*/

return0;

caseWM_PAINT:

//处理绘图消息

hDC=BeginPaint(hWnd,&PtStr);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

for(cyc_x=0;cyc_x

{

for(cyc_y=0;cyc_y

{

RoundRect(hDC,ini_x+cyc_y*width,ini_y+cyc_x*height,ini_x+cyc_y*width+width,ini_y+cyc_x*height+height,cir_len,cir_len);//绘制圆角矩形

}

}

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

//按钮

EndPaint(hWnd,&PtStr);//结束绘图

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(WHITE_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

RoundRect(hDC,20+2*d_ini_x+ys*d_width,10,20+2*d_ini_x+ys*d_width+70,10+height,cir_len,cir_len);

RoundRect(hDC,20+2*d_ini_x+ys*d_width,50,20+2*d_ini_x+ys*d_width+70,50+height,cir_len,cir_len);

EndPaint(hWnd,&PtStr);//结束绘图

//按钮

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

SetTextColor(hDC,RGB(255,233,0));

GetTextMetrics(hDC,&tm);

TextOut(hDC,20+2*d_ini_x+ys*d_width+2,10+2,lpsz1,4);

TextOut(hDC,20+2*d_ini_x+ys*d_width+2,50+2,lpsz2,4);

EndPaint(hWnd,&PtStr);//结束绘图*/

return0;

caseWM_LBUTTONUP:

mouse_x=LOWORD(lParam);

mouse_y=HIWORD(lParam);

test_x=(mouse_x+ini_x)/25-1;

test_y=(mouse_y+ini_y)/25-1;

move_x=((mouse_x+ini_x)/25-1)*width+ini_x;

move_y=((mouse_y+ini_y)/25-1)*height+ini_y;

if(mouse_x>=20+2*d_ini_x+ys*d_width&&mouse_x<=20+2*d_ini_x+ys*d_width+70&&mouse_y>=50&&mouse_y<=50+height)

{

cover(th,co);

for(record_i=0;record_i

for(record_j=0;record_j

record[record_i][record_j]=0;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

for(cyc_x=0;cyc_x

{

for(cyc_y=0;cyc_y

{

RoundRect(hDC,ini_x+cyc_y*width,ini_y+cyc_x*height,ini_x+cyc_y*width+width,ini_y+cyc_x*height+height,cir_len,cir_len);//绘制圆角矩形

}

}

}

if(mouse_x>=20+2*d_ini_x+ys*d_width&&mouse_x<=20+2*d_ini_x+ys*d_width+70&&mouse_y>=10&&mouse_y<=10+height)

{

creat(th);num(th);cover(th,co);

for(record_i=0;record_i

for(record_j=0;record_j

record[record_i][record_j]=0;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

for(cyc_x=0;cyc_x

{

for(cyc_y=0;cyc_y

{

RoundRect(hDC,ini_x+cyc_y*width,ini_y+cyc_x*height,ini_x+cyc_y*width+width,ini_y+cyc_x*height+height,cir_len,cir_len);//绘制圆角矩形

}

}

}

if(mouse_x>=ini_x&&mouse_x<=ini_x+width*mine_x&&mouse_y>=ini_y&&mouse_y<=ini_y+height*mine_y)

{

if(record[test_y][test_x]==0)

{

//record[test_y][test_x]=1;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(WHITE_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

RoundRect(hDC,move_x,move_y,move_x+width,move_y+height,cir_len,cir_len);

EndPaint(hWnd,&PtStr);//结束绘图

//揭开

//cover(th,co);

i=test_y;j=test_x;//获取揭开坐标

if(th[i][j]=='*')

{

copy(th,co);

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

for(record_i=0;record_i

for(record_j=0;record_j

record[record_i][record_j]=1;

}

else

{

if(th[i][j]==0)

{

open(th,co,i,j);

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

}

else

{

co[i][j]=th[i][j];

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

}

}

//揭开*/

}

/*

elseif(record[test_y][test_x]==2)

{

record[test_y][test_x]=0;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式左键取消标记代码

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

RoundRect(hDC,ini_x+width*test_x,ini_y+height*test_y,ini_x+width*test_x+width,ini_y+height*test_y+height,cir_len,cir_len);

EndPaint(hWnd,&PtStr);

}*/

}

return0;

caseWM_RBUTTONDOWN:

mouse_x=LOWORD(lParam);

mouse_y=HIWORD(lParam);

test_x=(mouse_x+ini_x)/25-1;

test_y=(mouse_y+ini_y)/25-1;

move_x=((mouse_x+ini_x)/25-1)*width+ini_x;

move_y=((mouse_y+ini_y)/25-1)*height+ini_y;

if(mouse_x>=ini_x&&mouse_x<=ini_x+width*mine_x&&mouse_y>=ini_y&&mouse_y<=ini_y+height*mine_y)

{

if(record[test_y][test_x]==0)

{

hDC=GetDC(hWnd);

record[test_y][test_x]=2;

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(WHITE_BRUSH);

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

Pie(hDC,move_x+2,move_y+2,move_x+25,move_y+25,move_x+2,move_y+2,move_x+2,move_y+2);

EndPaint(hWnd,&PtStr);

}

elseif(record[test_y][test_x]==2)

{

record[test_y][test_x]=0;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

hPen=(HPEN)GetStockObject(BLACK_PEN);//黑色画笔

hB=(HBRUSH)GetStockObject(DKGRAY_BRUSH);//画刷

SelectObject(hDC,hB);//选择画刷

SelectObject(hDC,hPen);//选择画笔

RoundRect(hDC,ini_x+width*test_x,ini_y+height*test_y,ini_x+width*test_x+width,ini_y+height*test_y+height,cir_len,cir_len);

EndPaint(hWnd,&PtStr);

}

}

flag=0;

for(record_i=0;record_i

for(record_j=0;record_j

{

if(record[record_i][record_j]==2)flag++;

}

flag=tn-flag;

lpsz[0]=flag/100+48;lpsz[1]=(flag%100)/10+48;lpsz[2]=flag%10+48;

hDC=GetDC(hWnd);

SetMapMode(hDC,MM_ANISOTROPIC);//设置映像模式

SetTextColor(hDC,RGB(0,0,234));

GetTextMetrics(hDC,&tm);

TextOut(hDC,20+2*d_ini_x+ys*d_width+2,80+2,lpsz_text,5);

TextOut(hDC,20+2*d_ini_x+ys*d_width+2,120+2,lpsz,3);

return0;

caseWM_MBUTTONDOWN:

mouse_x=LOWORD(lParam);

mouse_y=HIWORD(lParam);

test_x=(mouse_x+ini_x)/25-1;

test_y=(mouse_y+ini_y)/25-1;

move_x=((mouse_x+ini_x)/25-1)*width+ini_x;

move_y=((mouse_y+ini_y)/25-1)*height+ini_y;

if(record[test_y][test_x]==1)

{

if(intelligence(record,th,test_x,test_y))

{

for(i=test_y-1,j=test_x-1;j<=test_x+1;j++)

{

if(i<0||j<0||i>=xs|j>=ys)continue;

if(record[i][j]!

=1&&record[i][j]!

=2)

{

co[i][j]=th[i][j];

if(th[i][j]==0)

open(th,co,i,j);

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

}

}

for(j--,i++;i<=test_y+1;i++)

{

if(i<0||j<0||i>=xs|j>=ys)continue;

if(record[i][j]!

=1&&record[i][j]!

=2)

{

co[i][j]=th[i][j];

if(th[i][j]==0)

open(th,co,i,j);

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

}

}

for(i--,j--;j>=test_x-1;j--)

{

if(i<0||j<0||i>=xs|j>=ys)continue;

if(record[i][j]!

=1&&record[i][j]!

=2)

{

co[i][j]=th[i][j];

if(th[i][j]==0)

open(th,co,i,j);

print(co,hWnd,ini_x,ini_y,width,height,cir_len);

}

}

for(j++,i--;i>=test_y;i--)

{

if(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学反思汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1