版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、课程设计任务书学生姓名: 专业班级:指导教师: 工作单位:题目:初始条件:要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)时间安排:指导教师签名:系主任(或责任教师)签名:经典扫雷游戏程序设计目录摘要31、引言41课题背景及意义41.2 visual c+ 发展概况51.3关于本课题62、游戏的总体分析与设计72游戏功能简介72.2设计构想72.3流程规划83、扫雷游戏的具体实现过程93扫雷游戏模块的实现93扫雷游戏主窗体的创建93.2主界而控制菜单的设计133.2扫雷游戏核心布雷算法设计133.3扫雷鼠标事件的处理203.4扫雷其它处理273.4.1难度设置菜
2、单消息处理273.4.2背景音乐菜单消息处理283.4.3其它处理294、扫雷游戏程序的调试与运行295、扫雷游戏设计总结316、致谢317、参考文献32abstractgame industry develops by leaps and bounds,and it has a great impact on the way people live and entertainment, games provide consumers with a variety of virtual space, so that consumers can enjoy the free fun of the
3、 virtual world, achieve the dream that may never achieve in real life, and satisfy the psychological and spiritual needs consumer.the sweep mine game is a small game that the windows operating system have. over the past few years the windows operating system has experienced a number of chang,and bec
4、ome much larger and more complexed however, this lovely game in any version of the windows operating system has keep the original appearance. almost every computer users have come into contact with it, and love this game.the sweep mine game is an classical little game, and there are many ways can ac
5、hieve it,we can use many different algorithms and languages.such as c,c+,vb java and so on.this study is based on visual c+ 6.0 to designed and made the sweep mine game,it,s function is similar to the game that the windows operating system has. first we introduced the whole idea of making the game a
6、nd the process planning of the game design,then introduced the method of the layout of minefields and mines randomly generated. and focuses on the process of dealing with the incident in the game, among them, the mouse events and clearance of unexploded landmines around the box are the two most impo
7、rtant thing, the mouse events is to use the message that the mouse give to understand the the user's intent, then make the corresponding action, and clearance of unexploded landmines around the box has became simply with the introduction of the "recursive” key words: sweep mine, visual c+ 6
8、.0, affairs, recursion摘要游戏业发展一日千里,该行业极犬的影响和改变了人们的生活和娱乐方式,游戏为消 费者提供丰富多彩的虚拟空间,使消费者可以自rtl自在的享受虚拟世界的乐趣,实现自己 在现实生活着那个可能永远不能实现的梦想,满足了消费者的心理和精神需求。扫雷游戏是windows操作系统自带的一个小游戏,过去的几年里windows操作系统 历经数次换代,变得越来越庞大、复杂,但这个可爱的小游戏在任何版本的windows操作 系统里去却依然保持着原貌。但几乎每个电脑使用者都接触过它,并ii深爱着这款小游戏。扫雷游戏是比较经典的一款小游戏,实现它的方法很多,可以用很多不同算法
9、和语言 实现,如c,c+ +,vb,java等。本论文研究的是以visual c卄6.0为开发坏境,设计并开 发一款扫雷游戏,其功能类似于windows操作系统自带的扫雷游戏。论文首先介绍了制作 游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实 现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷 区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做 出相对应的动作,而清除未靠近地雷区方块由于引进了“递归''这个概念而使其简单化。关键字:扫雷;visual c+ 6.0;事件;递归1引言1.1课题背
10、景及意义当前随着计算机的深入普及,越來越多的人自了个人电脑,人们运用计算机完成许多 重要的工作,计算机在人们的生活中变的越来越来重要。随着计算机的应用和发展计算机 已经不单纯是一个工作工具,人们越来越重视计算机的娱乐性了,近年来游戏产业规模持 续成长,全球每年游戏业总产值已经突破200亿美金,远远超越好莱坞屯影产业以及音乐 娱乐事业,而成为口前娱乐事业的最大主流。不过游戏产业光鲜亮丽的背后,却也隐含着 高风险、高成木的危机,显示游戏产业慢慢步入“微利时代”。目前整个游戏产业的运作模式己经跟好莱坞电影产业的运作模式相同,电影产业有制 片、发行、宣传等分工,游戏产业亦同,由专业的游戏研发小组负责研
11、发游戏,也有如微 软、美商艺屯这类国际级犬厂负责游戏发行,其至连“游戏制作人”也被培养成明星一样成为一种招牌,如任天堂有王牌制作人宫本茂、sega有铃木裕.konami有小岛秀夫、capcom有三上真司、tecmo有板垣伴信.等,明确的游戏产业分工的确有助丁游戏产业的规模发 展与进化,但也无形屮让游戏开发成本大增。为了降低游戏开发成本,开发娱乐性强成本 低的游戏就成为当前的主要课题,在这种趋势下各种小型的低成木的游戏软件应运而生。 在这其中,系统自带的小游戏也占据了相当重要的地位,与那些网络游戏和3d游戏相比, 它有编写简单容易上手等特点,非常适合人们在完成工作的时候适当的娱乐要求。这些小 游
12、戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得 到开发。这些小游戏包括扫雷,弹球,纸牌等等。而本课题就是扫雷游戏的设计。1.2 visual c+发展概况visual c+是一个功能强大的可视化软件开发工具。口 1993年microsoft公司推 ii; visual c+1.0后,随着其新版木的不断问visual c+已成为专业程序员进行 软件开发的首选工具。虽然微软公司推出了 visual c+.net(visual c+7.0),但它的应用的很大的局限 性,只适用于windows 2000,windows xp和windows nt4.0。所以实际中,更多的
13、 是以visual c+6.0为平台。visual c+6.0不仅是一个c+编译器,而且是一个基于windows操作系统的可 视化集成开发环境(integrated development environment,ide)。visual c+6.0 由许多 组件组成,包括编辑器、调试器以及程序向导appwizard类向导class wizard等开 发工具。这些组件通过一个名为developer studio的组件集成为和谐的开发环境。 visual c+它大概可以分成三个主要的部分:1. developer studio,这是一个集成开发环境,我们日常工作的99%都是在它 上面完成的,再加上
14、它的标题赫然写着"microsoft visual c+",所以很多人理所当然 的认为,那就是visual c+ x o其实不然,虽然developer studio提供了一个很好的 编辑器和很多wizard,但实际上它没有任何编译和链接程序的功能,真止完成这些 工作的幕后英雄后面会介绍。我们也知道,developer studio并不是专门用于vc的, 它也同样用于vb, vj, vid等visual studio家族的其他同胞兄弟。所以不要把 developer studio当成visual c+,它充其量只是visual c+的一个壳了而已。这一点请切记!2 mfc,
15、从理论上来讲,mfc也不是专用于visual c+, borland c+, c+builder和symantec c+同样可以处理mfc。同时,用visual c+编写代码也并 不意味着一定要用mfc,只要愿意,用visual c+来编写sdk程序,或者使用stl, atl, 一样没有限制。不过,visualc+本来就是为mfc打造的,visual c+屮的许 多特征和语言扩展也是为mfc而设计的,所以用visual c+而不用mfc就等于抛 弃了 visual c+屮很大的一部分功能。但是,visual c+也不等于mfc。3. platform sdko这才是visual c+和整个vi
16、sual studio的精华和灵魂,虽然 我们很少能直接接触到它。大致说来,platform sdk是以microsoft c/c+编译器为 核心(不是visual c+,看清楚了),配合masm,辅以其他一些工具和文档资料。 上面说到developer studio没有编译程序的功能,那么这项工作是由谁来完成的呢? 是cl,是nmake,和其他许许多多命令行程序,这些我们看不到的程序才是构成 visual studio的基石。visual c+之所以具有如此广泛的用途是因为它具有以下的特点:(1) 真正的面向对象编程,使开发人员不用加入太多的代码,加快了系统开发的速度。(2) 可视化的编程方
17、法以及向导的功能,使开发人员不用加入太多的代码就可以开发 出标准的windows程序。(3) 数据访问的特性,允许对包括microsoft sql server和其他企业数据库在内的大部 分数据库格式建立数据库和前端应用程序,以及可调整的服务器端部件等。(4) 通过activex技术可使用其他应用程序提供的功能,例如microsoft word字处理器、 microsoft excel电子数据表及jt他windows应用程序,甚至可直接使用visual basic创建 的应用程序和对象。(5) internet功能强大,使用户很容易在应用程序内通过internet或企业内部网(intranet
18、) 访问文档和应用程序,或者创建internet服务器应用程序。(6) 已完成的应用程序是真正的.exe文件,您可以自由发布。1.3关于本课题随着世界经济的长足发展和计算机技术的h益成熟,计算机被应用到人类活动的各个 领域,齐种应用软件也相继问世,这其小有相当一部分是游戏软件。使用游戏软件自然是 为了满足人们对娱乐性的要求,而有些软件大都采用3d设计对系统配置的要求较高。在众多游戏软件中,也不乏一些小游戏的身影,它们对系统的配置要求较低。能够满 足人们对娱乐性的需求,是人们在完成工作娱乐时候的最好选择。现在越来越多的人投入 到这种小游戏的开发当中,它已经成为一类必不可少的游戏软件。在各种操作系
19、统屮都附 带了一些小的游戏,而这些游戏也成为电脑用户软件中不可或缺的一部分。作为本系统的开发工具,microsoft visual c+ 60成为首选。它具有可视化的编程 界面、详细的提示、以及完善的帮助文档,使得软件开发人员感到无比的亲切感。2游戏的总体分析与设计2. 1游戏功能简介当而各种游戏软件层出不穷。因为游戏的开发成本非常大,所以游戏的开发具有一定 的风险性,但是一些小游戏的开发貝有成本小,编写简单的优势,所以这些小游戏在游戏 开发中也占有一席z地。在这类小游戏中包括益智类游戏,它以画面精美游戏方法简单等 特点得到大家的认可。成为人们在工作z余不可或缺的好伙伴。针对真种情况我用vb编
20、 写了扫雷这款小游戏。卜面对该游戏的功能做个简单的介绍。扫雷游戏的基木功能:点击鼠标左键于未知区域,如果未知区域有雷,游戏停止,显 示所有的地雷。如果没雷,则显示周围雷数,如杲周围没雷,则再杳看周围八个区域是否有 雷直到有雷为止并显示,这其实是一个递归过程。点击鼠标右键于未知区域,则将其置为有雷而不管是否真的有雷。可选择初、中、高 三级并可门定义雷数和区域大小。雷区上部左侧显示总雷数减被标明有雷区域的数no雷区上部中间位置显示一按钮用于开局和显示鼠标动作的结杲。雷区上部右侧显示扫雷的时间。将雷全部扫清后,则显示一对话框将你的姓名记入排行榜。2. 2设计构想相信大多数使用windows操作系统的
21、使用者,对这款游戏都不陌生。这款游戏不止操 作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游戏的设计内容无形屮也不断 训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不 时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。 在设计之前,我们先来了解这款游戏的规则。在不掀开任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在掀开方 块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所 有不含地雷的方块掀开,游戏才算成功。游戏
22、的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻 开方块,当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键 则方块会以未标示f标示f疑似三者关系不断循坏。游戏者可以通过地雷区内的数字提示 了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”, 则表示以其为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,口周边八个方块也都没有地雷时,方块会以被翻开方块的八个方 向将空口方块翻开。2. 3流程规划流程规划大致上可以分为三个部分,分别为:画面初始、游戏者按下第一个方块和为 非地雷方块时展开。眩面初始时,以游戏者最后一次设定的地雷
23、区大小为范围画出地雷区,但此吋并未产 生地雷。当游戏者按下第一个方块时产生地雷资料并启动定时器,为何在游戏者按下第一 个方块才产生地雷资料呢?其主要的用意在于不要让游戏者第一次就踩到地雷,这样在某 种程度上可以提高游戏者游玩的气氛。接着就是如何判断按下的方块是非地雷时的处理, 这也是整个游戏的技术核心,我们可以通过递归的观念来检查周边的方块是否含有地雷及 是否继续往外翻开。基于以上思路,绘制功能图如下:3.扫雷游戏的具体实现过程3.1扫雷游戏模块的实现扫雷游戏的开发主要包括两大部分:一个部分是布雷,该部分主要将雷随机布置在游 戏区域内,以避免出现相同的雷区布置地图。另一部分是扫雷,该部分包括判
24、断鼠标左键 点击某区域该区域是否是雷,如果是雷该如何操作,如果不是雷该如何操作,鼠标右键点 击某区域时如果判断该区域是雷则加以标记,如果不是雷也加以标记,以及当鼠标双击某 区域时,判断与该区域相邻的其它8个区域是否是雷并做一个标记。下面首先介绍第一部 分之一 扫雷主窗体创建。3. 1. 1扫雷游戏主窗体的创建启动visual c+ 6.0后,选择新建工程,visual c+ 6. 0提供了用户可能需要的各 种类型的应用程序模板。如果是这种情况,选择mfc appwizard (exe)项目,输入工程名称 和位置,将创建一个新的工程如下:选择基于dialog based:single docum
25、entmultiple documents dialog based?p document/view architecture supwhat type of application would you like to create?what language would you like your resources in?< 旦acknext >finishcancel中文中国(appwzchs.dll)其它的默认,建立新的工程。卜'而介绍一卜'如何创建窗体界而:首先,转换窗口到资源编程窗口,修改主对话框的caption屈性为“周龙扫雷游戏程 序设计”,添加2个
26、static控件,1个caption改为"剩余雷数”,1个caption改为空用来 表示剩余的雷数。其设计如下:当然,这只是设计的初始的界面,我们还需要在程序屮添加其它代码以初始化和美化 运行的主界面。添加如下代码:void onpaint ()cdc memdc;cbitmap bk;bk.loadbitmap(idb_back); memdc.createcompatibledc(pdc);pdc->bitblt(0,0,600,600,&m emdc,0,0,srccopy);主要是美化运行界面,如下:接下来要绘制鼠标操作区域,即游戏区域。添加绘制棋盘函数draw
27、chessboard()如下:void cshaoleidlg:drawchessboard()cdc* pdc = getdc();cpen pen(ps_solid,l ,rgb(0,0,0);pdc->selectobject(&pen);for (int i = 0; ivrow+1; i+)pdc->moveto(x+cx* ,y);pdc->lineto(x+cx*(i),y+row*cy);for (int j = 0; j<col+1; j+)pdc->moveto(x,y+(j)*cy);pdc->lineto(x+col*cx,y
28、+(j)*cy);然后的运行结果如厂3.1.2主界面控制菜单的设计接下来回到资源编程界面,编写菜单资源,用来控制扫雷的过程,以及难度选定,和 背景音乐等。(1) “设置菜单“包含:开始,初级,中级,高级,音乐开,音乐关,退岀其中,音乐开包含默认的音乐和打开本地音乐两个子菜单项。(2) “帮助“菜单获取该软件的版本信息。如下:设置帮助帮始级级级乐乐uj置开初中高音音2设帮助:f1f2f3将菜单添加到主界而,至此主窗体基本创建完毕。3. 2扫雷游戏核心布雷算法设计(1)扫雷游戏是由很多相同大小的格子组成的,一般计算机屮自带的游戏格子规格为9*9, 16*15和30*16 (第一个数字代表函数,第二
29、个数字代表列数)。规格不同,需要埋的地雷数目就不同,这就会涉及到随机埋雷算法,最简单的是一下两种函数的结合:void srand(unsigned int seed);/seed 为随机种子一般这样使用该函数:srand(unsigned) time(null);/即利用系统时间作为随机种了,因为系统内置的时钟 是在时刻变化的。然后使用如下函数产生随机数:int rand (void) 可尝试(0, rand.max) z间的随机整数,rand.max为十六 进制的0x7fff可进行一些算术运算,使z产生所需要的任意随机数。(2)扫雷游戏还要求在没有雷的地方被点击后就会显示一个数字表示它周围有
30、 儿个雷,这里分析实现这个功能的算法。把整个游戏区看成一个二维数组 minefieldij:111213141516171819212223242526272829313233343536373839414243444546474849515253545556575859 要知道minefield2周围有几个雷,只要去检测如下8个网格是否有雷即可。minefield 1 5,minefield l6,minefield 17 minefield25,minefield27minefield 35,minefield36,minefield37将上面的8个网格的位置关系与minefield进行比
31、较,不难发现它们之间存在一定的数 学关系,抽象看來就是:minefieldij周围雷的个数是由如下8个位置处的雷的总合决定的。 minefieldi-1 j-1 ,minefieldi-1 j ,minefield i-1 j+1 minefield j-1 ,minefieldi j4-1 minefieldi+1 fj-l,minefieldi4- l|j,minefieldi+ lj+l上面几个位置可能超出了边界,因此需要根据实际情况给变量i与j设置范围。根据以上的分析,设计布雷算法的代码,添加bulei()函数用于随机布雷。void bulei()/随机布雷int kl,k2;sran
32、d( (unsigned)time( null);for(int i=0;i<m_num;i+)kl=rand()%row;k2=rand()%col;if(m_nodelistklk2.m_type!=nclei)m_nodelistk 1 k2 .m_type=nclei;elsei-;continue;if(k 1 -l>=0)&&(k2-l>=0)&&(m_nodelistk 1-1 k2-1 .m_type!二nclei)/左上方 m_nodelistk 1 -1 k2-1 .m_type=ncnumber;m_nodelistk 1
33、-ik2-1 .m_around+= 1;if(k 1 -l>=0)&&m_nodelis(k 1-1 k2.m_type!=nclei) 上方m_nodelistk 1 -1 k2 ,m_type=ncnumber;m_nodelistk 1 -1 k2.m_around+= 1;if(k 1 -l>=0)&&(k2+1 <col)&&m_nodelistk 1-ik2+1 .m_type!二nclei)/右上方mlnodelis 二 k 匸=k2+ 二mltyp8ncnumber- mlnodelis 二 k l'=
34、k2+ 二mlaround+h 1 八 if(k2 一 vho)<&<&mlnodelis二 k 1 =k2 二mltype fncledvmd mnodelis 二 k 1=$ 二.mltypeuncnumber; mlnodelis 二 k 1 =k2 二.mlaround+h 1; if(k2+1 acod<&<&mlnodelis 二 k 1 =k2+ 二.mltypellncledva h mlnodelis 二 k 1 =k2+ 二.mltypchncnumber- mlnodelis 二 k 1 =k2+ 二mlaround
35、+h 1 八 ifsk - i arow)知円(k2 一 vho)&<&mlnodelis 二 k 1 +1 =k2 二mltypellnclei)1mf £mlnodelis 二 k 1 +1 =k2 二mltyp8ncnumber- mlnodelis 二 k 1 +1 =k2 二mlaround+h 1 八 if(k 一 + 一 arow)<&<&mlnodelis 二 k 】+1 =k2.mltypellncleiwt 曲 mlnodelis 二 k 1 + 一 =k2.mltypchncnumber- mlnodelis 二
36、 k 1 + 】=k2mlaround+h 1 八 if(k 1 +1 aow)<&<&(k2+1 ac01)&:&mln0delis 二 k 1+1 =k2+ 二.mltypellnclei)、于.bmlnodelis 二 k 1 + 】=k2+ 二.mltypehncnumber- mlnodelis二 k 1+1 =k2+1maround+= 1;当然,还得添加绘图代码用来在游戏区域显示随机布置的雷和周边情况,在onpaint函数屮添加如下代码:void onpaint()for(int i=0;i<row;i+)for(int j=0;
37、j<col;j+)if(m_nodelistij.m_type=nclei)memdc.selectobject(&bmp 1); pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij.m_point.y-cy/2,20,20,&m emdc,0,0,srccopy);elseif(m_nodelisti j .m_around= 1)memdc.selectobject(&b mp_l); pdc->bitblt(m_nodelisti(j.m_point.x-cx/2,m_nodelisti|j.
38、m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around=2)memdc.selectobject(&bmp_2); pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij.m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around=3) memdc.selectobject(&bmp_3);pdc->bitblt(m_nodelisti
39、j.m_point.x-cx/2,m_nodelistij. m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around=4)memdc.selectobject(&bmp_4);pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij. m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around=5)memdc.selectobject(&bmp
40、_5);pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij. m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around=6)memdc.selectobject(&bmp_6);pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij. m_point.y-cy/2,20,20,&memdc,0,0,srccopy);else if(m_nodelistij.m_around
41、=7)memdc.selectobject(&b mp_7);pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelisti|j.m_point.y-cy/2,20,20, &m emdc,0,0,srccopy);else if(m_nodelistij.m_around=8)memdc.selectobject(&b mp_8);pdc->bitblt(m_nodelistij.m_point.x-cx/2,m_nodelistij.m_point.y-cy/2,20,20,&memdc,0,0,srcco
42、py);随机布雷效果比较如下:第一次运行:-一1221111112*2审 1 1;厂 m*2ll:l n*n1.2112.*.丄,t 4*5*12.22.1*21_l_ 22113 企 2 厂12 211112*2 11335321112322111 112*2>11*“ *2>1i 23*32211321233332111111111t4 03»1- lxx - - l»sl 334.2.2it 1233321 - 111-1234*4*31 .1.1111,..2.1.21. 111审*2*11*11112321厂j10-1jl1
43、1*2112*1匸蔓 2l2a:ll2: 11,1:1*32 llllz* 1.第二次运行:如上看來,随机彳j雷成功。3. 3扫雷鼠标事件的处理(1) 首先,设计雷区和非雷区的判断算法。扫雷时需要判断每个格子的状态,可事先 为格子设定一些状态,使之对应不同的bool值或整数值。在二维、三维游戏里,有一种 简单的构造地图的方法,即将地图划分为的规格格子,使每一个格子对应二维数组中 的一项,当鼠标单击时,通过找出鼠标点击区域,找到相应的格子,判断格子状态来替换 相应的位图。具体算法思想如下:a. 在应用程序的客户区划分一块区域,将该区域划分为相同大小的格子;b. 将每一个格子的状态对应到二维数组的
44、相应项上;c. 当鼠标点击某一块区域时,首先判断是否在各种区域,然后再通过鼠标的坐标找到相 应的格子;d. 查询格子的状态,从而调用相应的位图进行位图替换;说明:windows的消息响应机制对于编写一些小游戏是非常方便的,当编写大型2d 或3d游戏时,windows api就显得有些不足,此时应使用directx或opengl等大型图 形库來进行设计及编码。(2) 鼠标左键事件的处理。分两种情况:a. 当相应区域不是雷区时,挖开区域,并且若能据此判断周围区域也不是雷区则将周围 相应区域也挖开;b. 当区域是雷区时,则界面中所有的雷区同时“炸开j第一步先显示一个提示框,第 二部当提示框关闭时,所
45、有非雷区显示出來。c. 鼠标在笑脸图片上,单击可以重新开始。(3) 对单击鼠标右键事件处理第一次用右键单击某个区域时,改区域上插上一面小红旗,此时单击左键没有任何变 化,第二次用右键单击时恢复原状。(4) 双击左键事件处理在展开的区域,并且已经确定了周围的雷数,双击叮以叠加展开非雷区域,以减少用 户的单击操作。基于以上的思想,在vc+ 6.0中的核心编码如下:onlbuttonup(uint nflags, cpoint point)/ todo: add your message handler code here and/or call defaultint num;onlei(point
46、);onnumber(point);onblank(point);num=0;for(int a=0;a<row;a+)for(int b=0;bvcol;b+)if(m_nodelistab.msused=false)num+;if(m_shengyu=0&&num >=row*col)m_face=2;invalidate();messagebox(”你真聪明! !丁扫雷”,mbconwarningimb_okcancel);cdialog:onlbuttonup(nflags, point);其屮的 onlei(), onnumber(), onblank()
47、函数分别如下:void cshaoleidlg:onlei(cpoint point)for (int i = 0 ;i<row;i+)for (int j = 0; j<col;j+)tmp = m_nodelistij.m_point;crect rect(tmp.x-1 otmp.y-10,tmp.x+ 10,tmp.y+10);讦(rect.ptlnrect(point)if(m_nodelistij.m_isused=true&&m_nodelistij. m_i ssign=false) if(m_nodelistij.m_type=nclei)for
48、(int m = 0 ;m<row;m+)for (int n= 0; n<col;n+) if(m_nodelistmn.m_type=nclei)m_nodelistmn.m_isused=false; m_nodelistm n .m _issign=false;elseif(m_nodelistmn.m_isused=true) m_nodelistmn.m_issign=true;if(m_nodelistmn.m_isused=false&& m_nodelistmn.m_issign=true) m_nodelistm n .msused=true;m
49、_face= 1; invalidate(); baozha();messagebox(h你还差了点,不服重来!丁扫雷”,mbconwarningimb_okcancel);void cshaoleidlg:onnumber(cpoint point)cpoint tmp;for (int i = 0 ;i<row;i+)for (int j = 0; j<col;j+)tmp = m_n odeli s t i j . m_poi n t;crect rect(tmp.x-1 otmp.y- 10,tmp.x+ 10,tmp.y+10);讦(rect.ptlnrect(point
50、)if(m_nodelistij.m_isused=true&& m_nodelistij.m _issign=false)if(m_nodelistij.m_type=ncnumber)m_nodelistij.m_isused=false; m_nodelistij.m_issign=false;invalidateq;void cshaoleidlg:onblank(cpoint point)cpoint tmp;for (int i = 0 ;i<row;i+)for (int j = 0; j<col;j+)tmp = m_n odeli st i j .
51、 m_poi n t;crect rect(tmp.x-10.tmp.y-10,tmp.x+ 10?tmp.y+10);if (rect.ptlnrect(point)if(m_nodelistij.m_isused=true&&m_nodelistij.m _issign=false)if(m_nodelistij.m_type=ncblank)m_nodelistij.msused二false; if(i-l>=0)&&(jl>=0)m_nodelisti-lj-l.msused二false; if(m_nodelisti-lj-l .m_typ
52、e=ncblank) if(i-1 -l>=0)&&(jl 1 >=0)&& m_nodelisti-1 -1 j -1 -1 .m_type !=nclei) m_nodelisti-l-lj-l -l.m_isused=false;if(j-l -l>=0)&&m _nodelisti-lj-m .m_type!=nclei) m_nodelisti-1 j-1 -1 .m_isused=fals e if(i-l-l>=0)&&m_nodelisti-l-lj-l .m_type!=nclei)if(
53、i-l -l>=0)&&m_nodelisti-l 1 j .m_type!二nclei)m_nodelisti-l -lj.m_isused=false;if(i-l>=0)m_nodelisti-lj.msused二false;if(i-l>=0)&&(j+lvcol)m_nodelisti-1 j+1 .m_isused=false;if(m_nodelisti-1 j+1 .m_type=ncblank)if(i-1 -l>=0)&&m.nodelist i-1 -1 j+1 .m_type !=nclei) m_
54、nodelisti-1 -1 1 .m_isused=false;if(i-1 -1 >=0)&&(j+1 +1 <col)&&m_nodelist i-1 -1 j+1+1 .m_type !=nclei) m_nodelist i-1 -1 j+1 +1 .m_isused=false;if(j+1 +1 <col)&&m_nodelisti 1 j+1 +1 .m_type!二nclei) m_nodelisti-1 j+1 +1 ,m_isused=false;if(j+1+1 <col)&&m_n
55、odelistij+l + l.m_type!=nclei)m_nodelistij+l + l.msused二false;if(j+l<col)m_nodelistij+l.m_isused=false;if(i+1 <row)&&(j-l>=0)m_nodelisti+ lj-l.m_isused=false;if(i+1 +1 <row)&&m_nodelisti+ lj-l .m_type!=nclei)m_nodelisti+ lj-l.m_isused=false;if(i+1 +1 <row)&&(j 1 -1 >=0)&&m_nodelisti+ l + lj-l-l.m_type!=nclei) m_nodelisti+ l + lj-l-l .m_isused=false;if(j-1 -l>=0)&&m_nodelisti+ lj-l-l.m_type!=nclei)m_nodelisti+1 j-1 -1 .m_isused=false;if(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 课件标题模板教学课件
- 南京工业大学浦江学院《食品添加剂》2022-2023学年第一学期期末试卷
- 都江堰某希望小学教学楼及综合楼施工组织设计
- jqx第课时说课稿
- 南京工业大学浦江学院《金庸小说欣赏》2021-2022学年第一学期期末试卷
- 《小小旅行家》说课稿
- 南京工业大学《自动化》2022-2023学年第一学期期末试卷
- 南京工业大学《药物商品学》2023-2024学年第一学期期末试卷
- 南京工业大学《水工程施工》2022-2023学年第一学期期末试卷
- 南京工业大学《企业战略管理》2022-2023学年第一学期期末试卷
- 高边坡脚手架专项施工方案
- 风电场月度运行分析模板(共28页)
- 起搏的基本概念
- 明挖隧道施工方案
- 消防部队水源手册范本
- 政策工具视角下的中国教育扶贫政策文本研究
- 教育部新版本科专业目录(2012年)
- 七年级英语上培优扶差记录表
- 二级减速器箱体盖工艺卡片
- 互联网高速专线电路开通测试报告[宝典]
- 虎牌电饭煲中文使用说明书
评论
0/150
提交评论