基于QT的俄罗斯方块游戏的设计与实现(论文修改版).doc
_2008840205本 科 毕 业 论 文(设 计)QT俄罗斯方块游戏的设计与实现作者指导教师所学专业计算机科学与技术班级 08计2所属院系 信息学院学习年限2008年9月至2012年7月二一二年七月23 / 31目 录容提要I1引言11.1游戏的历史11.2 游戏的组成要素21.2.1 行为模式21.2.2 条件规则21.2.3 娱乐身心21.2.4 输赢31.2.5 小结32. 可行性研究32.1 设计目的32.2 可行性研究前提32.2.1 基本需求32.2.2 主要开发目标32.2.3 条件假定和限制32.2.4 方法与步骤42.3 可行性分析42.3.1 管理可行性42.3.2 经济可行性42.3.3 技术可行性42.3.4 社会可行性42.4 结论43需求分析53.1 引言53.2 游戏需求53.3 游戏设计的必要性54. 游戏的基本功能54.1 方块类定义函数64.2 程序核心函数75程序主要功能设计与按键事件的控制75.1 建立工程75.2 添加定时器和开始按钮75.3 添加暂停和重新开始按钮,完成基本的控制功能95.4 改变颜色和给方块添加图片95.5是否显示背景网格和下一个要出现的方块105.6添加向下按钮步数设置115.7添加方块115.8设置旋转游戏区115.9程序设计思想流程图126关键技术和难题解决126.1游戏实现的核心方法126.2游戏是实现显示现在和已有的图形的方法126.3游戏是判断方块已经重合的方法136.4游戏消行的方法136.5 对于改变图形后越界或和别的图形重合的处理方法146.6 按键事件147游戏测试157.1游戏测试157.2 游戏性能分析15结语17致谢18参考文献19ABSTRACT20QT俄罗斯方块游戏的设计与实现学生:樊超指导 永奎 朱君亮 忠宝容提要 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作,(用信号和槽函数的关联来实现对按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。Qt是诺基亚开发的一个跨平台的C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。本设计基于用QT这种流行的软件制作大众喜爱的俄罗斯方块游戏,以QT+Creator为开发语言,使用C+和QT库来进行游戏的设计与实现。采用信号和槽函数的关联来实现对按键事件的控制,实现键盘的控制。需要解决的难题是方块的移动和消行的方法,解决的方法是用判断是否重合的方法来决定方块的移动,用让已满的行和它上面的所有的行均等于其上面的一行来实现消行。最终实现了游戏功能和主要的控制功能,具有一定的实用和推广价值。关键词:QT 定时器 信号 槽函数 随机函数 1引言在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人Alex Pajitnov制作的,它看似简单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。究其历史,俄罗斯方块最早还是出现在PC机上,而我国的用户都是通过红白机了解、喜欢上它的。现在 等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单,容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推出新演变出各种类似游戏, 深受广大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可与。而一般游戏软件也确实具有很高的技术难度, 随着开发工具与软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。俄罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,用QT来实现这款游戏的制作, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。1.1游戏的历史游戏开发至今已经有30多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷,经典游戏比比皆是。真正的电子游戏机产生于20世纪70年代。1971年,麻省理工学院的学生Nolan Bushnell设计了世界上的第一个业务用游戏机(俗名街机),叫做电脑空间。这台游戏机用一台黑白电视机作为显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的发展上取得了非凡的成就。上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到1972年,一个叫Crowther的工程师用当时最流行的主机DEC公司的PDP10编写一段简单的FORTRAN程序。在这个程序里,Crowther设计了一地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被公认为是最早的电脑游戏程序。1989年,BroderBund公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在Apple平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表了当时电脑技术的最高水平。1986年,任天堂公司发售了一款真正的游戏巨作超级马里奥。20世纪80年代IBM PC兼容机的出现打破了Apple公司的垄断地位。到了20世纪90年代,游戏业才真正成熟起来,成为了一种产业。由于PC机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游戏产业也逐渐发展成熟。1.2 游戏的组成要素“游戏”,最简单的定义,就是一种供人们娱乐休闲的快乐元素。从更专业的角度形容, “游戏”是具有特定行为模式、规则条件、身心娱乐与输赢的一种行为表现。这种行为表现具备以下4个要素。1.2.1 行为模式行为模式: “游戏”最简单的要素就是游戏有特定的流程模式,这种流程模式贯穿于整个游戏的行为,用户必须依照它的模式流程来执行。倘若一种游戏没有了特定的行为模式,那么就没有执行的行为;在没有执行的行为之后,这个游戏也玩不下去了。举个例子来说,如果猜拳游戏没有了剪刀、石头、布等行为模式,那么这还能叫做“猜拳游戏” 吗?所以不管游戏的流程有多么复杂还是多么简单,一定要有特定的行为模式。1.2.2 条件规则条件规则:当游戏有了一定的行为模式后,接着就必须制定出一系列的条件规则。简单来说,这些游戏的条件规则就是大家必须去遵守的游戏行为守则,只要是大家一致以为的游戏行为,在游戏中,玩家就必须遵守它,如果不遵守这种游戏行为,那么就失去了公平性。如同一种简单的球赛,打球的英文解释可以用PLAY GAME来加以说明,按照英文字面上的解释,它就是执行游戏的行为,而球赛必须有一定的条件规则,并且参与者都要必须去遵守它,不能遵守它就会“犯规”。所以不管是什么游戏,它都会具备一组规则条件,在游戏进行的时候才会有足够的公平性。1.2.3 娱乐身心娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得玩家们想要去玩它。1.2.4 输赢输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。1.2.5 小结一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏;而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述4项组成要素,都可以将它称为“游戏”。虽然这个游戏已有,我做它的主要原因就是这个游戏风靡全球,老少皆知,我从小也玩这个游戏,一直好奇究竟是通过怎样的一个程序实现的,所以我选择以此游戏作为我的毕业设计很有意义。2. 可行性研究2.1 设计目的综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程,培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。2.2 可行性研究前提2.2.1 基本需求基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、与时性。开发过程遵循软件工程规,可采用结构化或面向对象分析设计方法。主要实现对游戏程序的开发和UI界面的实现,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行操作。2.2.2 主要开发目标主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、与时性的游戏,主要实现对游戏程序的开发和UI界面的实现,并通过此次软件开发过程全面提高自身的综合素质。2.2.3 条件假定和限制条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本,本软件需要根据游戏者的要求进行进一步的修改。2.2.4方法与步骤可行性研究所采用的方法和步骤:通过研究分析俄罗斯方块所具备的能力与实现的方法、确定主体结构。利用现阶段我所能达到的能力,以最简洁、最容易的办法,边开发边测试边修改,实现一个初级游戏软件。评价尺度:由于本软件是一个初级产品,对其要求不是太苛刻,所以能够达到俄罗斯游戏的一般功能即可。2.3 可行性分析2.3.1 管理可行性该游戏软件为首次开发,目的只为提高工作自身素质和检查自学QT和C语言的效果,所有功能均根据基本需求所做。便于管理,所以在这方面是可以实现的。2.3.2 经济可行性由于本游戏的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行的电脑便可,所以不用考虑到经济问题。2.3.3 技术可行性可用与本游戏的编程语言有C语言,C+,Java,Delphi等,考虑到用于编写程序的困难度,和对语言的了解程度,选择C语言和QT库作为编程语言。需要对变量定义、变量初始化、界面初始化、游戏初始化、然后进入游戏、处理游戏过程中的各种操作。2.3.4 社会可行性本游戏的开发作为毕业课程设计以巩固先前所学的知识,以个人为单位,仅供个人平常娱乐所用,无须考虑有可能造成的社会影响,不用考虑到法律、等的社会因素,所以在这方面是完全可行的。2.4 结论综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编写。3需求分析3.1 引言对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规的过程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求相关。3.2 游戏需求游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置,我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸引力。游戏“俄罗斯方块”,俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之排列成完整的一行或多行并且消除得分,如果未被消除的方块堆放的高度超过场地所规定的最大高度,则游戏结束。规则简单容易上手。游戏速度节奏快,画面清晰可爱。总是排在受玩家最欢迎游戏排名前5位的连连看,休闲、趣味,且不分男女老少、工薪白领,在娱乐的同时还可以训练眼明手快与增强逻辑判断能力。是一款适合大众的经典小游戏。小游戏制作的目的是满足了人们休闲的需要,在紧工作之余休闲类的小游戏能够给人带来最大程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友。3.3 游戏设计的必要性大多数的此类游戏都是用JAVA或其他方法来设计的,本设计采用QT+Creator来实现,与之前的设计相比,界面更加的美观,设计思想更加简单,代码更加简洁高效。4. 游戏的基本功能参考QT库中基本的Tetrix实例,设计自己的方块类程序。在QT中新建一个工程,向工程中添加新的普通文本文件。将设计好的4个文件添加复制到工程文件夹下并加入到工程中。在主函数中新建一个类的对象,用参数设置好方块的下移速度,就可以成功运行出一个基本的游戏程序。4.1 方块类定义函数方块和地图数据信息是游戏中最基本的功能模块。这个类提供方块图形 ,图形在4*4区域的位置信息 ,对图形进行旋转变化功能。Myitem.h Myitem.cpp这两个文件是方块类的定义文件,用来提供随机产生的方块。定义7个四维数组unsigned char item4*4,数组的第一维表示七种不同形态的方块,第二维代表方块的四种不同翻转状态。数组的第三维和第四维代表某一种形态的方块的某一状态。然后用代码实现下列功能:(1)每次执行首先为随机数产生不同的初值。(2)随机选取一个图形随机产生一个数随机数一字形Z字形反Z形7字形反7形倒T形田字型 图4.1 随机产生方块图(3)当前图形在其4*4网格中的位置信息(4)改变图形形状定义一个4x4方阵,共16个小格。用“0”和“1”来表示每个方格是绘制还是空白,由此可以组合出多种图形,如图所示: 图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 四个文件复制到工程文件夹下并添加到工程中。(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)在widget.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)然后在下面定义两个函数。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->gameArea->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(int 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->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("取消暂停");elsethis->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 <QTextCodec>的头文件包含。在main()函数里添加QTextCodec:setCodecForTr(QTextCodec:codecForLocale();语句。5.4 改变颜色和给方块添加图片(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->gameArea->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)运行效果如下。点击“改变背景”按钮后,游戏区域背景,方块的填充颜色和边框颜色都改变了。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_pushButton_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_9_clicked() /是否坠落if(this->ui->pushButton_9->isChecked()this->gameArea->setKey_Down_Move_oneStep(true);/按一下向下方向键,下移一步elsethis->gameArea->setKey_Down_Move_oneStep(false);/按一下向下方向键,移动到底this->gameArea->setFocus();5.7 添加方块(1)添加“添加方块”按钮。(2)修改其单击事件槽函数。void Widget:on_pushButton_10_clicked() /添加方块this->gameArea->init_Game();/清空游戏区域this->gameArea->setbox(10,4);this->gameArea->setbox(10,5);this->gameArea->setbox(10,6);/在第10 行第4,5,6 列添加三个方块this->gameArea->gameStart();/重新开始游戏this->gameArea->draw_gameArea();this->gameArea->setFocus();5.8 设置旋转游戏区(1)添加“旋转游戏”按钮。(2)修改其单击事件槽函数。void Widget:on_pushButton_11_clicked() /旋转游戏this->gameArea->setRotate(true);/开启旋转this->gameArea->setGameAreaPixOrigin(100,200);/设置游戏区域新的坐标原点this->gameArea->setGameAreaPix(-100,-200);/设置游戏区域的位置this->gameArea->setRotateAngle(qrand()%360);/旋转度数this->gameArea->draw_gameArea();this->gameArea->setFocus();5.9程序设计思想流程图 开始游戏 定时器溢出或有键盘事件 如果可以移动 先尝试移动一步,此时并不是真正的移动 移动一步越界或图形重合 是 是否已经结束游戏否保存现在的游戏界面,并清除满行显示下一个方块结束游戏 图5.9 设计实现流程6关键技术和难题解决6.1 游戏实现的核心方法利用了数组对整个游戏区域进行存储。6.2 游戏是实现显示现在和已有的图形的方法利用了两个数组,方块每移动一步,都对整个数组进行一次备份。6.3 游戏是判断方块已经重合的方法先尝试让方块移动一步,判断其是否与其他图形重合,如果不重合就移动。如果重合了,则执行其他操作。代码如下:for(int i=item_endRow;i>=0;i-) /是否跟已有的图形重合 for(int j=3;j>=0;j-) if(*(copyMap+(itemRow+i)*map_col+itemCol+j) && *(currentItem+i*4+j)=1) if(startX=init_startX&&startY<=20) isGameOver = true; /如果图形一出来就和别的图形重合了,那么游戏结束 return true; 6.4 游戏消行的方法让已满的行和它上面的所有的行均等于其上面的一行。代码如下:void GameArea:clearRow() /清除已满的行 int temp1 = 1; for(int i=map_row-1;i>0;i-) /从下向上扫描整网格 for(int j=0;j<map_col;j+) temp1 = *(copyMap+i*map_col+j) && temp1; if(temp1) /如果这一行全为1,说明已满,则清除 fullRowNum+; for(int row = i;row>0;row-) /让已满的行与其上面的各行均等于其上一行 for(int col = 0;col<map_col;col+) *(copyMap+row*map_col+col)=*(copyMap+(row-1)*map_col+col); i=i+1; /重新开始扫描整图 temp1 =1; 6.5 对于改变图形后越界或和别的图形重合的处理方法 先保存现在的图形,进行图形变化,左越界,则让其靠左:右越界,则让其右边靠右。如果和别的图形重合了,则不让其改变。代码如下:void GameArea:do_itemChange()/对改变图形后超出窗口或和别的图形重合进行处理 unsigned char *tempItem; tempItem = currentItem; /先保存现在的图形 currentItem = myItem->itemChange(currentItem); /进行图形变化 if(startX<0) startX = 0; /左超界,则让其靠左 if(startX + 4*step)> gameArea_width) startX = gameArea_width - 4*step; /右超界,则让其右边靠右 if(isMoveEnd() /如果和别的图形重合,则不让其改变 currentItem = tempItem; 6.6 按键事件 设置判断按键,判断可否变形,图形变化调用;判断可否移动,可以移动则动,进行下一步。判断按键判断可否变形,图形变化调用函数判断可否移动。可以则移动判断可否移动。可以则移动判断可否移动。可以则默认下移一步,否则下到底如不是这4个按键,则接收其他按键。图6.6 键盘事件功能图7游戏测试7.1游戏测试运行环境:l VMware workstation7.1虚拟机平台l ubuntu linux操作系统l 基于QT 4.6的QT Creator 1.3.0 Linux版本l Tetrix.pro测试方法:l 用虚拟机运行ubuntu linux操作系统。l 运行QT,打开Tetrix.pro,加载工程,编译程序,运行。测试结果:l 实现了界面优化,实现了游戏网格、方块添加、旋转游戏、背景变换等功能;l 实现了游戏的基本功能。7.2 游戏性能分析本系统在测试和运行过程中。有以下几方面优点:l 界面简洁,操作方便系统界面简单,功能较完善,易上手,可以激发玩家的乐趣。 l 通用性好,扩展性强本系统采用QT,可跨平台运行。l 其他功能需完善由于时间和技术因素,本系统没有实现方块颜色等功能,有待于进一步的解决。结语QT据有优良的跨平台特性、面向对象、丰富的API、大量的开发文档等优点,已经成为全世界围数千种成功的应用程序的基础和流行的Linux桌面环境KDE的基础。本次设计采用QT+Creator做为开发环境,使用QT Designer设计器实现UI界面,用画图类实现动态界面,使用信号与槽机制实现对按键事件的控制,并且实现多种游戏功能,最终完成本次设计。通过本次毕业设计,让我掌握了QT程序与众不同的设计与实现方法,丰富了我的专业知识和设计理念,为我以后的工作积累了宝贵的经验,让我在成功的路上迈出了坚实的一步。但由于时间和个人精力有限,设计还有很多功能没有完善,一些功能还没有实现,如让不同的方块显示不用的颜色,我将在以后的工作和学习中不断充实自己,不断修改和完善程序,做出更实用界面更加美观的程序。致谢四年的大学生活就快走入尾声,我的校园生活就要划上句号,心中是无尽的难舍与眷恋,从这里走出,将踏上一个新的征程,大学生活赋予我的财富将一直陪伴我,让我一生受用。经过几个月的学习和工作,在老师的悉心指导和严格要求下,我完成了本次的毕业设计。从课题选择、方案论证、具体设计的实现和调试到最后论文的定稿,无不凝聚着指导老师的心血和汗水。你们的指导与关怀使我受益匪浅,让我能够很好的掌握和运用专业知识,并在设计中得以体现,我对老师们表示由衷的敬意,感谢你们的悉心栽培。大学毕业设计是我大学生涯中的最后一份答卷,我想要藉此机会感谢四年以来给我帮助的所有老师、同学。各位老师严谨细致、一丝不苟的作风一直是我学习和工作中的榜样;你们的谆谆教导和不拘一格的思路给与我无尽的启迪。同学彼此之间真挚的情谊,无私的援助深深的打动着我。有了你们的帮助和支持才能使我的毕业设计顺利完成。在完成本次的毕业设计的过程中,我收获了很多,自己用心去做一件事,在其中锻炼自己的学习和研究的能力,这次经历将激励我在以后的学习和工作中不断进步。感谢百忙之中审阅我论文的各位指导老师。在我即将迈上人生的另一个起点之际,我向我的母校,全体老