扫雷游戏设计毕业论文_第1页
扫雷游戏设计毕业论文_第2页
扫雷游戏设计毕业论文_第3页
扫雷游戏设计毕业论文_第4页
扫雷游戏设计毕业论文_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

扫雷游戏设计毕业论文目录摘要 IABSTRACT II第1章绪论 -1-1.1研究背景 -1-1.2研究原因 -1-1.3研究意义 -1-第2章Qt简介 -2-2.1Qt特征 -2-2.2Qt核心编程技术 -2-2.2.1元对象系统 -2-2.2.2信号和槽机制 -3-2.2.3QObject类 -3-2.2.4对象树 -3-2.2.5事件 -3-2.2.6QApplication类 -3-2.2.7QWidget类 -4-2.2.8基本布局(QLayout) -4-2.3C++面向对象程序设计 -4-2.4Qt程序用到的类 -5-2.5Qt应用程序实现 -5-2.6本章小结 -6-第3章扫雷游戏设计 -8-3.1扫雷游戏功能需求分析 -8-3.2扫雷游戏整体框架介绍 -8-3.3扫雷游戏主要功能的实现 -9-3.3.1菜单栏的实现 -9-3.3.2菜单栏的功能 -11-3.3.3鼠标事件的实现 -11-3.3.4完成扫雷游戏逻辑的设计 -12-3.3.5扫雷游戏状态分类 -12-3.3.6初始化界面功能实现 -13-3.3.7雷区的随机布置 -13-3.4清除未靠近地雷的方块 -14-3.5游戏的判断 -15-3.5.1游戏成功 -15-3.5.2游戏失败 -15-3.6游戏测试结果 -16-结论 -17-致谢 -18-参考文献 -19-第1章绪论1.1研究背景随着计算机与网络的普及,人们生活水平的提高,电脑游戏越来越成为人们生活中不可或缺的一部分,在人们繁忙的工作之余,给人带去欢乐。随着电脑游戏产业的规模越来越大,开发一款成功的电脑游戏靠个人之力已非易事。不过,随着市场上开发的游戏产品越来越丰富,各种题材的游戏越来越多,创意已成为一款成功游戏的最重要的特点。例如目前流行的游戏“植物大战僵尸”、“愤怒的小鸟”,虽然都是一些很小的休闲游戏,但是因其特有的风格,使得它们都深受人们的喜爱。本次毕业设计将利用Qt4.6作为开发工具,设计了基于Qt的扫雷游戏。1.2研究原因扫雷游戏是Windows操作系统自带的一款小游戏,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,游戏开发成本比较低,开发娱乐性强的游戏就成为当前的主要课题,在这种趋势下各种小型的低成本的游戏软件应运而生。其中,系统自带的小游戏也占据了相当重要的地位,非常符合人们娱乐的要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧工作的人们以放松,还可以让人们的大脑得到开发。本课题就是基于Qt扫雷游戏的设计。1.3研究意义经过三年的大学学习,我对理论知识已经有了一定的了解与认知,本次的毕业设计便是将书本上所学的理论知识与实际相结合,同时也是对所学知识的一种检查,希望通过本次的毕业设计使自己在程序编写和游戏开发上有新的认识并能有所提高。本次毕业设计既锻炼了我们的实际动手能力,又培养了我们的自信心。在老师的指导下进行了一次模拟实际产品的开发,这对以后工作和学习能力的培养具有重要意义。第2章Qt简介Qt是一个跨平台的C++图形用户界面应用程序框架。它给应用程序开发者提供建立艺术级图形用户所需的所有功能。它是完全面对对象的,很容易扩展,并且允许真正的组件编程。Qt已经在Windows、Linux和EmbbededLinux上成功的推广。而且Qt是一个开源项目,开发成本比较低,又为开发者提供了免费而又友好的集成开发环境。Qt采用C++语言作为开发语言,使用C++语言开发,其运行效率可以得到保证。2.1Qt特征引入一种信号和槽机制,可查询和可设计的属性,强大的事件和事件过滤器,根据上下文进行国际化的字符串翻译,完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。以一种自然的方式组织对象所有权的分层次和可查询的对象树。2.2Qt核心编程技术2.2.1元对象系统Qt元对象系统提供了对象间的通信机制(信号与槽)、运行时类型信息和动态属性系统的支持,是标准的C++的一个扩展,它使Qt能更好地实现GUI图形用户界面编程。Qt的元对象系统不支持C++模板,尽管模板扩展了标准C++的功能,但是对元对象系统提供了模板无法提供的一些特性。Qt的元对象基于三个事实:①基类Q_Object:任何想使用元对象系统功能的类必须继承QObject。②Q_OBJECT宏:Q_OBJECT宏必须出现在类的私有声明区,已启动元对象的特性。③元对象编译器(Meta-ObjectCompiler,moc):为QObject子类实现元对象特性提供必要的代码实现。编译器moc产生能被标准C++编译器访问的附加C++代码,带有moc预编译器的C++基本上提供了面向对象的灵活性,并保持了C++的执行效率和扩展性。2.2.2信号和槽机制Qt提供了信号和槽机制来完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定的情况或动作下被触发,槽是等同于接受并处理信号的函数。每个Qt对象都包含若干个预定义的信号和若干个预定义的槽,当某一个特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。常用的连接方式为:connect(Object1,SIGNAL(singal),Object2,SLOT(slot));singal为对象Object1的信号,slot为对象Object2的槽。2.2.3QObject类QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的TObject。2.2.4对象树QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。2.2.5事件事件是由窗口系统或Qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。2.2.6QApplication类QApplication类和QWidget类都是QObject类的子类。QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的。2.2.7QWidget类QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如,QPushButton、QlistBox等都是它的子类。2.2.8基本布局(QLayout)Qt提供了QHBoxLayout类、QVBoxLayout类及QGridLayout类等的基本布局管理,分别是水平布局管理、垂直布局管理和网格布局管理。他们之间的继承管理如图2-1所示。图2-1各种布局类及之间的关系2.3C++面向对象程序设计面向对象编程是一种计算机编程架构。面向对象的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。面向对象编程达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接受信息、处理数据和向其他对象发送信息。面向对象程序设计中的概念主要包括:类、对象、数据封装、继承、动态绑定、多态性、数据抽象、消息传递。通过这些概念面向对象的思想得到了具体的体现。①类类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。C++中,class是类声明的关键字,class的后面是要声明的类名。类中的数据和函数都是类的成员,分别称为数据成员和成员函数。类中的关键字public、private和protected声明了类中的成员与类外之间的关系,称为访问权限。其中,对于private成员来说,它们是私有的,不能在类外访问,数据成员只能由类中的函数所使用,成员函数只允许在类中调用;对于public成员来说,它们是公有的,可以在类外访问;而对于protect成员来说,它们是受保护的,具有半公开性质,可在类中或其子类中访问。②对象对象是运行的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。作为一种复杂的数据构造类型,类声明后,就可以定义该类的对象。③封装封装是将数据和代码捆绑在一起,以避免外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。④继承继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性:单向性、传递性、可重用性。⑤多态多态是指不同事物具有不同表现形式的能力。多态机制使具有不同部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。2.4Qt程序用到的类本次的设计用QMainWindow作为主窗体。QMainWindow是一个为用户提供主窗口程序的类,可包含一个菜单栏(menubar)、多个工具栏(toolbar)、一个状态栏(statusbar)以及一个中心部件(centralwidget),是许多应用程序的基础,如文本编辑器、图片编辑器等。2.5Qt应用程序实现由以上简介可知,Qt是一个创建GUI程序的C++类库,编写Qt应用程序的主要工作是基于已有的Qt类编写用户类。Qt提供了一组围相当广泛的C++类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。QtDesigner:Qt设计器,用来可视化地设计应用程序界面。QtLinguist:Qt语言学家,用来翻译应用程序。以此提供对多种语言的支持。Qmake:使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的Makefile。QtAssistant:关于Qt的帮助文件,类似于MSDN。可以快速地发现你所需要的帮助。moc:元对象编译器。uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应用程序界面。Qt应用程序的设计使用基于工程的方法,并通过.pro文件进行工程管理。实现应用程序的第一步是编写.pro文件,然后使用Qt4自带的qmake工具生成Makefile,最后进行源代码的编译。Qmake的过程如下:qmake–project//生成.pro的工程文件qmake//生成Makefilenmake//编译2.6本章小结随着越来越多的第三方软件公司利用Qt/Embedded开发嵌入式Linux下的应用软件,Qt的应用已经越来越广泛。本章主要介绍了Qt的背景和描述了Qt实现的结构原理,还简述了Qt的相关特性。此外,也介绍了Qt应用程序开发时的相关工具和C++面向对象程序设计原则。同时为本次设计的扫雷游戏的移植提供便利的条件。第3章扫雷游戏设计本次设计是以Qt为开发软件,Qt是一个跨平台的C++图形用户界面应用程序框架。它给应用程序开发者提供建立艺术级图形用户所需的所有功能。设计并实现基于嵌入式Qt的扫雷游戏。扫雷游戏名称为mine_sweeper_v1.2,属于益智类游戏。通过鼠标即可操作游戏。游戏特点为操作简单、易于上手。3.1扫雷游戏功能需求分析扫雷游戏以满足用户娱乐、益智为宗旨,不断创新以适应用户越来越多的要求,本设计以用户需求为导向,在实现现主要完成以下功能:①游戏的初始化。②菜单栏功能的实现。③游戏难度的选择。④雷数的随机布置。⑤游戏的测试。3.2扫雷游戏整体框架介绍根据实际需求分析、功能设计,整个系统大致可以分为鼠标事件和菜单事件两个模块,程序设计的流程主要为先实现扫雷游戏主要功能,扫雷游戏的系统流程图如图3-1。图3-1扫雷游戏系统流程图3.3扫雷游戏主要功能的实现3.3.1菜单栏的实现在主函数中实现菜单功能,主要有游戏的开始、退出、排行榜如图3-2。voidMainWindow::create_menus()添加头文件#include<QMenu>#include<QMenuBar>图3-2菜单中游戏选项游戏难度的选择及自定义设置如图3-3。图3-3菜单栏游戏难度选项/*游戏的设置容易、中等、困难及自定义*/voidMainWindow::slot_standard(QAction*standard_action){ if(standard_action==easy_standard_action){ current_standard_=0; row_=9; column_=9; mine_number_=10; }elseif(standard_action==middle_standard_action){ current_standard_=1; row_=16; column_=16; mine_number_=40; }elseif(standard_action==hard_standard_action){ current_standard_=2; row_=16; column_=30; mine_number_=99; }elseif(...)帮助菜单中的关于游戏、关于Qt的介绍等主要功能的实现。如图3-4。图3-4扫雷游戏的帮助菜单3.3.2菜单栏的功能①新游戏:根据当前游戏难度直接开始一局新游戏。②初级、中级、高级游戏设定:根据选项设定游戏难度后开始新游戏。③自定义难度:首先弹出游戏设置对话框,让用户设置扫雷游戏基本属性,然后根据用户设定的属性开始新游戏。自定义对话框设计如图3-5。图3-5自定义难度时弹出的对话框3.3.3鼠标事件的实现在游戏过程中,我们利用鼠标所发出的信息了解游戏者的意图,进而做出相对应的动作。在MousePressEvent事件中,可以捕捉鼠标所按下或放开的按键、鼠标光标在该组件上的坐标及是否同时按下辅助键等。函数原型如下:voidBlock::mousePressEvent(QMouseEvent*event)添加头文件:#include<QMouseEvent>假如游戏者发现标示地雷的小旗方块是错误的,再重新点击一下右键,就会取消小旗,这时按下左键,该方块就会重新选择,若再按下左键,则该方块因为已成为“已标示”方块,所以就无法翻开。在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。通常鼠标在软件的应用上经常使用右键作为确定使用者的操作意图,而只把MousePressEvent事件当做标示的用途(用意就如同前面所提),只是为给使用者一个反悔的机会。游戏的操作方面主要以鼠标为主,当鼠标指针对准未翻开的方块按下左键时即表示翻开方块;当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以“未标示”→“标示”的关系不断循环。3.3.4完成扫雷游戏逻辑的设计①设计实现:在程序中,使用一个MainWindow类完成所有游戏逻辑功能。②扫雷表现形式:使用二维数组存储当前游戏状态。扫雷游戏的实质即是在二维空间,不同的点之间所具有的不同状态。例如该格子是雷,可以用数字-1表示该格子周围一个雷也没有,可以用0表示。使用二维数组能够完全表示所有地雷地图的数据。再利用另一个二维数组,用以表示当前点是否已被用户点击。③游戏基本属性:地雷数组行数、列数、地雷数量、游戏难度。④游戏状态:游戏初始界面,游戏进行中,游戏失败,游戏成功。⑤MainWindow类主要功能:初始化游戏界面、生成随机的地雷数,根据生成的地雷位置,将其余并非地雷的位置填上数字,数字代表该格子周围八个格子里有几个地雷。⑥设置游戏等级:初级、中级、高级和自定义。其三者都由默认设置游戏属性。通过游戏等级的设置,间接设置游戏的基本属性。3.3.5扫雷游戏状态分类当玩家扫雷时,即用鼠标左、右键点击一个格子时,有以下几种状态:①踩到雷:游戏失败,结束游戏。②点到的是数字:显示数字,游戏继续。③若玩家点到的格子周围一颗雷也没有时:就采用递归算法,继续向周围扩展。④当玩家点开所有的非雷的格子:提示游戏通过,并且结束游戏。⑤标示雷:右键点击出现小旗,代表下面是地雷。3.3.6初始化界面功能实现①计时窗口的实现在游戏的初始化界面时右下角的显示时间最初时0秒,随着时间的增长,它会记录你玩好这局游戏需要多长时间。其功能实现:voidMainWindow::slot_timer(){ time_label->setText(QString("%1").arg(time.elapsed()/1000));}②扫雷面板通过QMainWindow类创建扫雷游戏应用程序用户界面。游戏需要提供一个菜单栏。提供游戏的新游戏、设置、帮助等选项。在游戏区按功能将它分成雷区和提示区。Qt4使用“动作”的概念简化了有关菜单和工具栏的编程一个动作(action)就是一个可以添加到任意菜单和工具栏上。扫雷游戏的初始化界面。如图3-6。图3-6扫雷游戏的初始界面3.3.7雷区的随机布置这里重点介绍的就是雷的随机布置。当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,主要用意在于不让玩家第一次就踩到地雷,这样在某种程度上可以提高玩家游戏的气氛。实现其功能部分代码:ptrdiff_trandom(ptrdiff_ti)//雷的随机布置{ returnqrand()%i;}ptrdiff_t(*p_random)(ptrdiff_t)=random;BlockArea::BlockArea(introw,intcolumn,intmine_number,QWidget*parent) :QWidget(parent){ set_block_area(row,column,mine_number,true);}3.4清除未靠近地雷的方块清除为靠近地雷的方块也是本论文介绍的重点对象。这里首先引入一个“递归”的概念,“递归”(Recursion)简单的说,就是一个程序能被自己所定义的语句调用。递归在程序设计上是一种重要的数据结构形态,通过递归程序的编写,在程序代码上会变得相当简洁,不过如果设计不当,会造成无穷循环或堆迭溢满的情形,所以递归的程序中心必须含有if...then或SelectCase等设计,以终止递归执行。在游戏过程中,当游戏者按下非地雷方块时,方块会沿四周八个方向向外翻开非地雷的方块。程序的执行方面必须判断:以按下方块为中心,检查周围八个方块是否为非地雷方块,若其中有一个方块是非地雷方块时,则又以其为中心,向外检查周围八个方块是否为非地雷方块,如此反复的执行即构成递归的使用条件。前面已经提到,递归必须设计终止的条件判断,在本游戏的递归架构中,当判断方块的容为数字时(即在非地雷方块周围),即立即停止递归程序。递归其实也不是万能的,以本游戏做测试,当地雷区围越大,且地雷数目不多时(一翻开非地雷方块,几乎全部方块都会翻开),执行递归就会变的非常缓慢,甚至造成堆迭溢满(不足)的情形,所以在游戏设计上必须考虑地雷区的大小,以免造成执行时错误中断的情况发生。3.5游戏的判断3.5.1游戏成功当在规定的时间将所有的雷都正确的标示出来或把雷全部留下不去翻开它,游戏就会就是成功,而且会弹出一个对话框“请输入你的”如图3-7。这样就会在排行榜上显示你所创造的记录如图3-8。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论