




已阅读5页,还剩48页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于QT的扫雷游戏的开发与实现毕业设计(论文)任务书第1页毕业设计(论文)题目基于QT的扫雷游戏设计与实现毕业设计(论文)要求及原始数据(资料)1介绍QT开发框架,以及扫雷游戏;2深入了解基于QT的扫雷游戏的相关技术;3熟练掌握QT开发框架的应用,训练编写C程序的能力;4设计并实现基于QT的扫雷游戏;5深入分析基于QT的扫雷游戏的关键技术与编写语言;6训练检索文献资料和利用文献资料的能力;7训练撰写技术文档与学位论文的能力。第2页毕业设计(论文)主要内容1介绍QT开发框架,以及扫雷游戏;2了解QT编程的相关技术;3熟悉QT开发框架;4设计基于QT的扫雷游戏;5深入分析基于QT的扫雷游戏的关键技术与设计流程;6熟练掌握基于QT开发框架的C编程;7设计与实现基于QT的扫雷游戏。学生应交出的设计文件(论文)1内容完整、层次清晰、叙述流畅、排版规范的毕业设计论文;2包括毕业设计论文、源程序等内容在内的毕业设计电子文档及其它相关材料。第3页主要参考文献(资料)1谭锋,章伟聪,VISUALC程序设计实训教程,北京科学出版社,200382成洁,卢紫毅LINUX窗口程序设计QT精彩实例分析M北京清华大学出版社,20083王超龙,陈志华,VISUALC入门与提高,北京人民邮电出版社,200264肖宏伟,VISUALC实效编程百例,北京人民邮电出版社,200485张建强,张秀梅扫雷游戏策略初探J数学教学,2004(6)32336肖永亮VISUALC游戏编程基础,北京电子工业出版社,200557赵大伟,肖周芳,张艳从扫雷游戏浅谈一些算法问题J科技信息,200829698刘加海,余建军,VISUALC程序设计基础,北京科学出版社,200389(美国)IVORHORTON,BEGINNINGVISUALC2005,清华大学出版社,200710(美国)斯塔勒,游戏编程中的数理应用,红旗出版社,2005311(美国)MICHAELDAWSON,BEGINNINGCGAMEPROGRAMMING,人民邮电出版社,2006112(美国)莫里森,游戏编程入门,人民邮电出版社,2005913(美国)麦克沙夫瑞,游戏编程全接触,人民邮电出版社,20061专业班级学生要求设计(论文)工作起止日期2014年3月17日2014年6月27日指导教师签字日期2014年3月17日教研室主任审查签字日期系主任批准签字日期基于QT的扫雷游戏设计与实现摘要本论文研究的是以QT为开发环境,设计并开发一款扫雷游戏,其功能类似于WINDOWS操作系统自带的扫雷游戏。实现的功能有界面的规划,游戏难度的调整,计时器,鼠标事件以及游戏完成的判定。论文首先介绍了制作游戏的整体思路及整个游戏设计的流程规划,然后介绍了雷区的布置及地雷随机产生的实现方法;重点介绍了在游戏过程中各事件的处理,其中又以鼠标事件和清除未靠近地雷区方块这两方面最为最要,鼠标事件是利用鼠标所发出的信息了解使用者的意图,进而做出相对应的动作,而清除未靠近地雷区方块由于引进了“扩散”这个概念而使其简单化。本次设计只是完成了扫雷游戏的基本功能,在细节方面仍然有待完善。关键词扫雷;QT;事件;扩散DESIGNANDIMPLEMENTATIONOFMINESWEEPINGGAMEBASEDONTHEQTPLATFORMABSTRACTWHATMYTHESISRESEARCHFORISBASICONTHEDEVELOPENVIRONMENTOFQT,DESIGNANDDEVELOPAMINEGAME,ITSFUNCTIONISSIMILARTOTHEMINEGAMESOFTHEWINDOWSOPERATINGSYSTEMTHETHESISHASINTRODUCEDTHELAYOUTOFMINEDAREASANDTHEMETHODOFHOWTOCREATETHEMINESATRANDOMITUSEVAIRIESOFCOMPONENTSINQTANDTHECOMBINATIONOFSOMESIMPLECALCULATIONSTHETHESISLAYSEMPHASISONINTRODUCINGTHEPROCESSINGOFEACHEVENTINTHEGAMEAMONGTHESEEVENTS,THEMOUSEEVENTANDTHEEVENTOFCLEARANCEOFTHEAREAWHICHISNTCLOSETOTHEMINEFIELDAREMUCHMOREIMPORTANTTHETHEORYOFMOUSEEVENTISTHATTHEINTENTIONOFUSERISLEARNEDBYTHEINFORMATIONSENTOUTBYTHEMOUSEANDTHENTHEPROGRAMRUNSACCORDINGTOTHEINFORMATIONTHEOTHEREVENTISSIMPLIFIEDBYTHEINTRODUCTIONOFTHECONCEPTOFSPREADTHISDESIGNHASBEENCOMPLETEDTHEBASICFUNCTIONOFMINEGAMETHEDETAILSSTILLNEEDTOBEIMPROVEDKEYWORDSMINEGAME;QT;AFFAIRS;SPREAD目录摘要IABSTRACTII第1章绪论111研究背景112开发的目的及意义113开发工具的选择1第2章QT架构与平台搭建221QT介绍2211QT语言的特性2212QT的优势2213QT/EMBEDDED介绍322QT的架构423QT的组成424QT开发平台的搭建625QTSDK及QTCREATOR工具的安装6第3章游戏的总体分析与设计831设计构想832流程规划833画面规划10第4章游戏的详细设计1141游戏的开始1142雷区分布1243游戏中主要模块的介绍与使用14431鼠标事件14432地雷及雷区表面探测情况15433清除未靠近地雷的方块16434游戏难度的选择1744游戏的判断19441游戏成功完成19442游戏进行失败2145重新进行游戏2246关于游戏2347英雄榜2448游戏测试及结果25总结26参考文献27致谢28外文原文29外文翻译42第1章绪论扫雷最原始的版本可以追溯到1973年一款名为“方块”的游戏。不久之后,“方块”被改写成了游戏“RLOGIC”。在“RLOGIC”里,玩家的任务是作为美国海军陆战队队员,为指挥中心探出一条没有地雷的安全路线,如果路全被地雷堵死就算输。两年后,汤姆安德森在“RLOGIC”的基础上有编写出了游戏“地雷”,由此奠定了现代扫雷游戏的雏形。1981年,微软公司的罗伯特杜尔和约翰逊两位工程师在WINDOWS31系统上加载了该游戏,扫雷游戏才正式在全世界推广开来。11研究背景在计算机逐步渗入社会生活各个层面的今天,计算机已经成为人们日常生的一部分,越来越多的人使用计算机办公、娱乐等等。扫雷游戏是WINDOWS操作系统自带的一款小游戏,在过去的几年里,WINDOWS操作系统历经数次换代更新,变得越来越庞大、复杂,功能也越来越强大,但是这款小游戏依然保持原来的容貌,可见这款小游戏受到越来越多人的喜爱。本次的毕业设计我将利用QT作为开发工具,开发一款类似的“扫雷游戏”。通过研究WINDOWS操作系统自带的扫雷游戏,我们可以发现在这个游戏中主要有以下两个关键的地方第一个是初始化问题,包括随机产生本局游戏中雷的总数,雷的分布对于每一个小区域如何获取周围地区分布的雷数等等。第二就是对鼠标事件的处理问题,既在游戏过程中对鼠标事件应如何做出反应。12开发的目的及意义经过四年的大学学习,我对理论知识已经有了一定的了解与认知,本次的毕业设计便是将书本上所学的理论知识与实际相结合,同时也是对所学知识的一种检查,希望通过本次的毕业设计使自己在程序的开发和设计上有新的认识并能有所提高。本次毕业设计既锻炼了我们的实际动手能力,又在老师的指导下进行了一次模拟实际产品的开发,对于我们以后工作能力的培养具有重要意义。13开发工具的选择由于毕业设计的选题,开发工具用的是QT。QT是一个跨平台的C图形用户界面库,由挪威TROLLTECH公司出品,目前包括QT,基于FRAMEBUFFER的QTEMBEDDED,快速开发工具QTDESIGNER,国际化工具QTLINGUIST等部分QT支持所有UNIX系统,当然也包括LINUX,还支持WINNT/WIN2K,WIN95/98平台。第2章QT架构与平台搭建21QT介绍QT是一个多平台的C图形用户界面应用程序框架,而且QT提供了一组更容易理解的GUI类,运行的更快,另外QT特有的信号和槽,更易使用。QT面向对象且很容易扩展,并且允许真正地组件编程。QT工具包是一个C的类库并且是使用“一次编写,随处编译”的方式构建多平台的图形用户界面程序的一套工具。由于QT特性平台无关性、优化了内存和资源的利用、拥有自己的窗口系统、模块化可裁剪性、代码完全公开。211QT语言的特性QT是TROLLTECH公司的一款图形开发产品,它采用完全的面向对象技术来进行图形应用程序的设计,允许真正的组件编程,QT是一个全面的C应用程序开发框架,它包含一个类库,和用于跨平台开发及国际化的工具,可以开发高性能,跨平台客户端,以及服务器端的应用程序。QT类库是一个拥有超过400个C类,同时不断扩展的库。它封装了用于端到端应用程序开发所需要的所有基础结构。优秀的QT应用程序接口包括成熟的对象模型,内容丰富的集合类,图形用户界面编程与布局设计功能,数据库编程,网络,XML,国际化,OPENGL集成等等。QT设计者是一个功能强大的GUI布局与窗体构造器,能够在所有支持平台上,以本地化的视图外观与认知,快速开发高性能的用户界面。QT语言家是一套用来消除国际化工作流程中所带来障碍的工具。使用QT语言家,开发小组可把应用程序的翻译转换外包给非技术性翻译人员,从而可增加精确度,大大加快本地化处理过程。QT助手一个完全可自定义,重新分配的帮助文件或文档浏览器,它可与基于QT的应用程序运行。使用QT助手,开发小组同样能够很大程度上加快文档的处理过程。212QT的优势作为嵌入式图形界面开发工具,QT优势很多,有如下一些1支持平台广泛QT应用程序接口与工具兼容于所有支持平台,让开发员们掌握一个应用程序接口,便可执行与平台非相关的应用开发与配置,其支持的平台有QT/WINDOWS(WINDOWSXP,2000,NT4,ME/98)、QT/MACMACOSX、QT/X11LINUX,SOLARISHPUX,IRIX,AIX等。2封装多QT对不同平台的专门QPI进行了专门的封装(文件处理、网络等)。3面向对象QT具有模块设计和注重软件构件或元素的可重用性的特点。4构件支持QT提供信号(SIGNAL)和插槽(SLOT)概念,这是一种类型安全的方法,它允许回调,冰支持对象之间在彼此不知道对方信息的情况下进行合作,这使得QT非常适合于真正的构件编程。5友好的联机帮助QT提供了大量的联机参考文档,有超文本HTML方式,也有UNIX帮助手册和补充说明,并且对于初学者,其中的指南将一步步介绍如何进行QT编程。6便利性由于QT是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,QT定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题。7用户自定义使用其他的一些工具包经常会遇到这样的一种情况,没有真正适合需求的组件,声称自定义的组件对用户来说就像一个黑匣子。而在QT中生成用户自定义的组件非常简单,而且易于修改组件的行为。8国际化QT为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,QT还支持双字节16BIT国际字符标准。9丰富的API函数QT为专业应用提供了大量的函数,在QT的API中含有大约250个C类,大多数的类都是GUI专有的。10可用户化外观QT支持主题,基于QT的应用程序能够在WINDOWS外观、MOTIF外观,以及其他一些用户化主题之间切换。11完整的一套组件工具QT编程的基本模块称之为组件,组件是用户界面的组成部分,QT含有用来创建专业外观的用户界面所需要的所有组件。213QT/EMBEDDED介绍QT/EMBEDDED为带有轻量级窗口系统的嵌入式设备提供了标准的API。QT/EMBEDDED面向对象的设计思想,使得它能一直向前支持鼠标、键盘、图形加速卡等附加设备。通过使用QT/EMBEDDED,开发者可以感受到QT/X11、QT/WINDOWS和QT/MAC等不同的版本下使用相同的API编程带来的便利5。QT/EMBEDDED与QT/X11的LINUX版本的比较如下表21所示。应用源代码QTAPIQT/X11QT/XLIBQT/EMBEDDEDXWINDOWSERVERFRAMEBUFFERLINUX内核表21QT/EMBEDDED与QT/X11的LINUX版本的比较22QT的架构1窗口系统一个QT/EMBEDDED窗口系统包括了一个或多个进程,其中的一个进程可作为服务器。这个服务进程会分配客户显示区域,以及产生键盘和鼠标时间。此服务进程还能为已经运行的客户程序提供用户接口和输入方法。它其实就是一个有某些额外权限的客户进程。任何程序都可以在命令行上加上“QWS”的选项来把它作为一个服务器来运行。2字体QT/EMBEDDED支持四种不同字体格式TRUETYPE、POSTSCRIPTTYPE1、位图发布字体(BDF)和QT的预呈现(PRERENDERED)字体(QPF)。QT还可以通过增加QFONTFACTORY的子类来支持其他字体,也可以支持以插件方式出现的反别名字体。3输入设备QT/EMBEDDED30支持集中鼠标协议BUSMOUSE、MICROSOFT、INTELLIMOUSE和MOUSEMAN。23QT的组成QT是一个完整的C应用程序开发框架。它包含一个类库和用于跨平台开发的国际化工具。1QT类库众多的QT类库构成QT的基础。该库可以利用大约400个面向对象的类,这些类带有大多数构建跨平台服务器与富客户端应用程序的底层基础构造函数。这些库包括用于GUI、布局、数据库、国际化、网络与XML等的类。2信号/槽机制信号与槽机制是QT的核心机制,要精通QT编程就必须对信号和插槽有所了解。信号和插槽是一种高级接口,应用于对象之间的通信,它是QT核心特性,也是QT区别于其他工具包的关键所在。信号和插槽是QT自行定义的一种通信机制,它独立于标准的C/C语言,因此要正确地处理信号和插槽,必须借助一个称为MOC(METIAOBJECTCOMPILER)的QT工具,该工具是一个C预处理程序,它为高层次的事件处理自动生成所需要的附加代码6。多个信号与单个插槽可以连接,单个信号与很多插槽也可以连接,甚至将一个信号与另外一个信号相连接也是可能的,这时无论第一个信号什么时候发射,系统都将立刻发射第二个信号。总之,信号与插槽构造了一个强大的部件编程机制。对象间信号与插槽的连接关系如图21所示图21信号与槽连接关系3QTDESIGNER图形设计器QT图形设计器是一个所见即所得的全方位GUI构造器。利用QTDESIGNER,开发者可以释放各种QT控件构造图形用户界面,而不需要编写一行代码。使用QT图形设计器的布局管理可以生成具有平滑改变尺寸功能的对话框。4QMAKE工具编写用于多平台的软件是单调发威的,且可能出现错误,维护编制文件更是如此,尤其是当不同的编译器和平台组合需要若干个编制文件时,而通过使用QMAKE工具可以构建出CROSSPLATFORMBULIDS跨平台的应用程序。即QMAKE可以根据一个工程文件(PRO)产生不同平台下的MAKEFILE文件。QMAKE支持跨平台开发和所谓的影子生成(SHADOWBUILDS)技术,QMAKE还易于在不同的配置中切换。24QT开发平台的搭建为了在PC主机上得到QT的开发环境,我们选择在WINDOWS操作系统中安装VMWARE虚拟机软件,再在其中安装我们需要的LINUX操作系统。使用虚拟机的一大好处是,当在LINUX因为不熟悉而遇到问题的时候,可以很容易的回到WINDOWS中寻求解决方案,避免了在双系统中来回重启切换的麻烦。25QTSDK及QTCREATOR工具的安装QT可以从NOKIA官方网站(HTTPS/QTNOKIACOM)上下载,包括QTSDK和QTCREATOR包。打开终端,输入命令SUDOSU,取得操作系统ROOT权限。然后对下载好的SDK安装包进行CHMODUX操作,即对档案的拥有者赋予执行权限。接下来输入/QTSDKLIUNXX86OPENSOURCE210BIN。执行QTSDK的安装操作。如图22所示图22QTCREATOR安装界面QTCREATOR安装完成之后,双击图标,进入QTCREATORIDE界面,如下图23所示至此,平台搭建已经完成。图23QTCREATOR操作界面第3章游戏的总体分析与设计31设计构想相信大多数使用WINDOWS操作系统的使用者,对这款游戏都不陌生。这款游戏不止操作简单,规则也不难,再加上游戏速度的控制机制得宜,让整个游戏在操作过程中充满了快乐与紧张的气氛。除了游乐当中能带给使用者快乐之外,游戏的设计内容无形中也不断训练使用者的逻辑思考能力,对于依靠高度脑力工作的现代人,都可以通过这个游戏,不时的检验一下自己,所以我们不难发现,在各种可携带的电子产品上都有这款游戏的踪影。在设计之前,我们先来了解这款游戏的规则。在不掀开任何藏有地雷的方块情况下,以最快的速度找出所有的地雷。如果在掀开方块的过程中,不小心翻开(踩到)藏有地雷的方块,则宣告失败(游戏结束),惟有将所有不含地雷的方块掀开,游戏才算成功。游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块,当鼠标指针对准未翻开的方块按下右键时即表示标记或取消标记地雷,反复按下右键则方块会以标记,取消标记两者之间不断循环。游戏者可以通过地雷区内的数字提示了解以数字为中心的其周边八个方格内所含的地雷数,假若翻开的方块显示数字“3”,则表示以其为中心的周边方块内藏有3个地雷。当按下的方块不是地雷,且周边八个方块也都没有地雷时,方块会以被翻开方块的八个方向将空白方块翻开。32流程规划流程规划大致上可以分为三个部分,分别为游戏开始阶段、游戏进行阶段和游戏结束阶段。游戏开始时,会以游戏者最后一次设定的地雷区大小为范围画出地雷区,同时会产生地雷并且开始计时。游戏进行阶段主要就是如何判断按下的方块是非地雷时的处理,这也是整个游戏的技术核心,我们可以通过扩散的观念来检查周边的方块是否含有地雷及是否继续往外翻开,以及鼠标右键的标记功能的实现。游戏结束阶段,判定游戏是否结束有两种情况,第一种是没有踩到雷,成功完成游戏,会弹出提示框提示赢得游戏,如果创造了新的纪录,则会弹出提示框提示输入姓名。第二种是踩到雷,也就是游戏失败,同样会弹出提示框来提示输掉游戏。鼠标事件流程图如下图31所示图31鼠标事件流程图33画面规划游戏画面如图32所示图32游戏界面图说明如下游戏界面由下列组成游戏窗口游戏菜单栏游戏状态栏游戏区域(雷区)游戏计时器第4章游戏的详细设计41游戏的开始当玩家开始游戏时,游戏画面如图41所示图41游戏初始画面我们可以清楚的看到,游戏界面主要分为两个主要部分1计时及状态区;2地雷区。计时及状态区是玩家开始点击图标到游戏结束时对时间的统计,也用QLABEL来实现了。代码实现如下VOIDMAINWINDOWCREATE_STATUSBAR/计时器TIME_LABELNEWQLABELSTATUSBARADDPERMANENTWIDGETTIME_LABELSTATUSBARADDPERMANENTWIDGETNEWQLABELTR“SECOND“VOIDMAINWINDOWSLOT_TIMERTIME_LABELSETTEXTQSTRING“1“ARGTIMEELAPSED/1000然后再利用IMAGELIST组件来存储游戏中将要使用的图片,我们可以将组件布置于窗体后编辑组件属性,如图42所示图42IMAGE组件42雷区分布当游戏界面初始化完成,地雷也同时放入雷区中,并且开始计时。具体实现如下所示VOIDBLOCKAREASET_BLOCK_AREAINTROW,INTCOLUMN,INTMINE_NUMBER,INTINIT_FLAG/雷区设置IFINIT_FLAGFORINTI0IMAINLAYOUTITEMATPOSITIONI,JWIDGETDELETEMAINLAYOUTROW_ROWCOLUMN_COLUMNTOTAL_BLOCK_NUMBER_ROW_COLUMN_TOTAL_MINE_NUMBER_MINE_NUMBERTURN_OVER_BLOCK_NUMBER_0GAME_OVER_FLAG_FALSEBOOLMINE_FLAGTOTAL_BLOCK_NUMBER_FORINTI0IADDWIDGETNEWBLOCKMINE_FLAGICOLUMN_J,I,JFORINTI0IMAINLAYOUTITEMATPOSITIONI,JWIDGETCURRENT_BLOCKSET_NUMBERCALCULATE_MINESI,JCONNECTCURRENT_BLOCK,SIGNALTURN_OVERBOOL,THIS,SLOTSLOT_TURN_OVERBOOLCURRENT_BLOCKINSTALLEVENTFILTERTHIS43游戏中主要模块的介绍与使用431鼠标事件在游戏过程中,我们利用鼠标所发出的信息了解游戏者的意图,进而作出相对应的动作。在RIGHTPRESS与MIDPRESS事件中,可以捕捉鼠标所按下或放开的按键为何、鼠标光标在该组件上的坐标及是否同时按下辅助键等。函数原型如VOIDMOUSEPRESSEVENTQGRAPHICSSCENEMOUSEEVENTEVENT在参数列中,BUTTON参数值表示鼠标上的按钮数值。其意义如下1左键2右键在本游戏中,我们利用右键的RIGHTBUTTON来标记“已标记”方块,利用左键的,来标示游戏者准备按下的方块,再利用左键的LEFTBUTTON来确定翻开的方块。在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块当鼠标指针对准未翻开的方块按下右键时即表示标记地雷,反复按下右键则方块会以“标记”,“取消标记”两者之间不断循环VOIDBLOCKMOUSEPRESSEVENTQMOUSEEVENTEVENT/鼠标事件IFEVENTBUTTONQTLEFTBUTTONIFTURN_OVER_FLAG_IFMINE_FLAG_TRUESETPIXMAPQPIXMAP“/IMAGES/MINEPNG“UPDATEEMITTURN_OVERTRUEELSESETPIXMAPQPIXMAP“/IMAGES/MINE_“QSTRING“1“ARGNUMBER_“PNG“UPDATEEMITTURN_OVERFALSEELSEIFEVENTBUTTONQTRIGHTBUTTONIFTURN_OVER_FLAG_IFMARK_FLAG_MARK_FLAG_TRUESETPIXMAPQPIXMAP“/IMAGES/FLAGPNG“ELSEMARK_FLAG_FALSESETPIXMAPQPIXMAP“/IMAGES/NORMALPNG“UPDATEQLABELMOUSEPRESSEVENTEVENT就像WINDOWS自带的扫雷一样,如果说这个块被右键标记了,左键点击是不能再翻开的,同样的,左键翻开过的块也是无法在点击的。432地雷及雷区表面探测情况在游戏设计上,我利用了两个二维数组分别记录地雷的分布情况及雷区表面探测情形,如图43所示图43标示地雷分布情况因为两个数组维数皆为2,所以我们通过双循环做数据的对比工作。另外,当游戏玩家按下非地雷的方块时,程序必须自动将周边非地雷的方块翻开,这个动作我们也可以通过双循环的方式检查以按下的方块为中心与周边的8个方块所形成的33的二维数组,鼠标指针所指即是代表按下的方块,利用双循环作数据的对比,不但速度快,而且在设计阶段,程序的架构也比较清楚。程序设计时双循环常常搭配二维数组使用。433清除未靠近地雷的方块在游戏过程中,当游戏者按下非地雷方块时,方块会沿四周八个方向向外翻开非地雷的方块。程序的执行方面必须判断以按下方块为中心,检查周围八个方块是否为非地雷方块,若其中有一个方块是非地雷方块时,则又以其为中心,向外检查周围八个方块是否为非地雷方块,如此反复的执行即构成扩散的使用条件。前面已经提到,扩散必须设计终止的条件判断,在本游戏的扩散架构中,当判断方块的内容为数字时(即在非地雷方块周围),即立即停止扩散程序。扩散其实也不是万能的,以本游戏做测试,当地雷区范围越大,且地雷数目不多时(一翻开非地雷方块,几乎全部方块都会翻开),执行扩散就会变的非常缓慢,甚至造成堆迭溢满(不足)的情形,所以在游戏设计上必须考虑地雷区的大小,以免造成执行时错误中断的情况发生。代码部分如下所示VOIDBLOCKAREATRY_TO_TURN_OVER_MORE_BLOCKSINTX,INTY/自动翻周围无雷标记的块QQUEUEQUEUEQPAIRPAIRQUEUEENQUEUEQMAKEPAIRX,YWHILEQUEUEISEMPTYPAIRQUEUEHEADQUEUEDEQUEUEIFCALCULATE_MINESPAIRFIRST,PAIRSECOND0FORINTI0I0TURN_OVER_BLOCK_NUMBER_QUEUEENQUEUEQMAKEPAIRPAIRFIRST1I,PAIRSECOND1JIFTURN_OVER_BLOCK_NUMBER_TOTAL_BLOCK_NUMBER_TOTAL_MINE_NUMBER_GAME_OVER_FLAG_TRUEEMITGAME_OVERTRUE434游戏难度的选择这里我设置了“初级”,“中级”,“高级”以及“自定义”四个不同的难度级别,“初级”,“中级”,“高级”中的雷区大小和地雷总数是已经设计好了的,如果玩家想要自己设置这些参数,可单击“游戏”“自定义”,然后在“设置”中输入行数,列数及地雷数。代码如下VOIDMAINWINDOWSLOT_STANDARDQACTIONSTANDARD_ACTION/难度设置IFSTANDARD_ACTIONEASY_STANDARD_ACTION/简单难度CURRENT_STANDARD_0ROW_9COLUMN_9MINE_NUMBER_10ELSEIFSTANDARD_ACTIONMIDDLE_STANDARD_ACTION/中等难度CURRENT_STANDARD_1ROW_16COLUMN_16MINE_NUMBER_40ELSEIFSTANDARD_ACTIONHARD_STANDARD_ACTION/困难难度CURRENT_STANDARD_2ROW_16COLUMN_30MINE_NUMBER_99ELSEIFSTANDARD_ACTIONCUSTOM_STANDARD_ACTION/自定义QDIALOGDIALOGDIALOGSETWINDOWTITLETR“SETSTANDARD“QSPINBOXROW_SPINBOXNEWQSPINBOX/行设置ROW_SPINBOXSETRANGE5,50ROW_SPINBOXSETVALUEROW_QSPINBOXCOLUMN_SPINBOXNEWQSPINBOX/列设置COLUMN_SPINBOXSETRANGE5,50COLUMN_SPINBOXSETVALUECOLUMN_QSPINBOXMINE_SPINBOXNEWQSPINBOX/雷数设置MINE_SPINBOXSETVALUEMINE_NUMBER_QHBOXLAYOUTUP_LAYOUTNEWQHBOXLAYOUT/水平布局管理器UP_LAYOUTADDWIDGETROW_SPINBOXUP_LAYOUTADDWIDGETCOLUMN_SPINBOXUP_LAYOUTADDWIDGETMINE_SPINBOXQDIALOGBUTTONBOXDIALOG_BUTTONBOXNEWQDIALOGBUTTONBOXDIALOG_BUTTONBOXADDBUTTONQDIALOGBUTTONBOXOKDIALOG_BUTTONBOXADDBUTTONQDIALOGBUTTONBOXCANCELCONNECTDIALOG_BUTTONBOX,SIGNALACCEPTED,CONNECTDIALOG_BUTTONBOX,SIGNALREJECTED,QHBOXLAYOUTBOTTOM_LAYOUTNEWQHBOXLAYOUTBOTTOM_LAYOUTADDSTRETCHBOTTOM_LAYOUTADDWIDGETDIALOG_BUTTONBOXQVBOXLAYOUTMAIN_LAYOUTNEWQVBOXLAYOUTMAIN_LAYOUTADDLAYOUTUP_LAYOUTMAIN_LAYOUTADDLAYOUTBOTTOM_LAYOUTIFDIALOGEXECQDIALOGACCEPTEDIFROW_SPINBOXVALUECOLUMN_SPINBOXVALUEMINE_SPINBOXVALUECURRENT_STANDARD_3ROW_ROW_SPINBOXVALUECOLUMN_COLUMN_SPINBOXVALUEMINE_NUMBER_MINE_SPINBOXVALUESLOT_NEW_GAME44游戏的判断441游戏成功完成当在规定的时间内将所有的雷都正确的标示出来,游戏就会有一个弹出框提示你在多长时间内完成当前难度下的游戏。还有一种情况便是当只剩下地雷未探测的时候,及雷区方块总数已清除的方块数地雷总数的话,游戏也将成功完成。实现代码如下。VOIDMAINWINDOWSLOT_GAME_OVERBOOLIS_WIN/完成游戏的判断TIMERSTOPQSTRINGNAMEIFIS_WINSWITCHCURRENT_STANDARD_CASE0/初级难度的判定IFTIME_LABELTEXTTOINTTEXTTOINTEASY_RECORD_NAME_NAMEELSE/只是赢得游戏,没有创造纪录QMESSAGEBOXINFORMATIONTHIS,TR“RESULT“,TR“YOUWIN“BREAKCASE1IFTIME_LABELTEXTTOINTTEXTTOINTMIDDLE_RECORD_NAME_NAMEELSEQMESSAGEBOXINFORMATIONTHIS,TR“RESULT“,TR“YOUWIN“BREAKCASE2IFTIME_LABELTEXTTOINTTEXTTOINTHARD_RECORD_NAME_NAMEELSEQMESSAGEBOXINFORMATIONTHIS,TR“RESULT“,TR“YOUWIN“BREAKDEFAULTQMESSAGEBOXINFORMATIONTHIS,TR“RESULT“,TR“YOUWIN“ELSEQMESSAGEBOXINFORMATIONTHIS,TR“RESULT“,TR“YOULOSE“当游戏成功时,会弹出提示框。如图44所示图44游戏完成如果创造了新的纪录会弹出提示框来输入姓名,如下图45所示图45创造新纪录442游戏进行失败当鼠标左键按下的方块为地雷方块时,地雷将会被引爆,游戏立即结束。游戏失败时也会弹出提示框,如图46所示图46游戏失败45重新进行游戏当游戏的参与者正在进行游戏中时想中途退出重新开始,我提供了两种方案,方案1点击新游戏按钮,如图47所示图47方案1方案2点击面板左上角的图片按钮即可,如图48所示图48方案2但是每种方式都是由重新调用这个函数来实现的VOIDMAINWINDOWSLOT_NEW_GAME/新游戏AREA_SET_BLOCK_AREAROW_,COLUMN_,MINE_NUMBER_TIME_LABELSETTEXT“0“TIMERESTARTTIMERSTART46关于游戏每一个游戏都会有一个游戏的说明及开发者的情况,我所开发的扫雷也包含这个说明,如图49所示图49关于游戏47英雄榜当扫雷成功时,游戏会记录参与者的姓名,这时就需要参与者输入自己的姓名,当然你只能超过帮榜上的游戏完成时间才能记录,如图410所示图410排行榜实现代码如下VOIDMAINWINDOWSLOT_RANK/排行榜QDIALOGDIALOGDIALOGSETWINDOWTITLETR“RANK“QGRIDLAYOUTUP_LAYOUTNEWQGRIDLAYOUTUP_LAYOUTADDWIDGETNEWQLABELTR“STANDARD“,0,0UP_LAYOUTADDWIDGETNEWQLABELTR“TIME“,0,1UP_LAYOUTADDWIDGETNEWQLABELTR“NAME“,0,2UP_LAYOUTADDWIDGETNEWQLABELTR“EASY“,1,0UP_LAYOUTADDWIDGETNEWQLABELQSTRING“1“ARGEASY_RECORD_TIME_,1,1UP_LAYOUTADDWIDGETNEWQLABELEASY_RECORD_NAME_,1,2UP_LAYOUTADDWIDGETNEWQLABELTR“MIDDLE“,2,0UP_LAYOUTADDWIDGETNEWQLABELQSTRING“1“ARGMIDDLE_RECORD_TIME_,2,1UP_LAYOUTADDWIDGETNEWQLABELMIDDLE_RECORD_NAME_,2,2UP_LAYOUTADDWIDGETNEWQLABELTR“HARD“,3,0UP_LAYOUTADDWIDGETNEWQLABELQSTRING“1“ARGHARD_RECORD_TIME_,3,1UP_LAYOUTADDWIDGETNEWQLABELHARD_RECORD_NAME_,3,2QPUSHBUTTONRECOUNT_BUTTONNEWQPUSHBUTTONTR“RECOUNT“QPUSHBUTTONCLOSE_BUTTONNEWQPUSHBUTTONTR“CLOSE“CLOSE_BUTTONSETDEFAULTTRUECONNECTRECOUNT_BUTTON,SIGNALCLICKED,CONNECTCLOSE_BUTTON,SIGNALCLICKED,QHBOXLAYOUTBOTTOM_LAYOUTNEWQHBOXLAYOUTBOTTOM_LAYOUTADDSTRETCHBOTTOM_LAYOUTADDWIDGETRECOUNT_BUTTONBOTTOM_LAYOUTADDWIDGETCLOSE_BUTTONQVBOXLAYOUTMAIN_LAYOUTNEWQVBOXLAYOUTMAIN_LAYOUTADDLAYOUTUP_LAYOUTMAIN_LAYOUTADDLAYOUTBOTTOM_LAYOUTIFDIALOGEXECQDIALOGACCEPTEDEASY_RECORD_TIME_MIDDLE_RECORD_TIME_HARD_RECORD_TIME_G_NO_RECORD_TIMEEASY_RECORD_NAME_MIDDLE_RECORD_NAME_HARD_RECORD_NAME_G_NO_RECORD_NAME48游戏测试及结果在程序代码基本完成后,经过不断的调试与修改,最后测试本次所设计的扫雷游戏能够正常运行,在基本功能与WINDOWS自带的扫雷游戏没有太大差别,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如在游戏中可以加入一些声音的提示,在游戏完成和失败的时候可以弹出一些小的FLASH动画等等。总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后完善。总结毕业设计是本科学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平,而且通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富。这是我们都希望看到的也正是我们进行毕业设计的目的所在。虽然毕业设计内容繁多,过程繁琐但我的收获却更加丰富。各种组件的运用,各种算法的应用,各种控件的利用我都是随着设计的不断深入而不断熟悉并逐步掌握的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识也对自己提出了新的要求。提高是有限的但提高也是全面的,正是这一次设计让我积累了许多实际经验,也必然会让我在未来的工作学习中表现出更高的应变能力和理解力。顺利如期的完成本次毕业设计给了我很大的信心,但是也让我看到了自己许多不足的地方,学习其实就是一个不断完善的过程,正视自己的不足之处,在以后的工作和学习中不断的弥补这些不足之处,在以后的生活中也要保持同样的态度,不断的完善自己。参考文献1谭锋,章伟聪,VISUALC程序设计实训教程,北京科学出版社,200382成洁,卢紫毅LINUX窗口程序设计QT精彩实例分析M北京清华大学出版社,20083王超龙,陈志华,VISUALC入门与提高,北京人民邮电出版社,200264肖宏伟,VISUALC实效编程百例,北京人民邮电出版社,200485张建强,张秀梅扫雷游戏策略初探J数学教学,2004(6)32336肖永亮VISUALC游戏编程基础,北京电子工业出版社,200557赵大伟,肖周芳,张艳从扫雷游戏浅谈一些算法问题J科技信息,200829698刘加海,余建军,VISUALC程序设计基础,北京科学出版社,200389(美国)IVORHORTON,BEGINNINGVISUALC2005,清华大学出版社,200710(美国)斯塔勒,游戏编程中的数理应用,红旗出版社,2005311(美国)MICHAELDAWSON,BEGINNINGCGAMEPROGRAMMING,人民邮电出版社,2006112(美国)莫里森,游戏编程入门,人民邮电出版社,2005913(美国)麦克沙夫瑞,游戏编程全接触,人民邮电出版社,20061致谢作者在设计(论文)期间都是在苏小锐老师全面、具体指导下完成进行的。苏老师渊博的学识、敏锐的思维、民主而严谨的作风使学生受益非浅,并终生难忘。苏老师在专业课程的学习、素材的收集、课题的确立、资料的查阅都给以的热忱的关怀和细心的指导,感谢他在百忙之中抽出时间并耐心的给我讲解毕业设计中的难点和疑点。老师严谨的治学态度、渊博的学识、对事业的兢兢业业、不断进取的精神,为我今后的生活及工作树立了榜样,我的点滴进步无不凝结着导师的心血。另外,在这次QT的学习中,很多同学也给与了我很大的帮助。我从一开始对QT一无所知,根本不知道该如何下手,到渐渐的明白QT的基本原理,知道该如何使用QT进行一些简单的编程和工程的创建。每次遇到一些问题,不知道如何进行下去的时候,同学总会提供一些帮助,帮我想办法,查一些资料,跟我一起解决问题。在此,真的很感谢我的这些可爱的同学们。最后,再次向各位老师的关心和帮助表示衷心的感谢外文原文THECDESIGNRATIONALECISDESIGNEDTOBEANEXTENSIBLEPLATFORMFORRAPIDLYDEVELOPINGPROGRAMANALYSISTOOLSSEVERALFEATURESOFCFACILITATETHISBYCONVENTION,CWRITTENINLOWERCASELETTERSREFERSJUSTTOTHEPROGRAMTHATABSTRACTSDATAFROMACPROGRAMCIAWRITTENINCAPITALLETTERSREFERSTOTHESYSTEMMADEOFTHATABSTRACTORANDALLOFTHETOOLSTHATUSETHEDATABASEITGENERATESENTITIESINCLUDELES,MACROS,TYPES,FUNCTIONSANDVARIABLESSEPARATIONOFINFORMATIONEXTRACTIONANDPRESENTATIONTHEPROCESSOFEXTRACTINGINFORMATIONFROMAPROGRAMANDTHEPROCESSOFPRESENTINGTHATINFORMATIONSHOULDBESEPARATETHISELIMINATESTHENEEDFOREACHCANALYSISTOOLTODUPLICATETHEPARSINGPROCESSANDALLOWSCTOOLSTOSHARETHEINFORMATIONANDPRESENTITINDIFFERENTWAYSASIMILARDOCTRINEWASDEVELOPEDINTHEINTERLISPPROJECTUNFORTUNATELY,MANYCANDCTOOLSTODAYSTILLVIOLATETHISBASICPRINCIPLEAWELLCONCEIVEDCONCEPTUALMODELACONCEPTUALMODELBASEDONTHEENTITYRELATIONSHIPMODELWASDESIGNEDTODESCRIBETHEENTITIES,ATTRIBUTES,ANDRELATIONSHIPSINCPROGRAMSTHEMODELSERVESASANACCURATEHIGHLEVELSPECIFICATIONFORTHECONTENTSOFTHEPROGRAMDATABASERELATIONALDATABASETOSUPPORTREUSE,CSTORESABSTRACTEDINFORMATIONINTHEFORMOFARELATIONALDATABASETHISMAKESITPOSSIBLEFORTHATINFORMATIONTOBEACCESSEDBYAWIDEVARIETYOFEXISTINGDATABASEQUERYSYSTEMSINCREMENTALDATABASECONSTRUCTIONCBUILDSANDMAINTAINSAPROGRAMDATABASEFORLARGESYSTEMSEFFICIENTLYBECAUSEITALLOWSINCREMENTALUPDATESOFADATABASEWHENASETOFCSOURCELESISUPDATED,ONLYTHATPORTIONHASTOBEREABSTRACTEDTOUPDATETHEDATABASETHESEBASICDESIGNPRINCIPLESGIVETOOLSBASEDONCANADVANTAGEOVERMANYTRADITIONALDEVELOPMENTTOOLS,WHICHUSUALLYM
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 公司生日会文案策划方案
- 公司班组拓展活动方案
- 公司端午节DIY包粽子活动方案
- 公司摘橙子活动方案
- 公司花园种植活动方案
- 公司科技展厅策划方案
- 公司组织游玩儿活动方案
- 公司组织游戏策划方案
- 公司猜照片活动策划方案
- 2025年中级会计考试试卷及答案
- 《详述脑卒中及其治疗:抗击脑卒中的策略与护理课件》
- 2025-2030中国柴油发动机行业市场发展分析及前景趋势与投资研究报告
- 夏季防火安全常识培训
- 人教部编版八年级下册关雎教案设计
- (四调)武汉市2025届高中毕业生四月调研考试 数学试卷(含答案详解)
- DB31T 1564-2025企业实验室危险化学品安全管理规范
- 氟斑牙的健康宣教
- 2025版校园食堂日管控、周排查、月调度记录表
- 2024年生活方式酒店研究报告
- ISO 37001-2025 反贿赂管理体系要求及使用指南(中文版-雷泽佳译-2025)
- 特种设备安全管理的应急预案编制
评论
0/150
提交评论