课程设计报告俄罗斯方块.docx
- 文档编号:25012533
- 上传时间:2023-06-03
- 格式:DOCX
- 页数:25
- 大小:190.61KB
课程设计报告俄罗斯方块.docx
《课程设计报告俄罗斯方块.docx》由会员分享,可在线阅读,更多相关《课程设计报告俄罗斯方块.docx(25页珍藏版)》请在冰豆网上搜索。
课程设计报告俄罗斯方块
课程设计报告
题目俄罗斯方块
专业计算机学院(嵌入式方向)
班级1
姓名
学号
同组人
指导老师史毓达
计算机学院
2016.6.15
1
摘要................................................................
1
关键字..............................................................
1
1
功能说明
..........................................................
1
2
开发环境
..........................................................
1
2.1Qt
简介......................................................
1
2.2Qt
安装......................................................
1
2.3Qt
开发基础..................................................
2
2.3.1Qt对象与对象树........................................
2
2.3.2
信号与槽...............................................
2
2.3.3
事件...................................................
5
3
系统设计..........................................................
5
3.1
需求分析....................................................
5
3.2
框架设计....................................................
6
3.2.1
俄罗斯方块基本规则.....................................
6
3.2.2
系统模块...............................................
7
3.3
系统实现....................................................
7
4
系统测试..........................................................
9
5
课程设计总结.....................................................
10
6
附录.............................................................
10
6.1
参考资料...................................
错误!
未定义书签。
6.2
程序源码...................................................
10
2
摘要
Qt是一个跨平台的C++图形用户界面应用程序框架。
本程序利用
Qt提供的相关类,实现了俄罗斯方块的基本功能。
关键字
QT、嵌入式、软件开发
1功能说明
支持俄罗斯方块游戏的基本功能
支持虚拟按键
2开发环境
操作系统:
ubuntu10.04LTS
开发工具:
gnu编译工具链(gcc等)、QtCreator、Qt4.6.2
2.1Qt简介
Qt是跨平台的应用程序和UI框架。
它包括跨平台类库、集成开
发工具和跨平台IDE。
使用Qt,只需一次性开发应用程序,无须重
新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程
序。
2.2Qt安装
1.Qt官网()上有完整的SDK下载,下载开发
平台的SDK,下载完成后点击即可安装
2.如果是使用Linux系统,也可能通过命令行进行安装,以ubuntu
10.04LTS为例:
1
sudoapt-getinstallqt4-dev-toolsqtcreatorqt4-doc
qt4-qtconfigqt-demos
3.如果希望构建嵌入式Qt开发平台,则需要参考相关开发板的说明,一般是先制作交叉编译工具链、再交叉编译一个用于目标板的Qt库,
这里不再详述
2.3Qt开发基础
2.3.1Qt对象与对象树
QObject是所有Qt类的基类。
QObject组织成为对象树。
当你创
建QObject时,将另外的对象作为其父对象,这个对象就被加入其
父对象的children()列表,并且当父对象销毁时,这个对象也能够被销毁。
事实证明,这种实现方法非常适合GUI对象。
例如,一个
QShortcut(键盘快捷键)对象是相关窗口的子对象,所以当用户关
闭窗口时,这个对象也能够被删除。
QWidget作为所有能够显示在屏幕上的组件的父类,扩展了这种
父子关系。
一个子对象通常也成为一个子组件,就是说,它被显示在
父组件的坐标系统中,受到父组件的边界影响可能会有剪切等等。
例
如,当应用程序销毁掉已关闭的消息对话框时,对话框上面的按钮和
标签一起被销毁,就像我们希望的那样,因为这些按钮和标签都是对
话框的子对象。
2.3.2信号与槽
在GUI编程中,当我们改变了一个组件,我们经常需要通知另外的一个组件。
更一般地,我们希望任何类型的对象都能够与另外的对
2
象通讯。
例如,如果用户点击了关闭按钮,我们希望窗口的close()
函数被调用。
早期工具库对这种通讯使用回调实现。
回调是一个指向一个函数
的指针,所以如果你希望某种事件发生的时候,处理函数获得通知,
你就需要将指向另外函数的指针(也就是这个回调)传递给处理函数。
这样,处理函数就会在合适的时候调用回调函数。
回调有两个明显的
缺点:
第一,它们不是类型安全的。
我们不能保证处理函数传递给回
调函数的参数都是正确的。
第二,回调函数和处理函数紧密地耦合在
一起,因为处理函数必须知道哪一个函数被回调。
在Qt中,我们有回调技术之外的选择:
信号槽。
当特定事件发出时,一个信号会被发出。
Qt组件有很多预定义的信号,同时,我们也可以通过继承这些组件,添加自定义的信号。
槽则能够响应特定信号的函数。
Qt组件有很多预定义的槽,但是更常见的是,通过继承组件添加你自己的槽,以便你能够按照自己的方式处理信号。
3
信号槽机制是类型安全的:
信号的签名必须同接受该信号的槽的签名一致(实际上,槽的参数个数可以比信号少,因为槽能够忽略信号定义的多出来的参数)。
既然签名都是兼容的,那么编译器就可以帮助我们找出不匹配的地方。
信号和槽是松耦合的:
发出信号的类不知道也不关心哪些槽连接到它的信号。
Qt的信号槽机制保证了,如果你把一个信号同一个槽连接,那么在正确的时间,槽能够接收到信号的参数并且被调用。
信号和槽都可以有任意类型的任意个数的参
数。
它们全部都是类型安全的。
所有继承自QObject或者它的一个子类(例如QWidget)都可以包含信号槽。
信号在对象改变其状态,并且这个状态可能有别的对象关心时被发出。
这就是这个对象为和别的对象交互所做的所有工
作。
它并不知道也不关心有没有别的对象正在接收它发出的信号。
这是真正的信息封装,保证了这个对象能够成为一个组件。
槽能够被用于接收信号,也能够像普通函数一样使用。
正如一个
对象并不知道究竟有没有别的对象正在接收它的信号一样,一个槽也
不知道有没有信号与它相连。
这保证了使用Qt可以创建真正相互独
立的组件。
你可以将任意多个信号连接到同一个槽上,也可能将一个信号连接任意多个槽。
同时,也能够直接将一个信号与另一个信号相连(这会使第一个信号发出时,马上发出第二个信号)。
总之,信号槽建立起一种非常强大的组件编程机制。
4
2.3.3事件
在Qt中,事件是作为对象处理的,所有事件对象继承自抽象类
QEvent。
此类用来表示程序内部发生或者来自于外部但应用程序应该
知道的动作。
事件能够能过被QObject的子类接受或者处理,但是
通常用在与组件有关的应用中。
本文档主要阐述了在一个典型应用中
的事件接收与处理。
当一个事件产生时,Qt通过实例化一个QEvent的合适的子类来
表示它,然后通过调用event()函数发送给QObject的实例(或者
它的子类)。
event()函数本身并不会处理事件,根据事件类型,它
将调用相应的事件处理函数,并且返回事件被接受还是被忽略。
一些
事件,比如QMouseEvent和QKeyEvent,来自窗口系统;有的,比
如QTimerEvent,来自于其他事件源;另外一些则来自应用程序本身。
通常事件的处理需要调用一个虚函数。
比如,QPaintEvent事件
的处理需要调用QWidget:
:
paintEvent()函数。
这个虚函数负责做
出适当的响应,通常是用来重绘组件。
如果你在自己的函数中并不打
算实现所有的处理,你可以调用基类的实现。
3系统设计
3.1需求分析
可随机生成7种基本方块单元
不同的方块单元具备不同的颜色
基本方块单元在移动时支持两种操作:
旋转、移动
具备计分及升级系统
5
支持虚拟按键
3.2框架设计
3.2.1俄罗斯方块基本规则
一个用于摆放小型正方形的平面虚拟场地,其标准大小:
行宽为
10,列高为20,以每个小正方形为单位
一组由4个小型正方形组成的规则图形,英文称为Tetromino,中文通称为方块共有7种,分别以S、Z、L、J、I、O、T这7个字母的形状来命名
随机发生器不断地输出单个方块到场地顶部,以一定的规则进行
移动、旋转、下落和摆放,锁定并填充到场地中。
每次摆放如果将场地的一行或多行完全填满,则组成这些行的所有小正方形将被消除,并且以此来换取一定的积分或者其他形式的奖励。
而未被消除的方块会一直累积,并对后来的方块摆放造成各种影响
如果未被消除的方块堆放的高度超过场地所规定的最大高度(并不一定是20或者玩家所能见到的高度),则游戏结束
6
3.2.2系统模块
如上图所示,系统可由以下几个模块组成:
虚拟显示屏:
为系统核心模块,负责游戏元素的显示、游戏逻辑
的执行、以及游戏状态的维护、接收操作模块的操作信息、为辅
助显示模块提供必要的信息
辅助显示模块:
显示下一个方块单元的类型、当前分数、当前等
级
3.3系统实现
系统源文件布局如下:
7
my_tetrix.pro系统工程文件
gameview.h:
gameview类声明头文件
mybox.h:
mybox类声明头文件
board.h:
board类声明头文件
image.qrc:
系统资源文件,存放了表示方向的图像数据
gameview.cpp:
gameview类的实现
mybox.cpp:
myboxe类的实现
board.cpp:
board类的实现
main.cpp:
程序入口
main.cpp中初始化一个gameview实例,并使其显示。
gameview对应程序窗口,它包含一个游戏显示区(board)、辅助
显示区、及一些按键,gameview在自身的构造函数中完成对这些界
8
面元素的初始化及布局工作,同时建立起必要的信号-槽连接。
mybox类表示基本方块单元,总共有7种,即I、T、J、L、O、Z、
S,用myboxShape来标识方块类型。
mybox提供了设置方块形状、设
置旋转、获取方块信息的一些公共成员函数。
mybox使用coords[4][2]
这个二维数组来存储方块的形状信息,这个数组的每行表示一个点的
坐标。
board是整个程序的核心,相对前两个类,这个类要复杂很多。
它提供了如下几个槽:
start()、pause()、moveRight()、moveLeft()、moveDown()、rotateRight()、rotateLeft()。
提供了scoreChanged
与levelChanged两个信号。
paintEvent负责整个board的重绘。
removeFullLines负责判断是否某行全部为方块,如果是,则把该行
消除,同时添加一定分数及经验。
4系统测试
9
程序的运行界面如上图所示,经测试,该程序具备了俄罗斯方块
游戏的基本功能。
5课程设计总结
通过这次嵌入式实验,我对嵌入式技术有了更加深入的了解,在老师
悉心帮助下,和其他同学的共同努力下,我们最终圆满地完成了这次
课程设计。
但是实验中,也暴露了自己在软件运用方面的不足和缺点,
以后在这方面上认真学习和研究,争取在毕业之前能更上一层楼。
6附录
程序源码(见压缩包中源代码文件夹)
10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 报告 俄罗斯方块