1、 济源职业技术学院 毕业设计(论文) 题目 基于 Qt 的扫雷游戏设计 系别 信息工程系 专业 计算机应用技术 班级 计应 1002 班 姓名 常慧珍 学号 10090224 指导教师 李攀 日期 二零一二年九月 基于 Qt 的扫雷游戏设计 总计:毕业设计(论文) 25 页 图表 10 幅 I 摘 要 扫雷游戏是 一款经典的小游戏,这款游戏不仅可以让人们充分享受娱乐的目的,而且可以通过这款小游戏开发人的逻辑推理能力 和判断 能 力 。 本次毕业设计 我们以Qt4.6 为开发环境,设计 并开发 了基于 Qt 的扫雷游戏。 扫雷游戏主要研究以下两个方面: 第 一是初始化问题,包括随机产生本局游戏中
2、的雷数,雷的分布对于每个小区域如何获得周围地区分布的雷数等等。 第二就是对鼠标事件的处理,即在游戏过程中对鼠标事件应如何做出反应 。 本 论文 以 Qt 作为开发软件, 首先 使用信号与槽的方法实现菜单、工具栏的功能,其次又以 MousePressEvent 鼠标事件发出信息 来 了解使用者的意图,进而做出相对应的动作, 再次介绍了 清除地雷区方块 的方法, 通过递归程序的编写,在程序代码上会变得相当简洁 。 最后 利 用 布局管理组( Layouts)进行 整体布局 。 使 用 C+语言 设计 完成 了扫雷游戏的初始化界 面,实现了扫雷游戏的计时、重新开始、难度设置、排行榜、帮助等功能。还
3、增 加了游戏在成败时 弹 出对话框等 功能 。总的来说本次设计在功能上已经基本达到预期的要求。 但还有一些不足,比如 扫雷游戏设计还可以添加一些背景音乐、背景图片、视频等功能,更能增加人们的娱乐性 。 关键词: 扫雷游戏; Qt; C+ II ABSTRACT Minesweeper game is a classic game, the game can not only allow people to fully enjoy the entertainment purposes, and by this small game development logical reasoning ab
4、ility and judgment. The graduation project to Qt4.6 development environment, design and development of Qt-based game of Minesweeper. The minesweeper game the following two aspects: The first is the initialization problems, including randomly generated number of Council Game Ray Ray distribution for
5、each small area how to get around the geographical distribution of Ray. The second is the processing of mouse events, mouse events in the course of the game how to react. In this thesis, QT signals and slots as the development of software, the first to use the method to achieve the functionality of
6、the menus, toolbars, followed Youyi mousePressEvent mouse events issued information to understand the users intent, and then make a corresponding action, again introduced a clear Minefields box by recursive program code will become quite simple. Finally, the the layout management group (Layouts) ove
7、rall layout. Completed minesweeping games initialization interface design, to achieve a mine-sweeping game of timing, start again, difficulty settings, rankings, help functions using the C language. Game in the success or failure of the pop-up dialog box. Overall, the design function has basically r
8、eached the expected requirements. But there are some disadvantages, such as minesweeping game design can also add some background music, background image, video, and can help increase peoples entertainment. Keywords: Minesweeper game; Qt; C+ III 目 录 摘 要 . I ABSTRACT .II 第 1 章 绪论 . - 1 - 1.1 研究背景 . -
9、 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+面向对象程序设计 . -
10、4 - 2.4 Qt 程序用到 的类 . - 5 - 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
11、.3.7 雷区的随机布置 . - 13 - 3.4 清除未靠近地雷的方块 . - 14 - 3.5 游戏的判断 . - 15 - IV 3.5.1 游戏成功 . - 15 - 3.5.2 游戏失败 . - 15 - 3.6 游戏测试结果 . - 16 - 结 论 . - 17 - 致 谢 . - 18 - 参 考 文 献 . - 19 - 基于 Qt 的扫雷游戏设计 - 1 - 第 1 章 绪论 1.1 研究背景 随着计算机与网络的普及 , 人们生活水平的提高 , 电脑游戏越来越成为人们生活中不可或缺的一部分 , 在人们繁忙的工作之余 , 给人带去欢乐。 随着电脑游戏产业的规模越来越大 , 开
12、发一款成功的电脑游戏靠个人之力已非易事。不过 , 随着市场上开发的游戏产品越来越丰富 , 各种题材的游戏越来越多 , 创意已成为一款成功游戏的最重要的特点。例如目前流行的游戏 “ 植物大战僵尸 ” 、“ 愤怒的小鸟 ”, 虽然都是一些很小的休闲游戏 , 但是因其特有的风格 , 使得它们都 深受人们的喜爱 。 本次毕业设计将利用 Qt4.6 作为开发工具, 设计了基于 Qt 的扫雷游 戏。 1.2 研究原因 扫雷游戏是 Windows 操作系统自带的一款小游戏, 与那些网络游戏和 3D游戏相比,它有编写简单容易上手等特点 , 游戏开发成本 比较低 ,开发娱乐性强的游戏就成为当前的主要课题,在这种
13、趋势下各种小型的低成本的游戏软件应运而生。其中,系统自带的小游戏也占据了相当重要的地位,非常 符合 人们娱乐 的 要求。这些小游戏大都是以益智和娱乐为目的,不仅给紧张工作的人们以放松,还可以让人们的大脑得到开发。本课题就是 基于 Qt 扫雷游戏的设计 。 1.3 研究意义 经过三年的大学学习,我对理论知识已经有了一定的了解与认知 ,本次的毕业设计便是将书本上所学的理论知识与实际相结合,同时也是对所学知识的一种检查,希望通过本次的毕业设计使自己在程序 编写 和 游戏 开发 上有新的认识并能有所提高。本次毕业设计既锻炼了我们的实际动手能力, 又培养 了 我们的自信心。 在老师的指导下进行了一次模拟
14、实际产品的开发, 这 对 以后工作 和学习 能力的培养具有重要意义。基于 Qt 的扫雷游戏设计 - 2 - 第 2 章 Qt 简介 Qt 是一个跨平台的 C+图形用户界面应用程序框架。它给应用程序开发者提供建立艺术级图形用户所需的所有功能。它是完全面对对象的,很容易扩展,并且允许真正的组件编程。 Qt 已经在 Windows、 Linux 和 Embbeded Linux 上成功的推广。而且 Qt 是一个开源项目,开发成本比较低,又为 开发者提供了免费而又友好的集成开发环境。 Qt 采用 C+语言作为开发语言 , 使用 C+语言 开发,其运行效率可以得到保证。 2.1 Qt 特征 引入一种信号
15、和槽机制,可查询和可设计的属性,强大的事件和事件过滤器,根据上下文进行国际化的字符串翻译,完善的时间间隔驱动的计时器使得在一个事件驱动的图形界面程序中很好地集成许多任务成为可能。以一种自然的方式组织对象所有权的分层次和可查询的对象树。 2.2 Qt 核心编程技术 2.2.1 元对象系统 Qt 元对象系统提供了对象 间的通信机制(信号与槽)、运行时类型信息和动态属性系统的支持,是 标准的 C+的一个扩展,它使 Qt 能更好地实现 GUI 图形用户界面编程。 Qt 的元对象系统不支持 C+模板,尽管模板扩展了标准 C+的功能,但是对元对象系统提供了模板无法提供的一些特性。 Qt 的元对象基于三个事
16、实: 基类 Q_Object:任何想使用元对象系统功能的类必须继承 QObject。 Q_OBJECT 宏: Q_OBJECT 宏必须出现在类的私有声明区,已启动元对象的特性。 元对象编译器 (Meta-Object Compiler, moc):为 QObject 子类实现元对象特性提供必要的代码实现。 编译器 moc 产生能被标准 C+编译器访问的附加 C+代码,带有 moc 预编译器的 C+基本上提供了面向对象的灵活性,并保持了 C+的执行效率和扩展性。 基于 Qt 的扫雷游戏设计 - 3 - 2.2.2 信号和槽 机制 Qt 提供了信号和槽机制来完成界面操作的响应,是完成任意两个 Qt
17、 对象之间的通信机制。其中,信号会在某个特定的情况或动作下被触发,槽是等同于接受并处理信号的函数。每个 Qt 对象都包含若干个预定义的信号和若干个预定义的槽,当某一个特定事件发生时,一 个信号被发射,与信号相关联的槽则会响应信号完成相应的处理。当一个类被继承时,该类的信号和槽也同时被继承,也可以 根据 需要 自定义 信号和槽。 常用的连接方式为: connect(Object1,SIGNAL(singal),Object2,SLOT(slot); singal为对象 Object1 的信号, slot 为对象 Object2 的槽。 2.2.3 QObject 类 QObject 是 Qt 类
18、体系的唯一基类 , 是 Qt 各种功能的源头活水,就象 MFC 中的CObject 和 Dephi中的 TObject。 2.2.4 对象树 QObject 在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject 时,它就被添加到父对象的 children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。 2.2.5 事件 事件是由窗口系统或 Qt 本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由
19、于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立 产生的。 2.2.6 QApplication 类 QApplication 类和 QWidget 类都是 QObject 类的子类。 QApplication 类负责 GUI应用程序的控制流和主要的设置,它包括主事件循环体,负责处理和调度所有来自窗口系统和其他资源的事件,并且处理应用程序的开始、结束以及会话管理,还包括系基于 Qt 的扫雷游戏设计 - 4 - 统和应用程序方面的设置。对于一个应用程序来说,建立此类的对象是必不可少的。 2.2.7 QWidget 类 QWidget 类是所有用户接口对象的基类,它继承了 QObj
20、ect 类的属性。组件是用户界面的单元组成部 分,它接收鼠标、键盘和其它从窗口系统来的事件,并把它自己绘制在盘屏幕上。 QWidget 类有很多成员函数,但一般不直接使用,而是通过子类继承来使用其函数功能。如, QPushButton、 QlistBox 等都是它的子类。 2.2.8 基本布局 (QLayout) Qt 提供了 QHBoxLayout 类、 QVBoxLayout 类及 QGridLayout 类等的基本布局管理,分别是水平布局管理、垂直布局管理和网格布局管理。他们之间的继承管理如图2-1 所示 。 Q L a y o u tQ B o x L a y o u tQ G r i
21、 d L a y o u tQ H B o x L a y o u tQ V B o x L a y o u t图 2-1 各种布局类及之间的关系 2.3 C+面向对象程序设计 面向对象编程是一种计算机编程架构。面向对象的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。面向对象编程达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接受信息、处理数据和向其他对象发送信息。 面向对象程序设计中的概念主要包括:类、对象、数据封装、继承、动态绑定、多态性、数据抽象、消息传递。通过这些概念面 向对象的思想得到了具体的体现。 类 类是具有相同类型的对象的抽象。一个对象所包含的所有数据和代码可以通过类来构造。 C+中, class 是类声明的关键字, class 的后面是要声明的类名。类中的数