基于Qt的俄罗斯方块的设计_第1页
基于Qt的俄罗斯方块的设计_第2页
基于Qt的俄罗斯方块的设计_第3页
基于Qt的俄罗斯方块的设计_第4页
基于Qt的俄罗斯方块的设计_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

1、华北水利水电大学课程设计报告 基于Qt的俄罗斯方块的设计课程名称: 嵌入式系统 学 院: 信息工程 专 业: 电子信息工程 姓 名: 杨斌 学 号: 201215616 同 组 人:201215601王跃宇 指导教师: 张晓华 日 期: 2015.7.8 摘要 俄罗斯方块是个比较经典的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右、向下和空格操作,(用信号和槽函数的关联来实现对按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。 

2、; Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。  本次设计用到的开发工具是Qt by Digia v4.8.4(MinGw 4.8.2 OpenSource,操作系统是wind

3、ows 10,C+为开发语言。关键词QT 槽函数 界面设计 算法 数组 程序设计 摘要2关键词2引言 51、QT安装使用62、功能设计简介92.1 游戏功能92.2 设计思路103、游戏流程103.1 简述游戏运行流程103.2 运行流程图124、 功能实现134.1 Gui界面设计实现134.1.1 框图简述134.1.2 详细界面设计简述134.2 程序实现164.2.1 主要文件介绍164.2.2 初始化(方块产生)174.2.3 游戏进行阶段(检测碰撞、旋转)194.2.4 消除计分(满行消除、计分)205、运行结果216、课程设计总结22附录23程序代码23引言 Qt是跨平台的应用程

4、序和UI框架。它包括跨平台类库、集成开发工具和跨平台 IDE。使用Qt,只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。 面向对像,Qt 的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。 Qt 提供了一种称为 signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 

5、深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。  俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在QQ等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 本设计利用数组作为方块的数据结构,提出一种用C语言和C+来实现的方法,实现基本的方块游戏功能

6、,虽然不能实现联网对战功能,但是可以通过设计实现本游戏巩固所学知识,增强动手能力,了解并熟悉游戏软件的设计与开发过程。1、QT安装使用1.1 QT安装· 直接到QT官网http:/www.qt.io/download/下载QT,这里我们我们以后还要用到可以选择最新版本,用的是windows平台所以可以选择Qt 5.5.0 for Windows 32-bit (MinGW 4.9.2, 959 MB) (info) 版本,下载完成后选择安装下面我们为了以后方便勾选所有的插件,安装完成后我们先不要运行需要在电脑配置里边添加变量,如下选择系统高级设置选择环境变量,在变量名pat

7、h在变量名最后边添加QT安装的路径C:QtQt5.5.05.5mingw492_32(注意:mingw492_32是QT安装的地方。至此,QT才可以完全的使用进行课程设计。2、功能设计简介 条目 说明 设计名称基于QT设计的俄罗斯方块 设计目的实现俄罗斯方块游戏的运行 界面需求背景自定义图片、布局自定义、方块颜色变换、方块下落变形 方块形状需求随机产生7种形状方块、实现变形 键盘处理事件需求方块下落时,可通过键盘方向键(上、下、左、右、空格键)对该方块进行向上(变形),向下(变形)、向左、向右、向下移动。 鼠标处理事件需求鼠标右键点击界面相应按钮可以实现开始、暂停、退出功能 显示需求当不同的方

8、块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定分数的时候,会增加相应的等级。2.1 游戏功能     随机产生不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落到给定的区域,下落一个方块奖励7分,若填满一行便消掉,相应区域计数,此时分数有奖励,每消一行奖励十分,当得分到达一定时,升级游戏难度,每关方块下落的速度不同,第一关默认下降速度500ms(0.5s),以后每升级一次速度递加,增加游戏难度。若在游戏中各形状填满了给定区域,游戏失败处于定格状态,此时可以重新开始游戏。游戏有暂停功能,当玩家点暂停按钮时,游戏

9、暂停,再次点击暂停按钮,游戏继续。2.2 设计思路要实现俄罗斯方块这个小游戏,需要从一下几个方面入手。1. ui界面的设计,包括整个窗口的大小,布局,部件的添加。2. 修改界面,以及ui与主程序的关联3. 方块颜色的实现4. 随机7种方块类型的产生,下一个方块的产生及显示,以及方块出现的位置5. 检测方块是否碰撞,以及如何下落6. 方块的旋转实现7. 出现方块时游戏计分,等级提升,下落速度的变化8. 满行时消除的检测实现9. 游戏结束时游戏的停止。10. 虚拟按键的支持3、游戏流程3.1 简述游戏运行流程(1)当按下开始“go girl”时随机产生7种方块类型中的一种,然后next中出现的方块

10、是和将要下落的方块同时出现。(2)要下落的方块随后检测碰撞,判断是否可以下落。下落时通过上下左右按键,调用函数改变坐标可以旋转方块,按空格键调用函数可以使方块加速下落。(3)每走一步都要检测碰撞,当下落道底部时,碰撞检测不能下落,此时在next中的方块开始下落,同时在随机产生另一个方块。(4)当一行满了之后,通过检测每一行的每一格是不是都有方块来判断是不是要消除,同时计分,等级,下落速度都随之相应的改变。(5)当方块到顶之后,将要下落的的哪一个方块检测是否碰撞,当检测不能下落时,游戏结束。(6)这里定义的是下落一个方块得七分,当得分为25的倍数的时候level升级,同时下落的速度初始为500m

11、s,每升一级1000 / (1 + this.level)来运算。3.2 运行流程图 初始化随机生成某一类型方块否清行得分判断能否下落游戏结束方块下落旋转移动放置方块是否检测满行清除检测碰撞是否越界是否到底否是4、 功能实现4.1 Gui界面设计实现4.1.1 框图简述(1)布局窗口大小、部件位置改变,部件添加删除、部件大小改变(2)添加文字在每一个按钮、部件添加文字(3)改变背景自定义背景添加(4)修改结果对比图片所示,表格阐述(5)难点问题解释Ui文件的调用、界面按钮与内部的连接4.1.2 详细界面设计简述利用QT中自带的Designer设计师来改变界面,打开根文件夹下的.ui文件,并打破

12、布局。(1)布局 通过拖拽可以改变窗口的大小,可通过拖拽左边的部件来添加部件。然后就可以按照自己喜欢的风格来改变各个部件的位置,大小。(2) 添加文字 各个部件的文字也可以通过双击来添加,改变文本内容,部件名称。 (3) 改变窗口的背景 选择一个张自己喜欢的图片放在设计的文件目录下。然后在Designer中往窗口里添加一个Push button部件,并右键选择放在后面。找到想要的背景图片放到根文件夹,然后在tetrix.qrc文件中添加一个指令并改成所要用如上图所示,然后选择Push button在其QWidget中选择style sheet添加选用的图片,然后在QWidget中选择geone

13、try选择需要的尺寸大小这里我们选择720*570.并拖动主界面到相同的大小。然后在根目录文件打开main.cpp文件并修改成相同的尺寸。最后选择保存。就完成了界面背景和尺寸大小的修改。(4)设计结果和示例中的窗口界面进行对比如下图,如上对比,实现了如下的改变(1)布局窗口大小、部件位置改变,部件添加删除、部件大小改变(2)添加文字在每一个按钮、部件添加文字(3)改变背景自定义背景添加,修改成自己喜爱的背景。一共有四个按钮,分别实现暂停,开始,退出,调试。游戏运行界面。(5)设计过程中发现的难点 虽然很简便的利用Designer设计出了界面,但是其中的原理才是难点。1,实现界面背景的改变是我们

14、自己琢磨出来的方法,也不知道对不对,但是对于显示出来的界面是很好的,难点就是添加图片的路径和stylesheet的利用 2,ui文件如何被调用的 利用ui界面作为一个子对象,完成对子对象的构造之后调用stepUi来实现。3. 按钮的点击如何与内部实现连接每一个按钮对应不同的功能,每一个功能的实现都有一个槽函数与其对应。不如当你按下pause这个按钮时,在tetrixwindow.js这个文件中“ui.findChild("pauseButton").clicked.connect(this.board, this.board.pause);”槽函数接口,实现按钮的点击,连接

15、这个函数调用在tetrixboard.js中,如图的函数,从而实现按钮与内部功能的连接。4.2 程序实现4.2.1 主要文件介绍 程序主要有几个文件,main.cpp相当于入口、.h文件是头文件、.js文件介绍具体调用函数以及功能的实现、Debug中产生最终可执行文件、Makefile文件进行编译、.ui界面设计文件。4.2.2 初始化(方块产生) 大致分为几个主要模块函数来实现功能。随机方块的产生、检测是否碰撞下落、检测满行消除、方块的旋转。 随机其中方块的产生、满行消除、重点介绍一下,检测碰撞、方块的旋转概述一下。New pieceShape产生四个组成形状的小方块随机产生0到7的随机数流

16、程图: 绘制方块图形确定方块产生位置程序文字简述:这个函数的目的是产生用于构造大方块的四个小方块,循环四次产生四个。利用这个函数语句的运算随机产生0到7的一个数然后转到这里,这里有八种类型,下面照应的每一组数组代表一个方块的形状。这里是通过坐标来绘图的。举个例子,第三组数组代表四个坐标,建立个xy坐标系,把每一个坐标画出来,然后连线就出现了方块为s形状。这样就产生了一个方块。利用这个函数固定随机产生方块位置为窗口中央,然后开始画出方块。4.2.3 游戏进行阶段(检测碰撞、旋转)检测碰撞是否下落 产生方块后方块需要落下,这时方块落下的条件就是检测每一个方块组每一个小方块是否可以移动往某一个方向移

17、动一格。利用这个函数,将重新定以后的x,y进行检测,是否越界。当都不满足上述条件时,重新赋值,画出图形。方块的旋转在.cpp先判断每一个菱形是否为方块,然后调用上述函数,将方块组每一个方块的y赋给x,将-x在赋给y,坐标变化,完成旋转。4.2.4 消除计分(满行消除、计分)将要消除的行的上一行代替消除行检测22行每行进行检测小方块个数满行消除将记录满行的行消除记录满行的行标方块落下流程图:记录得分程序文字简述:利用上述语句,从上到下,对每一行的每一格进行检测,是否有方块,当每一个都有方块时记录行标。检测完毕后消除记录的行,利用后面的函数,用上一行代替要消除的那一行,依次代替。计分:下落一个为7分,消除一行得十分,空格加速下降有额外分数增加,分数位25的倍数时升级。5、运行结果如图方块正在下落,在next里面产生下一个方块如图已经消除了7行,得分610,等级为2级。6、课程设计总结 这次的课程设计是通过QT设计俄罗斯方块。对于一个初学者来说,QT是陌生的,c+语言也是很陌生的。但是经过一步一步的琢磨,查找资料,明白了QT环境的配置,下载GCC,G+编译器,通过这些编译器和一些指令qmake make生成可执行文件等等都是新知识。 可以说这次的课程设计学会运用了一个新的软件,学会了QT很多的知识,这对自己来说是一笔很大的收获。与此同时,

温馨提示

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

评论

0/150

提交评论