基于qt的俄罗斯方块游戏的设计与实现(论文修改版)_第1页
基于qt的俄罗斯方块游戏的设计与实现(论文修改版)_第2页
基于qt的俄罗斯方块游戏的设计与实现(论文修改版)_第3页
基于qt的俄罗斯方块游戏的设计与实现(论文修改版)_第4页
基于qt的俄罗斯方块游戏的设计与实现(论文修改版)_第5页
已阅读5页,还剩60页未读 继续免费阅读

下载本文档

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

文档简介

QT 俄罗斯方块游戏的设计与实现 作者姓名作者姓名 指指导导教教师师 所学所学专业专业计算机科学与技术班班级级 08 计 2 所属院系所属院系 信息学院 学学习习年限年限 2008 年 年 9月至月至 2012 年 年 7 月月 二 一二 年七 月 学号:学号: 20088402052008840205 本 科 毕 业 论 文(设 计) 目目 录录 内容提要 I 1引言 .1 1.1 游戏的历史 .1 1.2 游戏的组成要素 .2 1.2.1 行为模式 .2 1.2.2 条件规则 .2 1.2.3 娱乐身心 .2 1.2.4 输赢 .3 1.2.5 小结 .3 2. 可行性研究 .3 2.1 设计目的 .3 2.2 可行性研究前提 .3 2.2.1 基本需求 .3 2.2.2 主要开发目标 .3 2.2.3 条件假定和限制 .3 2.2.4 方法及步骤 .4 2.3 可行性分析 .4 2.3.1 管理可行性 .4 2.3.2 经济可行性 .4 2.3.3 技术可行性 .4 2.3.4 社会可行性 .4 2.4 结论 .4 3需求分析 .5 3.1 引言 .5 3.2 游戏需求 .5 3.3 游戏设计的必要性 .5 4. 游戏的基本功能 .5 4.1 方块类定义函数 .6 4.2 程序核心函数 .7 5程序主要功能设计及按键事件的控制 .7 5.1 建立工程 .7 5.2 添加定时器和开始按钮 .7 5.3 添加暂停和重新开始按钮,完成基本的控制功能 .9 5.4 改变颜色和给方块添加图片 .9 5.5 是否显示背景网格和下一个要出现的方块 10 5.6 添加向下按钮步数设置 11 5.7 添加方块 11 5.8 设置旋转游戏区 11 5.9 程序设计思想流程图12 6关键技术和难题解决 12 6.1 游戏实现的核心方法 12 6.2 游戏是实现显示现在和已有的图形的方法 12 6.3 游戏是判断方块已经重合的方法 13 6.4 游戏消行的方法 13 6.5 对于改变图形后越界或和别的图形重合的处理方法 14 6.6 按键事件 .14 7游戏测试 15 7.1 游戏测试 15 7.2 游戏性能分析 15 结语 .17 致谢 .18 参考文献 .19 ABSTRACT .20 I QT 俄罗斯方块游戏的设计与实现 学生姓名:樊超 指导教师:张永奎 朱君亮 刘忠宝 内容提要 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个数 组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不停的 产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作, (用信号和槽函数的关联来实现对 按键事件的控制)。然后程序根据这七种方块堆叠成各种不同的模型。Qt 是诺基亚开发的一个跨平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需的所用功能。 论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识,从软件问题定义 开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软件工程的知识体系。 本设计基于用 QT 这种流行的软件制作大众喜爱的俄罗斯方块游戏,以 QT+Creator 为开发语言, 使用 C+和 QT 库来进行游戏的设计与实现。采用信号和槽函数的关联来实现对按键事件的控制,实现 键盘的控制。需要解决的难题是方块的移动和消行的方法,解决的方法是用判断是否重合的方法来决定 方块的移动,用让已满的行和它上面的所有的行均等于其上面的一行来实现消行。最终实现了游戏功能 和主要的控制功能,具有一定的实用和推广价值。 关键词: QT 定时器 信号 槽函数 随机函数 山西大学商务学院本科毕业论文(设计) 1 1引言引言 在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可 以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简单 但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时代。 究其历史,俄罗斯方块最早还是出现在 PC 机上,而我国的用户都是通过红白机了解、喜欢上它的。 现在 QQ 等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单, 容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户 既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广 大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来训 练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确实具 有很高的技术难度, 随着开发工具及软件开发方法学的不断发展, 动手开发游戏也不是十分困难的。俄 罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂算法和设 计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,用 QT 来实现这款游戏的制 作, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。 1.1 游戏的历史 游戏开发至今已经有 30 多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不穷, 经典游戏比比皆是。 真正的电子游戏机产生于 20 世纪 70 年代。1971 年,麻省理工学院的学生 Nolan Bushnell 设计了 世界上的第一个业务用游戏机(俗名街机) ,叫做电脑空间 。这台游戏机用一台黑白电视机作为显 示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏的 发展上取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到 1972 年,一个叫 Crowther 的工 程师用当时最流行的主机DEC 公司的 PDP10 编写一段简单的 FORTRAN 程序。在这个程序里, Crowther 设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被 公认为是最早的电脑游戏程序。 QT 俄罗斯方块游戏的设计与实现 2 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 娱乐身心 娱乐身心:一种游戏所带来的娱乐性,关键就在于为玩家所带来的刺激感,这也是游戏的精华所在。 简单来说,不管是很多人玩的游戏,还是一个人玩的单机游戏,游戏本身就会存在它的娱乐和刺激性,使得 山西大学商务学院本科毕业论文(设计) 3 玩家们想要去玩它。 1.2.4 输赢 输赢:其实针对游戏而言,输赢是所有游戏的最终目的。一个没有输赢的游戏,也就没有了它存在的 意义,如同我们常常接触到的猜拳游戏,说穿了最终目的就是为了分出胜负而己。 1.2.5 小结 一般而言,游戏又可以分为动态和静态两种形态。动态的游戏必须配合肢体动作,如猜拳游戏; 而静态游戏则是较偏向思考的行为,如同纸上游戏。然而不管是动态或是静态游戏,只要具备上述 4 项组成要素,都可以将它称为“游戏”。虽然这个游戏已有,我做它的主要原因就是这个游戏风靡全球, 老少皆知,我从小也玩这个游戏,一直好奇究竟是通过怎样的一个程序实现的,所以我选择以此游戏 作为我的毕业设计很有意义。 2. 可行性研究 2.1 设计目的 综合运用在校期间所学理论知识和技能,设计开发俄罗斯方块,使自己熟悉应用系统的开发过程, 培养独立思考能力,检验学习效果和动手能力,提高工程实践能力,为将来实际工作打下坚实的基础。 2.2 可行性研究前提 2.2.1 基本需求 基本需求:系统开发的总体任务是实现游戏的可操作性、美观性、及时性。 开发过程遵循软件工程规范,可采用结构化或面向对象分析设计方法。主要实现对游戏程序的开 发和 UI 界面的实现,对游戏中的图形图像进行键盘控制。游戏者可以通过上下左右键来对游戏进行 操作。 2.2.2 主要开发目标 主要开发目标:采用结构化设计方法,开发出一个可操作性、美观性、及时性的游戏,主要实现对 游戏程序的开发和 UI 界面的实现,并通过此次软件开发过程全面提高自身的综合素质。 2.2.3 条件假定和限制 条件假定和限制:由于本软件目前是我的初次版本,可能还存在一些问题。如果该软件提高版本, QT 俄罗斯方块游戏的设计与实现 4 本软件需要根据游戏者的要求进行进一步的修改。 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 结论 综上所述,本游戏软件的技术成熟、完备。各方面均无重大问题,因此本游戏软件可开始着手编 写。 山西大学商务学院本科毕业论文(设计) 5 3需求分析 3.1 引言 对软件需求完全理解对于软件开发工作的成功是至关重要的,需求说明的任务是发现、规范的过 程,有益于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,便于采用工程方法 开发软件,提高软件的质量,便于开发人员、维护人员、管理人员之间的交流、协作,并作为工作成 果的原始依据,并且在向潜在用户传递软件功能、性能需求,使其能够判断该软件是否与自己的需求 相关。 3.2 游戏需求 游戏产业作为现代电脑电子技术的产物,正在以其独特的魅力在全世界的娱乐领域占据主流位置, 我们在承认广大娱乐网民的选择空间狭小的同时,也必须明确的一点就是游戏本身所具有的强大的吸 引力。 游戏“俄罗斯方块” ,俄罗斯方块的基本规则是移动、旋转和摆放游戏自动输出的各种方块,使之 排列成完整的一行或多行并且消除得分,如果未被消除的方块堆放的高度超过场地所规定的最大高 度,则游戏结束。 规则简单容易上手。游戏速度节奏快,画面清晰可爱。总是排在受玩家最欢迎游戏 排名前 5 位的连连看,休闲、趣味,且不分男女老少、工薪白领,在娱乐的同时还可以训练眼明手快 及增强逻辑判断能力。是一款适合大众的经典小游戏。 小游戏制作的目的是满足了人们休闲的需要,在紧张工作之余休闲类的小游戏能够给人带来最大 程度的放松,也可以增进人们之间的交流,沟通,通过游戏还可以认识更多的朋友。 3.3 游戏设计的必要性 大多数的此类游戏都是用 JAVA 或其他方法来设计的,本设计采用 QT+Creator 来实现,与之前的 设计相比,界面更加的美观,设计思想更加简单,代码更加简洁高效。 4. 游戏的基本功能 参考 QT 库中基本的 Tetrix 实例,设计自己的方块类程序。 在 QT 中新建一个工程,向工程中添加新的普通文本文件。将设计好的 4 个文件添加复制到工程 文件夹下并加入到工程中。在主函数中新建一个类的对象,用参数设置好方块的下移速度,就可以成 QT 俄罗斯方块游戏的设计与实现 6 功运行出一个基本的游戏程序。 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”来表示每个方格是绘制还是空白,由此可以组合出 多种图形,如图所示: 山西大学商务学院本科毕业论文(设计) 7 图 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); 添加槽函数的声明。 QT 俄罗斯方块游戏的设计与实现 8 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(“Game Over!“),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 写上“你的分数是:”, 山西大学商务学院本科毕业论文(设计) 9 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(“取消暂停“); else this-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 改变颜色和给方块添加图片 (1)添加“更改颜色”按钮和“方块贴图”按钮。 (2)更改其单击事件槽函数。如下。 void Widget:on_pushButton_4_clicked() /改变颜色 QT 俄罗斯方块游戏的设计与实现 10 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); else this-gameArea-setDrawGrid(true); this-gameArea-draw_gameArea(); this-gameArea-setFocus(); void Widget:on_pushButton_7_clicked() /方块提示 if(this-ui-pushButton_7-isChecked() 山西大学商务学院本科毕业论文(设计) 11 this-gameArea-setDrawNextItem(false); else this-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); /按一下向下方向键,下移一步 else this-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(); QT 俄罗斯方块游戏的设计与实现 12 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 设计实现流程 山西大学商务学院本科毕业论文(设计) 13 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) i-) /从下向上扫描整张网格 for(int j=0;j0;row-) /让已满的行及其上面的各行均等于其上一行 for(int col = 0;colitemChange(currentItem); /进行图形变化 if(startX gameArea_width) startX = gameArea_width - 4*step; /右超界,则让其右边靠右 if(isMoveEnd() /如果和别的图形重合,则不让其改变 currentItem = tempItem; 山西大学商务学院本科毕业论文(设计) 15 判断按键 判断可否变 形,图形变 化调用函数 判断可否移动。 可以则移动 判断可否移动。 可以则移动 判断可否移动。 可以则默认下 移一步,否则 下到底 如不是这 4 个按 键,则接收其他 按键。 6.6 按键事件 设置判断按键,判断可否变形,图形变化调用;判断可否移动,可以移动则动,进行下一步。 图 6.6 键盘事件功能图 7游戏测试 7.1 游戏测试 运行环境: VMware workstation7.1 虚拟机平台 ubuntu linux 操作系统 基于 QT 4.6 的 QT Creator 1.3.0 Linux 版本 T 测试方法: 用虚拟机运行 ubuntu linux 操作系统。 运行 QT,打开 T,加载工程,编译程序,运行。 测试结果: 实现了界面优化,实现了游戏网格、方块添加、旋转游戏、背景变换等功能; QT 俄罗斯方块游戏的设计与实现 16 实现了游戏的基本功能。 7.2 游戏性能分析 本系统在测试和运行过程中。有以下几方面优点: 界面简洁,操作方便 系统界面简单,功能较完善,易上手,可以激发玩家的乐趣。 通用性好,扩展性强 本系统采用 QT,可跨平台运行。 其他功能需完善 由于时间和技术因素,本系统没有实现方块颜色等功能,有待于进一步的解决。 山西大学商务学院本科毕业论文(设计) 17 结语 QT 据有优良的跨平台特性、面向对象、丰富的 API、大量的开发文档等优点,已经成为全世界范 围内数千种成功的应用程序的基础和流行的 Linux 桌面环境 KDE 的基础。本次设计采用 QT+Creator 做为开发环境,使用 QT Designer 设计器实现 UI 界面,用画图类实现动态界面,使用信号与槽机制实 现对按键事件的控制,并且实现多种游戏功能,最终完成本次设计。 通过本次毕业设计,让我掌握了 QT 程序与众不同的设计与实现方法,丰富了我的专业知识和设 计理念,为我以后的工作积累了宝贵的经验,让我在成功的路上迈出了坚实的一步。但由于时间和个 人精力有限,设计还有很多功能没有完善,一些功能还没有实现,如让不同的方块显示不用的颜色, 我将在以后的工作和学习中不断充实自己,不断修改和完善程序,做出更实用界面更加美观的程序。 山西大学商务学院本科毕业论文(设计) 18 致谢 四年的大学生活就快走入尾声,我的校园生活就要划上句号,心中是无尽的难舍与眷恋,从这里 走出,将踏上一个新的征程,大学生活赋予我的财富将一直陪伴我,让我一生受用。 经过几个月的学习和工作,在老师的悉心指导和严格要求下,我完成了本次的毕业设计。从课题 选择、方案论证、具体设计的实现和调试到最后论文的定稿,无不凝聚着指导老师的心血和汗水。你 们的指导与关怀使我受益匪浅,让我能够很好的掌握和运用专业知识,并在设计中得以体现,我对老 师们表示由衷的敬意,感谢你们的悉心栽培。 大学毕业设计是我大学生涯中的最后一份答卷,我想要藉此机会感谢四年以来给我帮助的所有老 师、同学。各位老师严谨细致、一丝不苟的作风一直是我学习和工作中的榜样;你们的谆谆教导和不 拘一格的思路给与我无尽的启迪。同学彼此之间真挚的情谊,无私的援助深深的打动着我。有了你们 的帮助和支持才能使我的毕业设计顺利完成。 在完成本次的毕业设计的过程中,我收获了很多,自己用心去做一件事,在其中锻炼自己的学习 和研究的能力,这次经历将激励我在以后的学习和工作中不断进步。 感谢百忙之中审阅我论文的各位指导老师。 在我即将迈上人生的另一个起点之际,我向我的母校,全体老师表示由衷的谢意,感谢你们的辛 苦栽培与提携,祝愿我的同学们前途似锦,祝福大家在以后的工作和生活中一帆风顺,身体健康。 山西大学商务学院本科毕业论文(设计) 19 参考文献 1 谭浩强,张基温C 语言程序设计教程M (第 3 版) 北京:高等教育出版社,1991 2 陈超C 语言常用函数速查手册M 北京:化学工业出版社,2010-06 3 韦东山嵌入式应用开发完全手册M 北京:人民邮电出版社,2000-01 4 黄丽琴,丁林松Qt4 图形设计与嵌入式开发M 北京:人民邮电出版社,2009-04- 5 成洁,卢紫毅Linux 窗口设计 Qt4 精彩实例设计分析M 北京:清华大学出版社,2008- 11 6(加)布兰切特(Blanchette,J) , (英)萨默菲尔德(Summerfield,M)著,闫锋欣 译C+GUI Qt4 编程(第二版)M New York: Spring-Verlag,2008 年 08 月 7 蔡志明精通 Qt4 编程(第 2 版)M 北京:电子工业出版社,2011-2 8 (美)伊斯特(EEzust,A.) , (美)伊斯特(Ezust,P.)著,李仁见,战晓明 译C+设计 模式 Qt4 开源跨平台开发框架M 北京:清华大学,2007-8 9 肖林甫,肖季东,任桥伟Linux 那些事儿之我是 USBM 北京:电子工业出版社,2010- 07 10 郑莉董江周.C+语言程序设计(第 4 版)M 北京:清华大学出版社,2010-07 山西大学商务学院本科毕业论文(设计) 19 QT Tetris Game Design and Implementation Abstract: Tetris is popular and old games, which implements the four square blocks of color composition, and then stored in an array of four elements, the computer randomly generate different types of box seven, according to computer time control is kept at a certain time, the generation of users to control the keyboard, flip the four arrow keys, left, right and down operation, (with signals and slots to achieve the function of key events associated with the control) . Then the program under which seven boxes stacked into a variety of different models. Nokia, Qt is a cross-platform development of C + + graphical user interface application framework. It provides application developers to build-the-art graphical user interface used for the required functions. Paper describes the history of the game, develop the game environment, the significance of game development. Follow the software engineering knowledge, software problem definition from the start, followed by feasibility studies, needs analysis, outline design, detailed design, the entire development process throughout the software engineering body of knowledge. The design is based on the popular software with QT produced and popular Tetris game to QT + Creator for the development of language, the use of C + + and QT library for game design and implementation. Function using signals and slots to achieve the key events associated with the control, to achieve control of the keyboard. Need to address the problem is the box method for mobile and consumer lines, the solution is to coincide with the judge to decide whether the movement of the box, with so full of rows and all rows above it equal to its upper line to achieve the cancellation line. Ultimately the game features and the main control functions, and has a practical and promotional value. Keywords: QT, Timer, Signals, Random function QT 俄罗斯方块游戏的设计与实现 24 附件: 大学本科生毕业论文(设计)规范 一、毕业论文(设计)格式规范一、毕业论文(设计)格式规范 一份完整的毕业论文(设计)材料一般应包括下列内容: (一)题目; (二)目录; (三)论文主体(包括中英文摘要及关键词;正文;致谢;参考文献等); (四)附录。 具体分述如下: (一)题目 题目应力求简短、精确、有概括性,直接反映毕业论文(设计)的中心内容和学科特点。题 目一般不超过 20 个汉字,如确有必要,可用副标题作补充。 (二)目录 毕业论文(设计)必须按其结构顺序编写目录,要求层次分明,体现文章展开的步骤和作者 思路。目录格式是论文的结构层次,反映作者的逻辑思维能力,所用格式应全文统一,每一层次 下的正文必须另起一行。目录独立成页,以章、节、小节来编排。 (三) 论文主体 1、中英文摘要及关键词 摘要一般不分段,不用图表,以精炼的文字对毕业论文(设计)的内容、观点、方法、成果 和结论进行高度概括,具有独立性和自含性,自成一篇短文,具有报导作用。中文摘要一般以 200-300 个字为宜。关键词是反映毕业论文(设计)内容主题的词或词组,一般 35 个。其中 英文摘要与中文摘要基本对应,英文关键词之间用分号分开,最后一个关键词后不加任何标点。 2、正文 包括引言、正文、结论等部分。 (1)引言 引言也称前言、导论、导言、绪言、绪论等。它的作用是向读者初步介绍文章的背景和内容, 通常包括以下几个方面:为什么写这篇文章,要解决什么问题;论文的主要观点;与课题相关的 历史回顾;写作资料的来源、性质及其运用情况,论文的规划和简要内容;研究中的新发现;课 题的意义等。 (2)正文 正文是论文的核心部分,是作者学术理论水平和创造性工作的综合体现,是作者运用掌握的 材料与方法进行论证、得出结论的部分,其任务是分析问题和解决问题。根据不同论文研究的课 题性质、研究方法的不同,理论型、实验型和描述型论文的正文格式和写法不尽相同,但他们的 要求是一致的。即: 主题明确:全文围绕主题展开讨论,不离题; 论证充分:有观点、有思路、有材料、有说服力; 结论清楚:研究导出的结论不含糊、易理解; 逻辑严密:文字精炼流畅、条理清晰。 山西大学商务学院本科毕业论文(设计) 19 (3)结论 结论是论文要点的回顾和提高,是整个研究过程的结晶,是全篇论文的精髓。结论中应对本 篇论文解决了什么问题,得出了什么规律,存在什么问题给出明确的回答。撰写结论时,要注意 精炼准确、总结提高、前后呼应。 3、致谢(无必要时可省略) 以精练的文字,对在毕业论文(设计)工作中直接给予指导、帮助的人员表示谢意,言辞恳 切,实事求是。 4、参考文献 毕业论文(设计)须在论文的最后列出参考文献。参考文献应以公开发表过的、作者真正阅 读过的、与论文密切相关的或直接引用的为限,未发表过的论文、试验报告、内部资料等不宜列 入。参考文献的列写必须严格按照毕业论文(设计)中引用的先后顺序依次列写。参考文献的列 写格式,详见“毕业论文(设计)的书写规范与打印要求”。 (四)附录(无附录时可省略) 凡不宜收入正文中的、又有价值的内容可编入毕业论文的附录中。如:大号的设计图纸; 篇幅较大的计算机程序(但以研究软件程序为主的毕业论文题目,其程序可作为正文的一部分); 过长的公式推演过程。其它内容如译文及原文、专题调研报告、文献综述等可另行装订成册。 二、毕业论文(设计)的书写规范与打印要求二、毕业论文(设计)的书写规范与打印要求 (一)书写规范(一)书写规范 1、 引用有关政策、方针性内容务必正确无误,不得泄漏国家和单位机密。 2、使用普通语体文写作,体例统一,文句通顺,无语法错误,简化字符合规范,标点符号 使用正确,符号的上下角标和数码要写清楚且位置准确。 3、采用中华人民共和国国家标准(GB31003102-93)规定的计量单位和符号,单位用正体, 符号用斜体。 4、使用外文缩写代替一术语时,首次出现的,应用括号注明其含义,如 CPU(Central Processing U

温馨提示

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

评论

0/150

提交评论