ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:97.95KB ,
资源ID:28079902      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/28079902.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(QT俄罗斯方块游戏的设计与实现毕业论文.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

QT俄罗斯方块游戏的设计与实现毕业论文.docx

1、QT俄罗斯方块游戏的设计与实现毕业论文学号:本 科 毕 业 论 文(设 计) QT俄罗斯方块游戏的设计与实现 作者姓名 指导教师 所学专业班级 所属院系 学习年限年月至年月二年月QT俄罗斯方块游戏的设计与实现 内容提要 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(用信号和槽函数的关联来实现对按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架

2、。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。此次设计在Linux系统下,以QT+Creator为开发语言,使用C+和QT库来进行游戏的设计与实现。 关键词 数组 定时器 信号 槽函数 QT引言在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游

3、戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在QQ等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有

4、的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确实具有很高的技术难度, 随着开发工具及软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。俄罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,提出一种用C语言和C+来实现的方法, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。 1. 绪论游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高

5、,游戏开发新技术层出不穷,经典游戏比比皆是。 从头谈起真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一张地图,地图上不规则的分布着陷阱,

6、游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在Apple平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。 图形硬件的革命图形硬件的飞速发

7、展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。在所谓的GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如SGI和E&S系统里面,这些硬件价格太昂贵,不过这些公司提供了第一代基于硬件的顶点变换和纹理映射的解决方案。游戏这个名称一直就存在于每个人的日常生活中,如猜拳游戏、猜谜游戏、大地游戏、球类游戏等,林林总总,不胜枚举,甚至

8、于有些流行歌曲把人生也比喻为游戏,好比“一场游戏一场梦” 。因此,游戏对于现代人的成长历程,绝对是一个不可或缺的重要角色。 游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐及输赢的一种行为表现。这种行为表现具备以下4个要素。行为模式: “游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那

9、么这还能叫做“猜拳游戏” 吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就叫作“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的

10、公平性。娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。2. 可行性研究2.1

11、设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。2.2 可行性研究前提基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性。开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现windows的GUI程序开发,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,实现windows的GUI程序开发,并通过此次软件开发过程全面提高自身的综合

12、素质。条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本,本软件需要根据游戏者的要求进行进一步的修改。可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力及实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。2.3 可行性分析管理可行性: 该游戏软件为首次开发,目的只为提高工作自身素质和检查自学Java的效果,用 Java3.0软件编写后在Applet管理器中运行简单明了,所有功能均根据基

13、本需求所做。便于管理,所以在这方面是可以实现的。经济可行性:由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行JAVA3.0软件的电脑便可,所以不用考虑到经济问题。技术可行性:可用与本游戏的编程语言有VB,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择JAVA作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。社会可行性:本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有

14、可能造成的社会影响,不用考虑到法律、版权等的社会因素,所以在这方面是完全可行的。2.4 结论意见综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。3. 需求分析3.1 引言对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 游戏需求随机给出不同的形状(

15、长条形、Z字形、反Z形、田字形、7字形、反7形、T字型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,设置三关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下:游戏界面需求:良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。游戏形状(方块)需求:良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆时针变形,一般为逆时针

16、。键盘处理事件:方块下落时,可通过键盘方向键(上、下、左、右键)对该方块进行向上(变形),向下(加速)、向左、向右移动。显示需求:当不同的方块填满一行时可以消行,剩余方块向下移动并统计分数。当达到一定的分数时过关。设置三关,每关方块下落的速度不同。4. 设计基本的游戏功能参考QT库中基本的Tetrix实例,设计自己的方块类程序。在QT中新建一个工程,向工程中添加新的普通文本文件。将设计好的4个文件添加复制到工程文件夹下并加入到工程中。在主函数中新建一个类的对象,用参数设置好方块的下移速度,就可以成功运行出一个基本的游戏程序。4.1 方块类定义函数方块和地图数据信息是游戏中最基本的功能模块。这个

17、类提供方块图形 ,图形在4*4区域的位置信息 ,对图形进行旋转变化功能Myitem.h Myitem.cpp这两个文件是方块类的定义文件,用来提供随机产生的方块。定义7个四维数组unsigned char item4*4,数组的第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和第四维代表某一种形态的方块的某一状态。然后用代码实现下列功能:(1)每次执行首先为随机数产生不同的初值。(2)随机选取一个图形 图4.1 随机产生方块图(3)当前图形在其4*4网格中的位置信息(4)改变图形形状定义一个4x4方阵,共16个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此

18、可以组合出多种图形,如图所示: 图4.2 方块图4.2 程序核心函数Gamearea.h Gamearea.cpp是游戏区域类的定义文件,实现了游戏的所有功能。其中包括了核心功能控制函数,设置颜色参数,设置声音参数,设置游戏区域旋转函数和其他功能函数等。 具体功能的实现在下一章节中阐述。5. 程序主要功能设计及按键事件的控制5.1 建立工程1首先建立工程Qt4 Gui Application,这里命名为Tetris,选用QWidget 作为Base class 。2然后将myitem.cpp, myitem.h ,gamearea.cpp, gamearea.h 四个文件复制到工程文件夹下并添

19、加到工程中。3在widget.h 中添加#include gamearea.h的头文件包含。并在下面的private 中声明一个游戏类对象GameArea *gameArea;4在widget.cpp 的构造函数里添加语句。Widget:Widget(QWidget *parent) :QWidget(parent),ui(new Ui:Widget)ui-setupUi(this);this-resize(800,500);this-gameArea = new GameArea(this);这里重新设定了主窗口大小,并在主窗口上新建了一个游戏区域对象。5.2 添加定时器和开始按钮1在wid

20、get.h 里的private 中添加定时器对象和分数变量的声明。QTimer *timer;int score;在public 中添加显示分数函数的声明。void doScore(int);添加槽函数的声明。private slots:void timer_upDate();2在widget.cpp 文件中的构造函数里添加下面的语句:this-timer = new QTimer(this);connect(this-timer,SIGNAL(timeout(),this,SLOT(timer_upDate();score =0;定义了定时器并进行了信号和槽函数的关联,初始化分数为0;3然后

21、在下面定义两个函数。void Widget:timer_upDate() /定时器溢出处理this-gameArea-moveOneStep(); /先移动一步,这时并没有显示出来if(this-gameArea-isMoveEnd() /如果无法移动,到底了或结束了if(this-gameArea-isGame_Over() /如果是结束了this-timer-stop(); /停止计时QMessageBox:warning(this,tr(warning),tr(GameOver!),QMessageBox:Yes);/弹出对话框this-score =0; /清空分数this-gameA

22、rea-init_Game(); /重新开始游戏this-gameArea-gameStart();this-timer-start(500);else /如果是移动到底了this-gameArea-nextItem(); /出现下一个图形int num = this-gameArea-getFullRowNum(); /获得已满的行数this-doScore(num); /显示分数this-gameArea-gameStart(); /继续游戏else /如果没有到底this-gameArea-do_MoveNext(); /显示方块下移一步后的界面void Widget:doScore(i

23、nt num) /显示分数score += num*100;this-ui-label_2-setText(tr(%1).arg(score);4在设计器中向主窗口上添加两个标签label 和label_2,其中label 写上“你的分数是:”,label_2 写上“0”;然后再添加一个开始按钮。5然后右击“开始游戏”按钮,选择其单击事件的槽函数。更改如下。void Widget:on_pushButton_clicked() /开始按钮this-gameArea-init_Game(); /第一次进入游戏时进行的初始化this-gameArea-gameStart(); /开始游戏this-

24、timer-start(500); /开启定时器this-gameArea-setFocus(); /让游戏区域获得焦点,这样才能响应键盘5.3 添加暂停和重新开始按钮,完成基本的控制功能1在主窗口上添加“暂停游戏”和“重新开始”两个按钮。在“暂停游戏”按钮的属中将checkable 选中。2分别进入两个按钮的单击事件槽函数。void Widget:on_pushButton_2_clicked() /暂停按钮if(this-ui-pushButton_2-isChecked()this-timer-stop();this-ui-pushButton_2-setText(tr(取消暂停);el

25、sethis-timer-start(500);this-ui-pushButton_2-setText(tr(暂停游戏);this-gameArea-setFocus();void Widget:on_pushButton_3_clicked() /重新开始this-timer-stop();this-on_pushButton_clicked();3在main.cpp 中添加语句,让程序中可以使用中文。添加#include 的头文件包含。在main()函数里添加QTextCodec:setCodecForTr(QTextCodec:codecForLocale();语句。5.4 改变颜色和

26、给方块添加图片1添加“更改颜色”按钮和“方块贴图”按钮。2更改其单击事件槽函数。如下。void Widget:on_pushButton_4_clicked() /改变颜色this-gameArea-setGameAreaColor(QColor(255,255,0,qrand()%255);/更改游戏区域背景颜色this-gameArea-setBoxBrushColor(QColor(0,255,0,qrand()%255);/更改小方块背景颜色this-gameArea-setBoxPenColor(QColor(0,0,0,qrand()%255);/更改小方块边框颜色this-gam

27、eArea-draw_gameArea();/更新游戏区域this-gameArea-setFocus();void Widget:on_pushButton_5_clicked() /方块贴图this-gameArea-set_draw_box_picture(true);/确认使用方块背景图片this-gameArea-setBoxPicture(box.gif);/添加方块背景图片this-gameArea-draw_gameArea();/更新显示区域this-gameArea-setFocus();3运行效果如下。点击“改变背景”按钮后,游戏区域背景,方块的填充颜色和边框颜色都改变了

28、。5.5 是否显示背景网格和下一个要出现的方块1添加“网格显示”按钮和“方块提示”按钮。并将它们属性中的checkable 选中2修改它们的单击事件槽函数。void Widget:on_pushButton_6_clicked() /网格显示if(this-ui-pushButton_6-isChecked()this-gameArea-setDrawGrid(false);elsethis-gameArea-setDrawGrid(true);this-gameArea-draw_gameArea();this-gameArea-setFocus();void Widget:on_pushB

29、utton_7_clicked() /方块提示if(this-ui-pushButton_7-isChecked()this-gameArea-setDrawNextItem(false);elsethis-gameArea-setDrawNextItem(true);this-gameArea-draw_gameArea();this-gameArea-setFocus();5.6 添加方块移动的声音1添加“打开声音”按钮,并将其属性中的checkable 选中。2修改其单击事件槽函数。void Widget:on_pushButton_8_clicked() /声音开关if(this-ui

30、-pushButton_8-isChecked()this-gameArea-setPlaySound_itemChange(changeItem.wav,true);this-gameArea-setPlaySound_moveDown(moveDown.wav,true);this-gameArea-setPlaySound_moveLeft(moveLeft.wav,true);this-gameArea-setPlaySound_moveRight(moveLeft.wav,true);this-ui-pushButton_8-setText(tr(关闭声音);elsethis-gameArea-setPlaySound(false); /关闭音乐this-ui-pushButton_8-setText(tr

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1