扫雷游戏设计毕业论文.doc

上传人:小飞机 文档编号:3842300 上传时间:2023-03-24 格式:DOC 页数:19 大小:389.50KB
返回 下载 相关 举报
扫雷游戏设计毕业论文.doc_第1页
第1页 / 共19页
扫雷游戏设计毕业论文.doc_第2页
第2页 / 共19页
扫雷游戏设计毕业论文.doc_第3页
第3页 / 共19页
扫雷游戏设计毕业论文.doc_第4页
第4页 / 共19页
扫雷游戏设计毕业论文.doc_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《扫雷游戏设计毕业论文.doc》由会员分享,可在线阅读,更多相关《扫雷游戏设计毕业论文.doc(19页珍藏版)》请在三一办公上搜索。

1、扫雷游戏设计毕业论文目 录摘 要IABSTRACTII第1章 绪论- 1 -1.1 研究背景- 1 -1.2 研究原因- 1 -1.3 研究意义- 1 -第2章 Qt简介- 2 -2.1 Qt特征- 2 -2.2 Qt核心编程技术- 2 -2.2.1 元对象系统- 2 -2.2.2 信号和槽机制- 3 -2.2.3 QObject类- 3 -2.2.4 对象树- 3 -2.2.5 事件- 3 -2.2.6 QApplication类- 3 -2.2.7 QWidget类- 4 -2.2.8 基本布局(QLayout)- 4 -2.3 C+面向对象程序设计- 4 -2.4 Qt程序用到的类- 5

2、 -2.5 Qt应用程序实现- 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 游

3、戏失败- 15 -3.6 游戏测试结果- 16 -结 论- 17 -致 谢- 18 -参 考 文 献- 19 -第1章 绪论1.1 研究背景随着计算机与网络的普及,人们生活水平的提高,电脑游戏越来越成为人们生活中不可或缺的一部分,在人们繁忙的工作之余,给人带去欢乐。随着电脑游戏产业的规模越来越大,开发一款成功的电脑游戏靠个人之力已非易事。不过,随着市场上开发的游戏产品越来越丰富,各种题材的游戏越来越多,创意已成为一款成功游戏的最重要的特点。例如目前流行的游戏“植物大战僵尸”、“愤怒的小鸟”,虽然都是一些很小的休闲游戏,但是因其特有的风格,使得它们都深受人们的喜爱。本次毕业设计将利用Qt4.6作

4、为开发工具,设计了基于Qt的扫雷游戏。1.2 研究原因扫雷游戏是Windows操作系统自带的一款小游戏,与那些网络游戏和3D游戏相比,它有编写简单容易上手等特点,游戏开发成本比较低,开发娱乐性强的游戏就成为当前的主要课题,在这种趋势下各种小型的低成本的游戏软件应运而生。其中,系统自带的小游戏也占据了相当重要的地位,非常符合人们娱乐的要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。本课题就是基于Qt扫雷游戏的设计。1.3 研究意义经过三年的大学学习,我对理论知识已经有了一定的了解与认知,本次的毕业设计便是将书本上所学的理论知识与实际相结合,同时也

5、是对所学知识的一种检查,希望通过本次的毕业设计使自己在程序编写和游戏开发上有新的认识并能有所提高。本次毕业设计既锻炼了我们的实际动手能力,又培养了我们的自信心。在老师的指导下进行了一次模拟实际产品的开发,这对以后工作和学习能力的培养具有重要意义。第2章 Qt简介Qt是一个跨平台的C+图形用户界面应用程序框架。它给应用程序开发者提供建立艺术级图形用户所需的所有功能。它是完全面对对象的,很容易扩展,并且允许真正的组件编程。Qt已经在Windows、Linux和Embbeded Linux上成功的推广。而且Qt是一个开源项目,开发成本比较低,又为开发者提供了免费而又友好的集成开发环境。Qt采用C+语

6、言作为开发语言,使用C+语言开发,其运行效率可以得到保证。2.1 Qt特征引入一种信号和槽机制,可查询和可设计的属性,强大的事件和事件过滤器,根据上下文进行国际化的字符串翻译,完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。以一种自然的方式组织对象所有权的分层次和可查询的对象树。2.2 Qt核心编程技术2.2.1 元对象系统Qt元对象系统提供了对象间的通信机制(信号与槽)、运行时类型信息和动态属性系统的支持,是标准的C+的一个扩展,它使Qt能更好地实现GUI图形用户界面编程。Qt的元对象系统不支持C+模板,尽管模板扩展了标准C+的功能,但是对元对象系统提

7、供了模板无法提供的一些特性。Qt的元对象基于三个事实:基类Q_Object:任何想使用元对象系统功能的类必须继承QObject。Q_OBJECT宏:Q_OBJECT宏必须出现在类的私有声明区,已启动元对象的特性。元对象编译器(Meta-Object Compiler,moc):为QObject子类实现元对象特性提供必要的代码实现。编译器moc产生能被标准C+编译器访问的附加C+代码,带有moc预编译器的C+基本上提供了面向对象的灵活性,并保持了C+的执行效率和扩展性。2.2.2 信号和槽机制Qt提供了信号和槽机制来完成界面操作的响应,是完成任意两个Qt对象之间的通信机制。其中,信号会在某个特定

8、的情况或动作下被触发,槽是等同于接受并处理信号的函数。每个Qt对象都包含若干个预定义的信号和若干个预定义的槽,当某一个特定事件发生时,一个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以根据需要自定义信号和槽。常用的连接方式为:connect(Object1,SIGNAL(singal),Object2,SLOT(slot);singal为对象Object1的信号,slot为对象Object2的槽。2.2.3 QObject类QObject是Qt类体系的唯一基类,是Qt各种功能的源头活水,就象MFC中的CObject和Dephi中的T

9、Object。2.2.4 对象树QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。2.2.5 事件事件是由窗口系统或Qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。2.2.6 QApplication类QApplic

10、ation类和QWidget类都是QObject类的子类。QApplication类负责GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的。2.2.7 QWidget类QWidget类是所有用户接口对象的基类,它继承了QObject类的属性。组件是用户界面的单元组成部分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。QWidget类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。

11、如,QPushButton、QlistBox等都是它的子类。2.2.8 基本布局(QLayout)Qt提供了QHBoxLayout类、QVBoxLayout类及QGridLayout类等的基本布局管理,分别是水平布局管理、垂直布局管理和网格布局管理。他们之间的继承管理如图2-1所示。图2-1 各种布局类及之间的关系2.3 C+面向对象程序设计面向对象编程是一种计算机编程架构。面向对象的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。面向对象编程达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接受信息、处理数据和向其他对象发送信息。面向

12、对象程序设计中的概念主要包括:类、对象、数据封装、继承、动态绑定、多态性、数据抽象、消息传递。通过这些概念面向对象的思想得到了具体的体现。类类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。C+中,class是类声明的关键字,class的后面是要声明的类名。类中的数据和函数都是类的成员,分别称为数据成员和成员函数。类中的关键字public、private和protected声明了类中的成员与类外之间的关系,称为访问权限。其中,对于private成员来说,它们是私有的,不能在类外访问,数据成员只能由类中的函数所使用,成员函数只允许在类中调用;对于public成员来说,

13、它们是公有的,可以在类外访问;而对于protect成员来说,它们是受保护的,具有半公开性质,可在类中或其子类中访问。对象对象是运行的基本实体,它是一个封装了数据和操作这些数据的代码的逻辑实体。作为一种复杂的数据构造类型,类声明后,就可以定义该类的对象。封装封装是将数据和代码捆绑在一起,以避免外界的干扰和不确定性。对象的某些数据和代码可以是私有的,不能被外界访问,以此实现对数据和代码不同级别的访问权限。继承继承是让某个类型的对象获得另一个类型的对象的特征。通过继承可以实现代码的重用:从已存在的类派生出的一个新类将自动具有原来那个类的特性,同时,它还可以拥有自己的新特性:单向性、传递性、可重用性。

14、多态多态是指不同事物具有不同表现形式的能力。多态机制使具有不同内部结构的对象可以共享相同的外部接口,通过这种方式减少代码的复杂度。2.4 Qt程序用到的类本次的设计用QMainWindow作为主窗体。QMainWindow是一个为用户提供主窗口程序的类,可包含一个菜单栏(menu bar)、多个工具栏(tool bar)、一个状态栏(status bar)以及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器、图片编辑器等。2.5 Qt应用程序实现由以上简介可知,Qt是一个创建GUI程序的C+类库,编写Qt应用程序的主要工作是基于已有的Qt类编写用户类。Qt提供了

15、一组范围相当广泛的C+类库,并包含了几种命令行和图形界面的工具,有效地使用这些工具可以加速开发过程。Qt Designer:Qt设计器,用来可视化地设计应用程序界面。Qt Linguist:Qt语言学家,用来翻译应用程序。以此提供对多种语言的支持。Qmake:使用此工具可以由简单的、与平台无关的工程文件来生成编译所需的Makefile。Qt Assistant:关于Qt的帮助文件,类似于MSDN。可以快速地发现你所需要的帮助。moc:元对象编译器。uic:用户界面编译器。在程序编译时被自动调用,通过ui_*.h文件生成应用程序界面。Qt应用程序的设计使用基于工程的方法,并通过.pro文件进行工

16、程管理。实现应用程序的第一步是编写.pro文件,然后使用Qt4自带的qmake工具生成Makefile,最后进行源代码的编译。Qmake的过程如下:qmake project /生成.pro的工程文件qmake /生成Makefilenmake /编译2.6 本章小结随着越来越多的第三方软件公司利用Qt/Embedded开发嵌入式Linux下的应用软件,Qt的应用已经越来越广泛。本章主要介绍了Qt的背景和描述了Qt实现的结构原理,还简述了Qt的相关特性。此外,也介绍了Qt应用程序开发时的相关工具和C+面向对象程序设计原则。同时为本次设计的扫雷游戏的移植提供便利的条件。第3章 扫雷游戏设计本次设

17、计是以Qt为开发软件,Qt是一个跨平台的C+图形用户界面应用程序框架。它给应用程序开发者提供建立艺术级图形用户所需的所有功能。设计并实现基于嵌入式Qt的扫雷游戏。扫雷游戏名称为mine_sweeper_v1.2,属于益智类游戏。通过鼠标即可操作游戏。游戏特点为操作简单、易于上手。3.1 扫雷游戏功能需求分析扫雷游戏以满足用户娱乐、益智为宗旨,不断创新以适应用户越来越多的要求,本设计以用户需求为导向,在实现现主要完成以下功能:游戏的初始化。菜单栏功能的实现。游戏难度的选择。雷数的随机布置。游戏的测试。3.2 扫雷游戏整体框架介绍 根据实际需求分析、功能设计,整个系统大致可以分为鼠标事件和菜单事件

18、两个模块,程序设计的流程主要为先实现扫雷游戏主要功能,扫雷游戏的系统流程图如图3-1。 图3-1 扫雷游戏系统流程图3.3 扫雷游戏主要功能的实现3.3.1 菜单栏的实现在主函数中实现菜单功能,主要有游戏的开始、退出、排行榜如图3-2。void MainWindow:create_menus()添加头文件#include#include图3-2 菜单中游戏选项游戏难度的选择及自定义设置如图3-3。图3-3 菜单栏游戏难度选项/*游戏的设置容易、中等、困难及自定义*/void MainWindow:slot_standard(QAction* standard_action)if(standar

19、d_action=easy_standard_action)current_standard_=0;row_=9;column_=9;mine_number_=10;else if(standard_action=middle_standard_action)current_standard_=1;row_=16;column_=16;mine_number_=40;else if(standard_action=hard_standard_action)current_standard_=2;row_=16;column_=30;mine_number_=99;else if(.)帮助菜单中

20、的关于游戏、关于Qt的介绍等主要功能的实现。如图3-4。图3-4 扫雷游戏的帮助菜单3.3.2 菜单栏的功能新游戏:根据当前游戏难度直接开始一局新游戏。初级、中级、高级游戏设定:根据选项设定游戏难度后开始新游戏。自定义难度:首先弹出游戏设置对话框,让用户设置扫雷游戏基本属性,然后根据用户设定的属性开始新游戏。自定义对话框设计如图3-5。图3-5 自定义难度时弹出的对话框3.3.3 鼠标事件的实现在游戏过程中,我们利用鼠标所发出的信息了解游戏者的意图,进而做出相对应的动作。在MousePressEvent事件中,可以捕捉鼠标所按下或放开的按键、鼠标光标在该组件上的坐标及是否同时按下辅助键等。函数

21、原型如下:void Block:mousePressEvent(QMouseEvent* event)添加头文件:#include假如游戏者发现标示地雷的小旗方块是错误的,再重新点击一下右键,就会取消小旗,这时按下左键,该方块就会重新选择,若再按下左键,则该方块因为已成为“已标示”方块,所以就无法翻开。在窗口的软件中,鼠标的应用是不可或缺的,但鼠标固然好用,如果程序设计不当,也可能造成使用者的不便。通常鼠标在软件的应用上经常使用右键作为确定使用者的操作意图,而只把MousePressEvent事件当做标示的用途(用意就如同前面所提),只是为给使用者一个反悔的机会。游戏的操作方面主要以鼠标为主,

22、当鼠标指针对准未翻开的方块按下左键时即表示翻开方块;当鼠标指针对准未翻开的方块按下右键时即表示标示或疑示地雷,反复按下右键则方块会以“未标示”“标示”的关系不断循环。3.3.4 完成扫雷游戏逻辑的设计设计实现:在程序中,使用一个MainWindow类完成所有游戏逻辑功能。扫雷表现形式:使用二维数组存储当前游戏状态。扫雷游戏的实质即是在二维空间,不同的点之间所具有的不同状态。例如该格子是雷,可以用数字-1表示该格子周围一个雷也没有,可以用0表示。使用二维数组能够完全表示所有地雷地图的数据。再利用另一个二维数组,用以表示当前点是否已被用户点击。游戏基本属性:地雷数组行数、列数、地雷数量、游戏难度。

23、游戏状态:游戏初始界面,游戏进行中,游戏失败,游戏成功。MainWindow类主要功能:初始化游戏界面、生成随机的地雷数,根据生成的地雷位置,将其余并非地雷的位置填上数字,数字代表该格子周围八个格子里有几个地雷。设置游戏等级:初级、中级、高级和自定义。其三者都由默认设置游戏属性。通过游戏等级的设置,间接设置游戏的基本属性。3.3.5 扫雷游戏状态分类当玩家扫雷时,即用鼠标左、右键点击一个格子时,有以下几种状态:踩到雷:游戏失败,结束游戏。点到的是数字:显示数字,游戏继续。若玩家点到的格子周围一颗雷也没有时:就采用递归算法,继续向周围扩展。当玩家点开所有的非雷的格子:提示游戏通过,并且结束游戏。

24、标示雷:右键点击出现小旗,代表下面是地雷。3.3.6 初始化界面功能实现计时窗口的实现在游戏的初始化界面时右下角的显示时间最初时0秒,随着时间的增长,它会记录你玩好这局游戏需要多长时间。其功能实现:void MainWindow:slot_timer()time_label-setText(QString(%1).arg(time.elapsed()/1000);扫雷面板通过QMainWindow类创建扫雷游戏应用程序用户界面。游戏需要提供一个菜单栏。提供游戏的新游戏、设置、帮助等选项。在游戏区按功能将它分成雷区和提示区。Qt4使用“动作”的概念简化了有关菜单和工具栏的编程一个动作(actio

25、n)就是一个可以添加到任意菜单和工具栏上。扫雷游戏的初始化界面。如图3-6。图3-6 扫雷游戏的初始界面3.3.7 雷区的随机布置这里重点介绍的就是雷的随机布置。当游戏界面初始化完成后,这时在地雷区中并未产生地雷,只有当玩家在地雷区中第一次点下左键后,才会在地雷区中随机的布置当前游戏难度下应该产生的地雷总数,主要用意在于不让玩家第一次就踩到地雷,这样在某种程度上可以提高玩家游戏的气氛。实现其功能部分代码:ptrdiff_t random(ptrdiff_t i) /雷的随机布置 return qrand()%i;ptrdiff_t (*p_random)(ptrdiff_t)=random;B

26、lockArea:BlockArea(int row,int column,int mine_number,QWidget* parent):QWidget(parent)set_block_area(row,column,mine_number,true);3.4 清除未靠近地雷的方块清除为靠近地雷的方块也是本论文介绍的重点对象。这里首先引入一个“递归”的概念,“递归”(Recursion)简单的说,就是一个程序能被自己所定义的语句调用。递归在程序设计上是一种重要的数据结构形态,通过递归程序的编写,在程序代码上会变得相当简洁,不过如果设计不当,会造成无穷循环或堆迭溢满的情形,所以递归的程序中

27、心必须含有if.then或Select Case等设计,以终止递归执行。在游戏过程中,当游戏者按下非地雷方块时,方块会沿四周八个方向向外翻开非地雷的方块。程序的执行方面必须判断:以按下方块为中心,检查周围八个方块是否为非地雷方块,若其中有一个方块是非地雷方块时,则又以其为中心,向外检查周围八个方块是否为非地雷方块,如此反复的执行即构成递归的使用条件。前面已经提到,递归必须设计终止的条件判断,在本游戏的递归架构中,当判断方块的内容为数字时(即在非地雷方块周围),即立即停止递归程序。递归其实也不是万能的,以本游戏做测试,当地雷区范围越大,且地雷数目不多时(一翻开非地雷方块,几乎全部方块都会翻开),

28、执行递归就会变的非常缓慢,甚至造成堆迭溢满(不足)的情形,所以在游戏设计上必须考虑地雷区的大小,以免造成执行时错误中断的情况发生。3.5 游戏的判断3.5.1 游戏成功当在规定的时间内将所有的雷都正确的标示出来或把雷全部留下不去翻开它,游戏就会就是成功,而且会弹出一个对话框“请输入你的姓名”如图3-7。这样就会在排行榜上显示你所创造的记录如图3-8。图3-7 游戏成功界面及弹出对话框图3-8 排行榜显示信息3.5.2 游戏失败当鼠标左键按下的方块为地雷方块时,地雷将会被引爆,游戏立即结束,弹出一个对话框“你输了”如图3-9。图3-9 游戏失败3.6 游戏测试结果在程序代码基本完成后,经过不断的

29、调试与修改,最后测试本次所设计的扫雷游戏能够正常运行,在基本功能与画面上与Windows自带的扫雷游戏没有太大差别,没有出现明显的错误和漏洞,但是在一些细节方面仍然需要完善,比如在游戏中可以加入一些声音的提示,在游戏完成和失败的时候可以弹出一些小的Flash动画。总的来说本次设计在功能上已经基本达到要求,其他细节方面有待以后完善。结 论毕业设计是大学学习阶段一次非常难得的理论与实际相结合的机会,通过这次比较完整的一个程序的设计,我摆脱了单纯的理论知识学习状态,和实际设计的结合锻炼了我的综合运用所学的专业基础知识,解决实际问题的能力,同时也提高我查阅文献资料、对程序整体的把握等其他能力水平,而且

30、通过对整体的掌控,对局部的取舍,以及对细节的斟酌处理,都使我的能力得到了锻炼,经验得到了丰富。这是我们都希望看到的也正是我们进行毕业设计的目的所在。通过这次的毕业设计,我们完成了基于Qt的扫雷游戏设计,设计了扫雷游戏的初始化界面、鼠标事件的实现、重新开始、难度选择、排行榜功能的实现。熟练掌握了Qt各种类的运用,各种控件的使用我都是随着设计的不断深入而不断熟悉并逐步掌握的。和老师以及同学的沟通交流更使我对程序整体的规划与设计有了新的认识也对自己提出了新的要求。这一次的毕业设计让我们积累了许多实际经验,让我们在未来的工作学习中表现出更高的应变能力和理解力。完成本次毕业设计给了我们很大的信心,但是也

31、让我们看到了自己许多不足的地方,学习其实就是一个不断完善的过程,正视自己的不足之处,在以后的工作和学习中不断的弥补这些不足之处。例如扫雷游戏设计可以添加一些背景音乐、背景图片、视频等功能,更能增加人们的娱乐性。参 考 文 献1 Daniel Solin,袁鹏飞24小时学通QT编程M北京:人民邮电出版社,20102 霍亚飞Qt及Qt Quick开发实践精解M北京航空航天大学出版,20113 郑阿奇,陈超等编著QT4开发实践M电子工业出版社,20114 穆煜嵌入式应用程序设计M人民邮电出版社,20125 刘若慧,毛莺池Linux操作系统M人民邮电出版社,20116 吴迪零基础学习Qt4编程M北京航空航天大学出版社,20107 萨默菲尔德,白建平Qt高级编程M电子工业出版社,20118 萨默菲尔德,布兰切特,闫锋欣C+ GUI Qt4编程M电子工业出版社,20089 蔡志明精通Qt4编程M电子工业出版社,201110 艾朱斯特,闫锋欣C+ Qt设计模式M电子工业出版社,2012

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号