欢迎来到三一文库! | 帮助中心 三一文库31doc.com 一个上传文档投稿赚钱的网站
三一文库
全部分类
  • 研究报告>
  • 工作总结>
  • 合同范本>
  • 心得体会>
  • 工作报告>
  • 党团相关>
  • 幼儿/小学教育>
  • 高等教育>
  • 经济/贸易/财会>
  • 建筑/环境>
  • 金融/证券>
  • 医学/心理学>
  • ImageVerifierCode 换一换
    首页 三一文库 > 资源分类 > DOC文档下载  

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

    • 资源ID:3902704       资源大小:198.02KB        全文页数:23页
    • 资源格式: DOC        下载积分:6
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录   微博登录  
    二维码
    微信扫一扫登录
    下载资源需要6
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    QT 俄罗斯方块游戏的设计与实现 作者姓名 指导教师 所学专业班级 所属院系 学习年限年月至年月 二年月 学号:学号: 本 科 毕 业 论 文(设 计) 目目 录录 内容提要 I 引言 1 1. 绪论 .1 1.1 游戏的历史 .1 1.1.1 从头谈起.1 1.1.2 图形硬件的革命.2 1.2 游戏的意义与内涵 .2 1.3 游戏的组成要素.2 2. 可行性研究 .3 2.1 设计目的.3 2.2 可行性研究前提.4 2.3 可行性分析.4 2.4 结论意见.4 3. 需求分析 .5 3.1 引言.5 3.2 游戏需求.5 4. 设计基本的游戏功能 .5 4.1 方块类定义函数.6 4.2 程序核心函数.7 5. 程序主要功能设计及按键事件的控制 .7 5.1 建立工程.7 5.2 添加定时器和开始按钮.8 5.3 添加暂停和重新开始按钮,完成基本的控制功能.9 5.4 改变颜色和给方块添加图片10 5.5 是否显示背景网格和下一个要出现的方块10 5.6 添加方块移动的声音11 5.7 添加向下按钮步数设置12 5.8 添加方块12 5.9 设置旋转游戏区12 3 6程序设计思想与流程图 13 6.1 游戏实现的核心方法13 6.2 游戏是怎么实现显示现在和已有的图形的。13 6.3 游戏是怎么判断方块已经重合的13 6.4 游戏是怎么进行消行的14 6.5 对于改变图形后越界或和别的图形重合的处理方法14 6.6 按键事件 15 致谢 1 参考文献 1 ABSTRACT 1 9 QT 俄罗斯方块游戏的设计与实现 内容提要 俄罗斯方块是个老幼皆宜的小游戏,它实现由四块正方形的色块组成,然后存储在一个 数组的四个元素中,计算机随机产生不同七种类型的方块,根据计算机定时器控制它在一定的时间不 停的产生,用户根据键盘的四个方向键控制翻转、向左、向右和向下操作, (用信号和槽函数的关联来 实现对按键事件的控制) 。然后程序根据这七种方块堆叠成各种不同的模型。Qt 是诺基亚开发的一个 跨平台的 C+图形用户界面应用程序框架。它提供给应用程序开发者建立艺术级的图形用户界面所需 的所用功能。论文描述了游戏的历史,开发此游戏的环境,游戏开发的意义。遵循软件工程的知识, 从软件问题定义开始,接着进行可行性研究、需求分析、概要设计、详细设计,整个开发过程贯穿软 件工程的知识体系。 此次设计在 Linux 系统下,以 QT+Creator 为开发语言,使用 C+和 QT 库来进行游戏的设计与实现。 关键词 数组 定时器 信号 槽函数 QT 引言 在现今电子信息高速发展的时代,电子游戏已经深入人们的日常生活,成为老少皆宜的娱乐方式。 俄罗斯方块是一款风靡全球的电视游戏机和掌上游戏机游戏,它曾经造成的轰动与造成的经济价值可 以说是游戏史上的一件大事。这款游戏最初是由苏联的游戏制作人 Alex Pajitnov 制作的,它看似简 单但却变化无穷,令人上瘾。相信大多数用户都还记得为它痴迷得茶不思饭不想的那个俄罗斯方块时 代。究其历史,俄罗斯方块最早还是出现在 PC 机上,而我国的用户都是通过红白机了解、喜欢上它的。 现在 QQ 等游戏平台又将重新掀起这股让人沉迷的俄罗斯方块风潮。对一般用户来说,它的规则简单, 容易上手,且游戏过程变化无穷,而在游戏平台上的对战模式更增加了它的娱乐性和挑战性,使用户 既能感受到游戏中的乐趣,也给用户提供了一个展现自己高超技艺的场所。 俄罗斯方块游戏可以说是随计算机的发展而发展,并不断推陈出新演变出各种类似游戏, 深受广 大玩家喜爱。这个游戏有的简单, 有的复杂, 但其根本原理是一样的都是对运动的方块进行组合, 来 训练玩家的反应能力。谈到游戏软件, 大多数人都认为其神妙莫测, 高不可及。而一般游戏软件也确 实具有很高的技术难度, 随着开发工具及软件开发方法学的不断发展, 动手开发游戏也不是十分困难 的。俄罗斯方块游戏是一种古老而又有趣的游戏, 游戏软件不计其数, 网上就有好多关于实现的复杂 算法和设计, 其难度让一般初学者望而却步。本文利用数组作为方块的数据结构,提出一种用 C 语言 和 C+来实现的方法, 对初学者可仿此开发类似游戏, 并了解游戏软件的设计与开发过程。 1. 绪论 1.1 游戏的历史 游戏开发至今已经有 30 多年,在这个短暂的时期里,随着硬件水平的提高,游戏开发新技术层出不 穷,经典游戏比比皆是。 1.1.1 从头谈起 真正的电子游戏机产生于 20 世纪 70 年代。1971 年,麻省理工学院的学生 Nolan Bushnell 设计 了世界上的第一个业务用游戏机(俗名街机) ,叫做电脑空间 。这台游戏机用一台黑白电视机作为 9 显示屏,用一个控制柄作为操纵器,不过由于市场因素这款游戏以失败告终。但是最后他在电子游戏 的发展上取得了非凡的成就。 上面介绍的是专用机游戏的历史,而最早的电脑游戏可以追溯到 1972 年,一个叫 Crowther 的工 程师用当时最流行的主机DEC 公司的 PDP10 编写一段简单的 FORTRAN 程序。在这个程序里, Crowther 设计了一张地图,地图上不规则的分布着陷阱,游戏者必须寻找路径避开陷阱。这个程序被 公认为是最早的电脑游戏程序。 1989 年,BroderBund 公司的设计师乔丹.麦克纳根据阿拉伯民族的古老传说一千零一夜在 Apple 平台上制作了一部动作冒险相结合的电脑游戏波斯王子。这个游戏获得了第一作,它代表 了当时电脑技术的最高水平。 1986 年,任天堂公司发售了一款真正的游戏巨作超级马里奥。 20 世纪 80 年代 IBM PC 兼容机的出现打破了 Apple 公司的垄断地位。 到了 20 世纪 90 年代,游戏业才真正成熟起来,成为了一种产业。 由于 PC 机价格非常低而且硬件速度越来越快,游戏逐渐成为人们生活中不可缺少的一部分。游 戏产业也逐渐发展成熟。 1.1.2 图形硬件的革命 图形硬件的飞速发展是近些年来的事情,部分原因是来自工业方面的压力,例如在军事和医疗方 面对于实时图形的需求很强烈,而交互娱乐产业也极大的推动了图形硬件的发展。技术上的因素同样 也推动着图形硬件的发展,许多图形算法可以很容易地表达为并行方式,这样硬件执行的效率变得很 高。摩乐定律也起了作用,越来越多的晶体管可以集成到一块单独的芯片上。 在所谓的 GPU(图形处理器)概念出现以前,特殊的图形硬件只出现在诸如 SGI 和 E 4在 widget.cpp 的构造函数里添加语句。 Widget:Widget(QWidget *parent) : QWidget(parent), ui(new Ui:Widget) ui-setupUi(this); 9 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(“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 写上“你的分数是:” , 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() /重新开始 9 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() /改变颜色 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() 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_8_clicked() /声音开关 if(this-ui-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(“关闭声音“); else this-gameArea-setPlaySound(false); /关闭音乐 this-ui-pushButton_8-setText(tr(“打开声音“); this-gameArea-setFocus(); 9 3我们把需要的声音文件放到工程文件夹下的 debug 文件夹下。只能是 wav 格式的。 5.7 添加向下按钮步数设置 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.8 添加方块 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.9 设置旋转游戏区 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(); 6程序设计思想与流程图 图 6.1 设计实现流程 6.1 游戏实现的核心方法 利用了数组对整个游戏区域进行存储。 6.2 游戏是怎么实现显示现在和已有的图形的。 利用了两个数组,方块每移动一步,都对整个数组进行一次备份。 6.3 游戏是怎么判断方块已经重合的 先尝试让方块移动一步,判断其是否与其他图形重合,如果不重合就移动。如果重合了,则执行其他 9 操作。代码如下: 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; 6.6 按键事件 判断按键 判断可否变 形,图形变 化调用函数 判断可否移 动。可以则 移动 判断可否移 动。可以则 移动 判断可否移 动。可以则 默认下移一 步,否则下 到底 如不是这 4 个 按键,则接收 其他按键。 图 4.2 键盘事件功能图 9 参考文献 1 谭浩强,张基温,C 语言程序设计教程(第 3 版)M高等教育出版社,1991 年 08 月 2 陈超,C 语言常用函数速查手册M,化学工业出版社,2010 年 06 月 3 韦东山,嵌入式应用开发完全手册M,人民邮电出版社 4 黄丽琴,丁林松,Qt4 图形设计与嵌入式开发M,人民邮电出版社,2009 年 04 月 5 成洁,卢紫毅,Linux 窗口设计Qt4 精彩实例设计分析M,清华大学出版社,2008.11 6(加)布兰切特(Blanchette,J) , (英)萨默菲尔德(Summerfield,M)著,闫锋欣 译, C+GUI Qt4 编程(第二版)M,2008 年 08 月 7 蔡志明,精通 Qt4 编程(第 2 版)M,电子工业出版社,2011 年 2 月 8 (美)伊斯特(EEzust,A.) , (美)伊斯特(Ezust,P.)著,李仁见,战晓明 译,C+设计 模式基于 Qt4 开源跨平台开发框架M,清华大学,2007 年 8 月 9 肖林甫,肖季东,任桥伟,LinuxLinux 那些事儿之我是 USBM,电子工业出版社,2010 年 07 月 10 郑莉,董江周,C+语言程序设计(第 4 版)M,清华大学出版社,2010 年 07 月 http:/www.cajcd.edu.cn/pub/wml.txt/980810-2.html,1998-08-16/1998-10-04. QT Tetris Game Design and Implementation Abstract: Safe Tetris is a little young 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 the computer timer control It is time to stop at a certain generation, the user based on the four keyboard arrow keys to control the flip, 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. Keywords: Array Timer Signals Solt functions QT

    注意事项

    本文(QT俄罗斯方块游戏的设计与实现 毕业论文.doc)为本站会员(小小飞)主动上传,三一文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    经营许可证编号:宁ICP备18001539号-1

    三一文库
    收起
    展开