基于Qt的俄罗斯方块的设计.docx
- 文档编号:9626574
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:18
- 大小:1.23MB
基于Qt的俄罗斯方块的设计.docx
《基于Qt的俄罗斯方块的设计.docx》由会员分享,可在线阅读,更多相关《基于Qt的俄罗斯方块的设计.docx(18页珍藏版)》请在冰豆网上搜索。
基于Qt的俄罗斯方块的设计
华北水利水电大学
课程设计报告
基于Qt的俄罗斯方块的设计
课程名称:
嵌入式系统
学院:
信息工程
专业:
电子信息工程
**********************
学号:
*********
同组人:
201215601王跃宇
*****************
日期:
2015.7.8
摘要
俄罗斯方块是个比较经典的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右、向下和空格操作,(用信号和槽函数的关联来实现对按键事件的控制)。
然后程序根据这七种方块堆叠成各种不同的模型。
Qt在源代码级上实现了跨平台特性,极大的支持了跨平台通用软件的开发。
Qt可以用同一个源程序在不同平台上编译链接,生成目标代码,并取得相同的运行效果,称为“一次编写,随处编译”,利用这种方法充分实现了程序的跨平台运行。
这种基于源代码的跨平台特性不仅解决了性能的问题,而且可以发挥各个平台的优势,充分利用每个平台自身的特点;并且即可以在新环境下实现原有软件的功能和特点,减少开发费用,还可以改进原有软件的不足,增加新的需求,从而提高软件的质量,延长软件生命期。
本次设计用到的开发工具是QtbyDigiav4.8.4(MinGw4.8.2OpenSource,操作系统是windows10,C++为开发语言。
关键词
QT槽函数界面设计算法数组程序设计
引言
Qt是跨平台的应用程序和UI框架。
它包括跨平台类库、集成开发工具和跨平台IDE。
使用Qt,只需一次性开发应用程序,无须重新编写源代码,便可跨不同桌面和嵌入式操作系统部署这些应用程序。
面向对像,Qt的良好封装机制使得Qt的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。
Qt提供了一种称为signals/slots的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。
俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。
俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。
这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。
俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。
现在QQ等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。
对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。
本设计利用数组作为方块的数据结构,提出一种用C语言和C++来实现的方法,实现基本的方块游戏功能,虽然不能实现联网对战功能,但是可以通过设计实现本游戏巩固所学知识,增强动手能力,了解并熟悉游戏软件的设计与开发过程。
1、QT安装使用
1.1QT安装
∙直接到QT官网http:
//www.qt.io/download/下载QT,这里我们我们以后还要用到可以选择最新版本,用的是windows平台所以可以选择Qt5.5.0forWindows32-bit(MinGW4.9.2,959MB) (info)版本,下载完成后选择安装
下面我们为了以后方便勾选所有的插件,安装完成后我们先不要运行需要在电脑配置里边添加变量,如下
选择系统高级设置
选择环境变量,在变量名path
在变量名最后边添加QT安
装的路径C:
\Qt\Qt5.5.0\5.5\mingw492_32(注意:
mingw492_32是QT安装的地方。
至此,QT才可以完全的使用进行课程设计。
2、功能设计简介
条目
说明
设计名称
基于QT设计的俄罗斯方块
设计目的
实现俄罗斯方块游戏的运行
界面需求
背景自定义图片、布局自定义、方块颜色变换、方块下落变形
方块形状需求
随机产生7种形状方块、实现变形
键盘处理事件需求
方块下落时,可通过键盘方向键(上、下、左、右、空格键)对该方块进行向上(变形),向下(变形)、向左、向右、向下移动。
鼠标处理事件需求
鼠标右键点击界面相应按钮可以实现开始、暂停、退出功能
显示需求
当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。
当达到一定分数的时候,会增加相应的等级。
2.1游戏功能
随机产生不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落到给定的区域,下落一个方块奖励7分,若填满一行便消掉,相应区域计数,此时分数有奖励,每消一行奖励十分,当得分到达一定时,升级游戏难度,每关方块下落的速度不同,第一关默认下降速度500ms(0.5s),以后每升级一次速度递加,增加游戏难度。
若在游戏中各形状填满了给定区域,游戏失败处于定格状态,此时可以重新开始游戏。
游戏有暂停功能,当玩家点暂停按钮时,游戏暂停,再次点击暂停按钮,游戏继续。
2.2设计思路
要实现俄罗斯方块这个小游戏,需要从一下几个方面入手。
1.ui界面的设计,包括整个窗口的大小,布局,部件的添加。
2.修改界面,以及ui与主程序的关联
3.方块颜色的实现
4.随机7种方块类型的产生,下一个方块的产生及显示,以及方块出现的位置
5.检测方块是否碰撞,以及如何下落
6.方块的旋转实现
7.出现方块时游戏计分,等级提升,下落速度的变化
8.满行时消除的检测实现
9.游戏结束时游戏的停止。
10.虚拟按键的支持
3、游戏流程
3.1简述游戏运行流程
(1)当按下开始“gogirl”时随机产生7种方块类型中的一种,然后next中出现的方块是和将要下落的方块同时出现。
(2)要下落的方块随后检测碰撞,判断是否可以下落。
下落时通过上下左右按键,调用函数改变坐标可以旋转方块,按空格键调用函数可以使方块加速下落。
(3)每走一步都要检测碰撞,当下落道底部时,碰撞检测不能下落,此时在next中的方块开始下落,同时在随机产生另一个方块。
(4)当一行满了之后,通过检测每一行的每一格是不是都有方块来判断是不是要消除,同时计分,等级,下落速度都随之相应的改变。
(5)当方块到顶之后,将要下落的的哪一个方块检测是否碰撞,当检测不能下落时,游戏结束。
(6)这里定义的是下落一个方块得七分,当得分为25的倍数的时候level升级,同时下落的速度初始为500ms,每升一级1000/(1+this.level)来运算。
3.2运行流程图
4、功能实现
4.1Gui界面设计实现
4.1.1框图简述
(1)布局
窗口大小、部件位置改变,部件添加删除、部件大小改变
(2)添加文字
在每一个按钮、部件添加文字
(3)改变背景
自定义背景添加
(4)修改结果对比
图片所示,表格阐述
(5)难点问题解释
Ui文件的调用、界面按钮与内部的连接
4.1.2详细界面设计简述
利用QT中自带的Designer设计师来改变界面,打开根文件夹下的.ui文件,并打破布局。
(1)布局
通过拖拽可以改变窗口的大小,可通过拖拽左边的部件来添加部件。
然后就可以按照自己喜欢的风格来改变各个部件的位置,大小。
(2)添加文字
各个部件的文字也可以通过双击来添加,改变文本内容,部件名称。
(3)改变窗口的背景
选择一个张自己喜欢的图片放在设计的文件目录下。
然后在Designer中往窗口里添加一个Pushbutton部件,并右键选择放在后面。
找到想要的背景图片放到根文件夹,然后在tetrix.qrc文件中添加一个指令并改成所要用
如上图所示,然后选择Pushbutton在其QWidget中选择stylesheet添加选用的图片,
然后在QWidget中选择geonetry选择需要的尺寸大小这里我们选择720*570.并拖动主界面到相同的大小。
然后在根目录文件打开main.cpp文件并修改成相同的尺寸。
最后选择保存。
就完成了界面背景和尺寸大小的修改。
(4)设计结果
和示例中的窗口界面进行对比如下图,
如上对比,实现了如下的改变
(1)布局
窗口大小、部件位置改变,部件添加删除、部件大小改变
(2)添加文字
在每一个按钮、部件添加文字
(3)改变背景
自定义背景添加,修改成自己喜爱的背景。
一共有四个按钮,分别实现暂停,开始,退出,调试。
游戏运行界面。
(5)设计过程中发现的难点
虽然很简便的利用Designer设计出了界面,但是其中的原理才是难点。
1,实现界面背景的改变是我们自己琢磨出来的方法,也不知道对不对,但是对于显示出来的界面是很好的,难点就是添加图片的路径和stylesheet的利用
2,ui文件如何被调用的
利用ui界面作为一个子对象,完成对子对象的构造之后调用stepUi来实现。
3.按钮的点击如何与内部实现连接
每一个按钮对应不同的功能,每一个功能的实现都有一个槽函数与其对应。
不如当你按下pause这个按钮时,在tetrixwindow.js这个文件中“ui.findChild("pauseButton").clicked.connect(this.board,this.board.pause);”槽函数接口,实现按钮的点击,连接这个函数调用在tetrixboard.js中,如图的函数,从而实现按钮与内部功能的连接。
4.2程序实现
4.2.1主要文件介绍
程序主要有几个文件,main.cpp相当于入口、.h文件是头文件、.js文件介绍具体调用函数以及功能的实现、Debug中产生最终可执行文件、Makefile文件进行编译、.ui界面设计文件。
4.2.2初始化(方块产生)
大致分为几个主要模块函数来实现功能。
随机方块的产生、检测是否碰撞下落、检测满行消除、方块的旋转。
随机其中方块的产生、满行消除、重点介绍一下,检测碰撞、方块的旋转概述一下。
流程图:
程序文字简述:
这个函数的目的是产生用于构造大方块的四个小方块,循环四次产生四个。
利用这个函数语句的运算随机产生0到7的一个数
然后转到这里,这里有八种类型,下面照应的每一组数组代表一个方块的形状。
这里是通过坐标来绘图的。
举个例子,第三组数组代表四个坐标,建立个xy坐标系,把每一个坐标画出来,然后连线就出现了方块为s形状。
这样就产生了一个方块。
利用这个函数固定随机产生方块位置为窗口中央,然后开始画出方块。
4.2.3游戏进行阶段(检测碰撞、旋转)
检测碰撞是否下落
产生方块后方块需要落下,这时方块落下的条件就是检测每一个方块组每一个小方块是否可以移动往某一个方向移动一格。
利用这个函数,将重新定以后的x,y进行检测,是否越界。
当都不满足上述条件时,重新赋值,画出图形。
方块的旋转
在.cpp先判断每一个菱形是否为方块,然后调用上述函数,将方块组每一个方块的y赋给x,将-x在赋给y,坐标变化,完成旋转。
4.2.4消除计分(满行消除、计分)
满行消除
流程图:
程序文字简述:
利用上述语句,从上到下,对每一行的每一格进行检测,是否有方块,当每一个都有方块时记录行标。
检测完毕后消除记录的行,利用后面的函数,用上一行代替要消除的那一行,依次代替。
计分:
下落一个为7分,消除一行得十分,空格加速下降有额外分数增加,分数位25的倍数时升级。
5、运行结果
如图方块正在下落,在next里面产生下一个方块
如图已经消除了7行,得分610,等级为2级。
6、课程设计总结
这次的课程设计是通过QT设计俄罗斯方块。
对于一个初学者来说,QT是陌生的,c++语言也是很陌生的。
但是经过一步一步的琢磨,查找资料,明白了QT环境的配置,下载GCC,G++编译器,通过这些编译器和一些指令qmakemake生成可执行文件等等都是新知识。
可以说这次的课程设计学会运用了一个新的软件,学会了QT很多的知识,这对自己来说是一笔很大的收获。
与此同时,对于c++语言有了更深的了解,明白了算法,修改,函数的调用,槽函数等等。
对于编程有了很大的提高。
这次的课程设计是一个很浩大的工程,所有的东西都是未知的,需要你自己去发现。
在其中困难重重,从图形的设计,道程序的理解,都是难上加难。
但是问题的解决也反映在这次的报告中,代表了我的进步,以后会更努力的学习这方面的知识。
实验过程中,qt中自带
的Designer对界面的处理带来了很大的方便。
同时通过编译窗口来编译生成可执行文件也是很简单,同时复习了嵌入式操作的一些相关的知识。
在Examples中的一些例子的源程序自己理解设计俄罗斯方块提供的很大的帮助。
附录
程序代码
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 Qt 俄罗斯方块 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)