欢迎来到天天文库
浏览记录
ID:8977325
大小:88.00 KB
页数:0页
时间:2018-04-13
《mfc自制扫雷游戏心得》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、首先亮一下自己做出的扫雷游戏界面效果:还没来得急改exe文件的图标,刚下好ico文件,不过没有合适的,所以就还没换。我做这个扫雷游戏的第一件事当然是想解决怎么让这个界面看起来像扫雷那个样子。我首先想到了按钮控件可以响应鼠标点击事件,所以就决定了使用MFC的对话框,用紧密排列的按钮来当做雷区,索性就拉了几个按钮在界面随意放着,然后Ctrl+c和Ctrl+v的凑够100个按钮。这样一阵随意操作之后,我急后悔了!太乱了,密密麻麻地,再怎么也要弄个10*10的方阵出来才像样嘛~所以干脆把按钮全Delete掉,规规矩矩地先放5个按钮进来,把按钮的文字都删掉,然后调整按钮大小成一个方
2、形,将5个按钮选定布局一横排,之后再复制这5个到后面紧挨着放好,这样才弄好第一行雷区,接下来就10个10个的复制,对齐了。我想要是这个布局有网格的就好了,就不用我这样一排一排的弄了……第二步就是做上图右边那一列的游戏信息,简单的就不用赘述了。第三步嘛自然是在雷区安排雷的位置了。这就需要为这100个按钮安排序号以作区别,然后随机数序号的按钮下对应着一个雷。而我又打开该对话框的资源文件头文件Resource.h发现关于这100个按钮的ID设置是这样的:#defineIDC_BUTTON11000#defineIDC_BUTTON21001#defineIDC_BUTTON31
3、002…………………………………………………………………………………………………………#defineIDC_BUTTON981097#defineIDC_BUTTON991098#defineIDC_BUTTON1001099所以我就干脆以1000-1099为序号,当然雷的标记是定义一个整数数组flg[100],flg[index]=0则不是雷,flg[index]=1则是雷,其中index+1000对应按钮的ID。第四步了,需要为这100个按钮添加响应鼠标左键单击事件和右键单击事件,不想做得太复杂了,就没做鼠标左键双击和鼠标左右键同时点击的响应。当然只算鼠标左键和右键就
4、已经是麻烦事了,比较要为100个按钮添加呢!百度了一下多个控件响应同一个事件的添加方法,其中左键单击有比较详细的方法说明,就是先添加一个按钮的左键单击事件,再改Mine_SweepDlg.cpp如下几句代码:BEGIN_MESSAGE_MAP(CChusDlg,CDialog)//{{AFX_MSG_MAP(CChusDlg)…………ON_BN_CLICKED(IDC_BUTTON1,OnButton1)//}}AFX_MSG_MAPEND_MESSAGE_MAP()将其中的ON_BN_CLICKED(IDC_BUTTON1,OnButton1)改为ON_CONTROL_
5、RANGE(BN_CLICKED,IDC_BUTTON1,IDC_BUTTON100,OnButton1)即可实现100个按钮响应同一个鼠标左键单击事件函数OnButton1()这只适用于ID连续的控件。当然鼠标左键单击事件函数需要知道是哪一个ID的控件发生的,所以还需要传递一个ID参数,做下面几个位置的修改:Mine_SweepDlg.h中afx_msgvoidOnButton1(UINTuID);加入括号的参数,再在Mine_SweepDlg.cpp的事件响应函数中加入参数voidCMine_SweepDlg::OnButton1(UINTuID)其中的uID就是10
6、0个按钮的序号,而uID-1000就得到雷区标识的index了。然后我将响应事件作出的效果如图:即点击某一个方格,判断周边8个方格是否有雷标识,若没有则隐藏该按钮,若有则显示周边雷标识个数。若点击的这个方格就是累标识,则弹出消息框提示游戏结束。以下附上事件响应函数的代码:voidCMine_SweepDlg::OnButton1(UINTuID){//TODO:Addyourcontrolnotificationhandlercodehereintindex=(int)uID-1000;intchack[9];inti,j;if(flg[index]==0)//如果该位置
7、不是雷{chack_mine(index,chack);//获取试探方向for(i=0,j=0;iShowWindow(FALSE);//隐藏该按钮flg[index]=2;m_score+=10;}for(i=0,j=0;i
此文档下载收益归作者所有