岳阳博物馆网站,织梦后台搭建网站并调用标签建设,网站建设优化推广贵州,国外电商平台有哪些基于QT的俄罗斯方块游戏设计与实现
摘要#xff1a;信息时代正处于高速发展中#xff0c;而电子游戏已经成为人生活中或不可少的消磨工具之一。科技时代在不断地高速发展中#xff0c;游戏相关编程设计也随着发展变得越来越重要#xff0c; 俄罗斯方块游戏是一款古老传遍世…基于QT的俄罗斯方块游戏设计与实现
摘要信息时代正处于高速发展中而电子游戏已经成为人生活中或不可少的消磨工具之一。科技时代在不断地高速发展中游戏相关编程设计也随着发展变得越来越重要 俄罗斯方块游戏是一款古老传遍世界的经典游戏这个游戏看似简单易懂但却变化多端。 这个游戏的整体界面展示组成包括方块显示即主要游戏区域、分数等显示框、开始等按键。在游戏过程中由四个正方形组成的形状随机出现用户按下键盘上的四个方向键操控游戏区域的方块其中上下左右分别控制组合形状的旋转方向、加速下降、左右运动方向等最终实现方块在底部满行消除积分增加等级直至游戏结束。 这个论文课题内容包括俄罗斯方块的发展背景、游戏开发所需环境和开发目的和意义等内容。根据自己所学的知识本论文分别论述俄罗斯游戏游戏背景与目的、可行性研究分析、需求分析、基本功能、界面设计、测试结果等方面。此游戏设计是在系统支持下以C为开发编程语言在QT Creator 5.3.2版本的编程开发平台上实现游戏设计。 关键词游戏设计与开发QT编程信号槽函数
Design and implementation of Tetris based on Qt AbstractThe information age is in the high-speed development, but the electronic game already became one of the people life or essential attrition tools. Tetris is a classic game that has been around the world for a long time, and game related programming is becoming more important as the technology age continues to accelerate, it’s a simple game, but it’s a very varied one. The game’s overall interface display consists of a box showing the main game area, scores and other display boxes, start and other keys. During the course of the game, the shapes composed of four squares appear randomly. The user presses the four directional keys on the keyboard to control the squares in the game area, the top, bottom, left and right respectively control the direction of rotation, accelerated descent, left and right movement direction, etc. . Finally, the bottom of the box full line to eliminate integral, increase the level until the end of the game. This thesis includes the background of Tetris, the environment and the purpose and significance of game development. According to the knowledge, this paper discusses the Russian game background and purpose, feasibility study analysis, demand analysis, basic functions, interface design, test results, etc. . This game design is in the system support, with C as the development programming language, in QT Creator 5.3.2 version of the programming platform to achieve game design. KeywordsGame Design and DevelopmentQT ProgrammingSignal , Slot function
目 录
第1章 绪 论 1 1.1 游戏背景和意义 1 俄罗斯方块的历史背景 1 1.1.1 游戏软件的现状和意义 1 1.1.2 课题实现的研究意义 2 第2章 课题实现的可行性分析 3 2.1 课题的设计目的 3 2.2 可行性研究前提 3 2.2.1 课题研究的基本要求 3 2.2.2 课题研究的目的 3 2.2.3 课题研究的基本方法 4 2.3 可行性分析 4 2.4 游戏设计结论意见 4 第3章 需求分析 5 3.1 需求分析的含义和目的 5 3.2 游戏的开发需求 5 3.3 俄罗斯方块游戏开发环境平台 6 第4章 课题所需技术支持 7 4.1 面向对象的程序设计 7 4.2 程序设计思想 7 4.3 关于QT平台 7 4.4 QT内部进程通讯机制 9 第5章 课题的设计与实现 11 5.1 建立项目 11 5.2 界面设计 12 5.2.1 窗口大小和命名 13 5.2.2 显示实例化 13 5.2.3 信号与槽函数连接 14 5.2.4 界面布局设计 14 5.3 方块组合实现 14 5.3.1 构造方块组合 15 5.3.2 设置方块随机出现 15 5.3.3 获取方块信息 15 5.3.4 对方块进行变换 16 5.3.5 方块的颜色设置 16 5.4 游戏开始与暂停等功能实现 17 5.5 游戏开始按钮处理 17 5.6 按键处理事件 18 5.7 游戏计时事件 18 5.8 满行消行、等级划分、分数累加 19 5.8.1 实现等级划分 19 5.8.2 实现满行消行 19 5.8.3 实现用户分数累加显示 20 5.9 新方块的产生和下一方块的展示 20 5.9.1 游戏新方块 20 5.9.2 下一方块显示 21 第6章 俄罗斯方块游戏测试 22 6.1 关于软件测试 22 6.2 性能要求 22 6.3 测试的结果 23 参考文献 25 致 谢 26
第1章 绪 论
1.1 游戏背景和意义 俄罗斯方块的历史背景 这个游戏的发明者是利用工作外空闲时间编程出来的第一次问世是在1984年6月6号。俄罗斯方块游戏是由发明者最喜欢的运动网球和希腊字母前缀tetra-组合而成的。 1989年4月21日《俄罗斯方块》被当做唯一捆绑游戏随第一代Game Boy游戏机一同发售,在全球范围内卖出超过1亿台直到现在也仍旧是一个了不起的数字。俄罗斯方块是游戏与娱乐形式相对匮乏的时代里的一个不可或缺的存在Game Boy游戏机中的俄罗斯方块游戏是处于波斯湾战争期间的军人用于消磨时光的小游戏这个游戏能够至今还是被大家所熟知并没有陨落。 游戏的运行规则是用户通过四个方向键改变方块的旋转方向、移动方向和位置等方块是由四个正方形组成的。游戏过程中这些方块排列满一行或多行系统消除方块玩家分数和等级数值增加剩下的方块移动到底部直到没有空间放置降落的方块。 俄罗斯方块游戏的产权纠纷在历史中存在蛮多的因为这个游戏容易开发其他很多产品上面的俄罗斯方块游戏都是没得到授权就被开发。但很多产权纠纷的官司中持有者却是败诉的这说明像这种结构和逻辑十分简单的小游戏的产权纠纷中版权持有者是劣势的致使很多游戏厂家都不想开发这种类型的游戏了。 俄罗斯方块游戏操作规则简单、适用范围广当时无人不晓它在历史游戏中获得的评价极高在很多杂志里面的游戏访问中采访者对俄罗斯方块游戏的评分都十分高认可了这个游戏的经典之处。 1.1.1 游戏软件的现状和意义 现在除了美国、韩国等国家外很多国家也发现了游戏商机游戏行业越来越发达已经慢慢成为全球娱乐类中最大的产业每年有着大于200亿美元的收入。目前北美那边的游戏行业的产值已经差不多靠近整个影视产业的市值了这些事实结论就可以看出游戏行业在众多行业中的地位以及其发展潜力之大。 我国的游戏行业发展得晚但有很多游戏都是在推出来的时候就备受年轻人喜欢在2019年中游戏行业甚至有着947.3亿元的收入这个数据比上年增加了13.5%我国的游戏行业经过这几年的发展已经趋于平稳扩展出去的销售等行业也处于很好的发展过程。 游戏行业有着宏大的经济发展和大数量的用户对游戏的规范和合理引导就是必不可少的游戏开发不再仅限于实现功能用户体验感和界面视觉效果变得越来越重要。所谓用户体验感就是实现交互设计而整体界面视觉效果界面布局实现美观游戏行业越来越注重界面设计所以现在的游戏开发不再是简单的编程还涉及到交互和设计等方面。 1.1.2 课题实现的研究意义 俄罗斯方块游戏进化发展到现在已经有1000多种版本了开发不同版本的游戏需要不同运行环境的开发平台上运行开发时容易受到软硬件环境的影响这种影响限制了新技术的作用和功能的实现许多成熟的软件成果就被搁置了十分浪费。而且这是一个特别容易上手的小游戏编程也是比较简单在玩游戏的过程中可以锻炼玩家的脑力手机也能够进行一定的运动大脑有进行思考对身心都是十分有益的。 Qt可以在多系统上跨平台运转还能够通过版本控制可视化编辑器和系统这使编程变得更加方便。Qt能够让同一个源代码在不同的平台实现编译Compile和链接Link并且运行出来的结果完全一样这种形式被叫做“一次编写到处编译”。Qt Creator的跨平台特点一方面实现了编程另一方面在开发过程中能够减少开发所用开支还能够通过不同的开发平台环境发现到软件的不足不断地改进和完善功能软件。 这次课题的开发实现让我能够熟练运用QT相关开发软件和深入学习C语言在这个过程中我充分体会到这两者相结合的独到之处与此同时我学会通过思考问题并运用已学内容解决问题将我自己已经学习的内容进一步稳固又能够学习到新的内容。
第2章 课题实现的可行性分析
2.1 课题的设计目的 完成本次游戏开发的毕业设计任务掌握C编程语言的特点并用此语言完成代码编写本次设计是基于拥有跨平台的集成开发环境的Qt软件的熟练掌握Qt编程软件并且领略平台的独特掌握跨平台开发的精华体会跨平台开发软件在代码开发过程中的贡献之处。 通过本次毕业设计熟悉软件开发过程学会将理想与实践两者完美地相结合在实践开发这个将已经拥有的知识巩固起来并且不断学习新知识不断总结解决困难的办法。 2.2 可行性研究前提 2.2.1 课题研究的基本要求 课题的要求是实现游戏开发的逻辑可操作性、界面美观性、及时反映性、方便性、游戏兼容性在编码时须遵照标准使程序编码整体严谨有依据、有序富有逻辑并且易于理解在开发时也须根据计算机软件开发标准利用面向对象分析与设计00AD方法实现游戏的基本功能图形化界面是符合美观性的通过用户按键实现开始和暂停等游戏进行过程中玩家可通过键盘四个方向键控制方块翻转、下降等方块在底部满行消除且分数累加显示。 2.2.2 课题研究的目的 研究该课题过程中我能感受到俄罗斯方块这种简单游戏的独特之处体验游戏设计与开发的趣味所在期望最后能够很好地运用QT相关开发软件并且可以进一步地了解到其跨平台地特点、并且对C编程语言有进一步的掌握编程和思考逻辑能力等能有所提高。随着俄罗斯游戏的代码编写和设计检验了学习效果和动手能力把拥有的知识运行到开发项目中巩固所学知识基础加深理解。 2.2.3 课题研究的基本方法 本课题利用行动研究法、文献研究法、经验总结法、案例研究法测试法等研究基本方法。根据课题题目对整体剖析研究通过分析建立数据模型等步骤一步步对系统分析成部分然后画出程序流程图、用例图对整体功能实现进行描述最终建立出系统逻辑结构。分析结构建立基本架构之后需要后期慢慢进行对游戏功能进行补充和完善整个过程下来能够使系统整体结构更加完善、数据持久性设计、代码逻辑顺通要求以及界面美观设计最终实现软件相应功能完成本次课程开发与实现任务。 2.3 可行性分析 技术可行性分析本次毕业设计课题是基于Qt Creator开发环境平台通过C语言编写代码实现游戏基本功能。因为Qt具有跨平台性能够使同一个源代码在不同的平台软件上面编译链接运行出一模一样的结果利用这种“一次编写到处编译”的方法给跨平台通用软件的开发给予了极大的支持给编程人员带来很大的便利。 因此此设计课题在技术可行性上是能够进行合理设计的。 经济可行性这只是一个毕业设计课题并不需要支付任何经济成本和产生任何经济效益主要需要一台电脑及线管开发环境平台即可完成设计因此在经济可行性上是满足开发要求的。 使用可行性此课题主要完成游戏开始等功能界面整体简单玩家通过键盘掌控方块方块下降后实现整行或者多行消除消除成功后得到积分。因此游戏整体功能与界面设计实现好后就可以运行供使用因此具有使用可行性。 社会可行性本次课题设计属于个人毕业设计主要由毕业生本人独立完成与社会发展无直接关系不会出现各种社会问题。 2.4 游戏设计结论意见 根据上述可行性研究分析与思考本次基于QT俄罗斯方块游戏设计与实现在可行性研究上是具有绝对可行的并且拥有一定的使用价值可以作为毕业设计课题研究开发。
第3章 需求分析
3.1 需求分析的含义和目的 需求分析就是指将疑难点进行具体剖析将问题需要解决的要求搞清楚如输入的内容和获得的成果分别是什么回馈给用户的结果是怎样的需求分析可以帮助我们确定对计算机系统的需求确定对最后输出的结果的需求可见一定的需求分析是十分重要的。 在软件工程中需求分析是指将系统建立的目的、使用范围和所含功能等描述出来。在开发时需求分析过程是十分关键和重要的这个过程首先需将客户的需求确定下来只有确定需求后编程人员才可以开始着手分析需求并得到好的解决方法。有很多人觉得需求分析在软件开发过程中是最简单的但随着时间的沉淀人们开始意识到需求分析的重要之处它是不可或缺的。一个项目最主要就是在规定时间内解决客户的需求假如在需求分析过程中因为轻视而导致我们不能正确理解到用户的需求那么最后出来的项目肯定是不符合客户需求的。 需求分析报告能使代码更加规范化管理者能更好地管制和操控开发过程将开发人员和客户之间的沟通目的更好地在开发过程中体现出来开发需求报告分析能够使程序员更好地根据用户需求编写程序并且这个报告在后期能够为最终工作成果提供本始根据期待在更大范围内生产使用。 3.2 游戏的开发需求 以俄罗斯方块游戏为载体开发能够让编程人员在开发过程中充分感受到游戏开发的经典感受这种简单操作上手的游戏背后蕴涵的精妙让开发人员能够在整个开发过程中有趣地学习到知识这个课题是借助Qt环境平台使用C编程语言开发的所以在编程的过程中学习到Qt软件的使用方法、领悟编程语言的魅力并体会到两者之间结合的独特之处。 这个游戏是通过键盘对方块进行移动、旋转和摆放等让这些方块能够通过排列消除得分。具体实现过程是游戏开始会有由方形随机组成的不同形状的组合陆续从屏幕上方落下用户按下键盘上的上下左右四个键就可以对方块组合的位置还有方向进行调整方块可在底部排成满一/多行并清除用户分数得到叠加。剩下的方块慢慢堆积直到触碰到界面顶部游戏结束用户被通知游戏失败。 通过前面的需求分析报告确定此开发最终需要具有以下基本功能 1游戏界面布局界面代表着用户最直接的视觉体验。这个毕业设计课题的图形界面要满足包括按钮与显示方块翻转降落消除等过程的界面以及用户分数显示框等 2点击处理用户用鼠标点击界面按钮实现按钮功能 3实现方块组合通过不同方块组合实现游戏共有七种基础形状一字型、Z形状、反Z形、正方形、L形状、反L形、T字型这些方块在界面中进行自由下落运动 4键盘按键事件处理游戏过程中用户点击键盘操控方块其中上键来可让随机出现的方块旋转、左右两键控制方块移动方向、而键盘下键能够让方块快速下落到界面底部。 5积分实现方块排列成完整一/多行实现消除未消除的方块向下移动消除后累计的分数加到界面显示的用户分数框中显示。 3.3 俄罗斯方块游戏开发环境平台 操作系统Microsoft Windows1064位 开发环境平台Qt Creator 5.3.2
第4章 课题所需技术支持
4.1 面向对象的程序设计 面向对象程序设计包含各类单独却能够相互调用的对象如果把它当成一种思想那么它与将程序当做一连串函数的集合的传统思想是刚好相反的。它觉得任何对象都可以收到和返还数据给别的对象。 这个程序设计方法有利于开发人员对程序的理解使程序的设计和维护更加简单方便很多使用者都觉得此方法比以往的对学习更有利。现在在许多大型开发项目中被广泛应用到。当然一个使用方法有支持者的存在肯定也会有反对者的存在在某些领域对这个方法也存在着否认的声音这是一种正常的现象。在某些意义上这个方法也是一种软件开发形式把它当做是一种软件开发方式时我们就必须了解更多知识。 4.2 程序设计思想 C是从C语言直接发展过来的是对C语言的补充和扩展是一种面向对象的程序设计语言C语言的功能和便捷性都比C强不过其面向对象的特征比较复杂如今使用得十分普遍。 C编程语言的发展历程它是由Bjame Sgoustrup在贝尔实验室工作时开发的。一开始是作为C语言的有效补充。C在被科研人员发明后至今一共经历了3次关键的修订C语言在这几次修订中除了作出一些修正还增添了新的特点。其中第三次修订发生在C语言的标准化过程中。人们创立了一个委员会这个委员会在九四年提出首个C语言标准化草案。其中表示委员会在添加新特征的同时必须坚持Stroustrup当初定义的一切特点。 4.3 关于QT平台 Qt Creator是一个集成的编译器可在多种基本操作系统中运行编程人员可利用Qt进行开发。 Qt的发展史Qt是被奇趣科技公司发明出来的这个公司后面被诺基亚公司受够了公司旗下的Qt便成为诺基亚红丝旗下的工具。后来Qt又在2012年的时候被Digia收购2014年4月拥有跨平台特征的Qt Creator 3.1.0被正式推出这个软件的发布达成了对于iOS的整体支持废弃了没有Python接口的程序调试工具还新增了部分的插件将根据Clang轻量级编译器的C/C代码模块集成在一起在一定程度上也对安卓系统的支持做出了修改。现在基本实现了对IOS、安卓等系统的全面支持。 Qt Creato的代码编辑工具功能包括辅助代码的建立、编写和浏览能够对C或者QML编程语言进行完整的表达式检查。如当编程人员键入代码时行与行之间出现错误和警告时能够立即得到指示通过软件还能够根据语义上对各种变量、类、跳转函数等作出分析说明和上下文关联对程序提供辅助还可以对变量进行智能化的命名例如对在不同域中的两个相同名字的变量任一个进行重命名并且这对另一个变量不会造成影响还能够告知编程人员函数程序声明和调用的位置。 Qt Creator具有下列良好特征 良好的跨平台特征:Qt Creator软件对Windows、Linux等多种操作系统都具有支持性 面向对象Qt 具有优良的封装机制、可重用性比较好Qt 对于回调函数callback提供了一种称为 信息与槽signals/slots进行代替这种功能使程序的各个元件之间的配合工作进行地更加简单Qt也可以看做是一个C的工具箱是由几百个C类构成这些类在编写程序时都可以被使用这个软件可以方便地重新编写或者更改现有的组件以防Qt软件不具有真正符合需求的组件。Qt软件还具有其他的特点如对模块化设计特点和重视软件体系结构的可重用性。编程人员开发过程中能够将这个软件面对对象的特征和模块化设计的特点充分利用出来。 丰富的API接口API是操作系统留给应用程序的一个调用接口。对于开发人员来说在开发过程中拥有一套完善的组件他们就能够直接根据这些已经存在的组件开发出优秀美观的界面这个软件有着丰富的API函数还提供各种根据模板的集成接口 序列化、文件、输入输出设备、date/time类等。 图形绘制这个软件的绘画类工具是Qpainter这个类能够绘制各种图形通过结合使用OpenGL和Qt两个组件达到更好的效果。Qt初始界面如图4-1所示:
图 4-1 Qt Creator初始界面图 4.4 QT内部进程通讯机制 Qt系统是一个拥有着整体完整的系统结构的系统这个系统还建立了若干新的系统机制能满足编程人员在编写设计UI界面的应用程序时的各种请求。而这些根据QT的常见用于进程间的通讯机制有三种分别是QCOP协议Qt 内部的一种通信协议、信号-槽Signal-Slot机制、FIFO机制。 这里主要针对信号-槽Signal-Slot机制进行说明 信号-槽Signal-Slot信号-槽Signal-Slot机制是Qt的重点机制这种机制在QT中有着提供给对象与对象之间的通信的作用。在 Qt中“信号”事件“槽”对事件作出反应的方法一个类定义了多个信息和槽为了完成程序由事件触发必须要A类的信号与B类的槽通过connet连接起来。GUI工具大多是利用回调函数一个指针指向着函数将能够触发的行为定义出来,而信号-槽Signal-Slot机制也能够实现相同的功能因此在Qt中取代了它。并且这个机制不管携带着多少不同类型、数量的参数系统都不会奔溃十分安全。 这种机制下编程人员能够把很多信号和单独的一个槽函数结合联系起来相同的很多槽函数也可以很单独一个信号联系另外若把A信号和B信号直接两者联系A信号被发出的时候信号B就能够被立马发出。 所以信号-槽两者结合就生成了一种强大功能的编程机制这种机制的原理如图4-2所示
图 4-2信息与槽机制图
第5章 课题的设计与实现
5.1 建立项目 编程人员打开QT软件首先建立应用程序项目这个项目的名称为游戏的英语game如图5-1所示
图 5-1新建项目图a 命名后就开始建立类类名称是gameBoard基类的话点击选择选择QWidget这个时候软件会自动生成对应名称的头文件和源文件。如图5-2所示
图 5-2 新建项目图b 创建项目完成之后选择源文件进行右键点击编程人员手动添加两个新文件这两个新文件的类名一个为gamewindow另一个为gamepiece且基类还是选择QWidget都是QWidget软件还是会同步自动生成两个对应名称的头文件和源文件分别为gamewindow.h、gamewindow.cpp、gamepiece.h、gamepiece.cpp如图5-3所示
图 5-3 添加新文件 整个项目创建完毕这个命名为tetris的项目文件包括一个main.cpp函数以及三个头文件gamewindow.h、gamepiece.h、gameboard.h和三个相应的源文件gamewindow.cpp、gamepiece.cpp、gameboard.cpp 源文件中的gamewindow函数是主窗体函数这个函数的主要功能是实现主要显示窗体大小和窗口标题定义设置开始、退出、暂停按钮和分数、等级显示框等部件指针、界面显示布局设计、实现信号和槽Signal-Slot函数的连接而gamepiece函数主要实现显示方块的形状变化随机方块组合做自由下落运动、控制方块的位置和方向等功能最后gameboard函数是游戏开发程序的核心实现着游戏的主要功能如鼠标点击事件如用户点击开始或者暂停的运行、界面设计显示方块着色键盘按键处理事件计时器处理事件游戏结束清屏处理程序主功能的实现方块完成满一行或多行消除事件分数叠加显示等级等功能的实现。如图5-4所示
图 5-4 项目组成图 5.2 界面设计 主窗体界面有六部分包括整个游戏界面主窗口、通过关卡显示框、累计分数显示框、消行数的显示框以及下一个方块预显示开始按钮、暂停按钮、退出按钮整体布局如图5-5所示
图 5-5 主窗体界面图 5.2.1 窗口大小和命名 TetrixWindow函数是主窗体函数窗口显示位置和命名都通过此函数实现一个窗口界面的设置第一步一般就是对整体窗口大小进行设计下面显示代码中setWindowTitle就是用于对窗体标题命名resize(w,h)是设定窗口大小。代码如下所示
5.2.2 显示实例化 在主窗口函数的头文件中对需用到的部件指针进行声明这些部件指针包括开始按钮、退出按钮、暂停按钮分数显示框、等级显示框、消行数值、下一个方块预显示区等这些按钮还有显示框的实例化都是通过gamewindow.cpp函数实现实现代码如下
5.2.3 信号与槽函数连接 信号-槽机制是Qt的核心机制这种机制是一种用于对象之间通信的方法在Qt中编写程序就是用到这种方法采用这种机制使对应信号和槽函数的连接影响着程序设计能否实现这里采用了QObject::connect(信号发射对象,SIGNAL信号),信号接收对象,SLOT(触发槽))作为信号与槽函数之间连接的结构。代码如下所示
5.2.4 界面布局设计 实例化后的按钮还有显示框怎么能够合理地排放好位置呢主窗体布局设计能够解决这个问题水平布局与垂直布局两者结合就是对布局进行设计在这次课题的主窗口布局设计中这里主要是采用了网格化的排列方式布局按钮还有显示框都在左边显示右边显示游戏方块。代码如下所示
5.3 方块组合实现 游戏中界面出现随机方形组合这种组合包括七种不同的形状一字型、Z形状、反Z形、正方形、L形状、反L形、T字型用户通过键盘控制方块的方向和位置这样就共有7x428不种同方块形状在界面中显示并实现自由下落运动。如图5-6所示
图 5-6 七种基本方块组合形状图 5.3.1 构造方块组合 游戏的实现首先需要构造出七种基础形状gamepiece.cpp函数中的GameShape函数就是通过枚举顺序的方法还有数组的形式对方块进行构造组合实现四个小方块组合成7种形状每个组合形状由4个小方块组成设置X表示横坐标Y表示纵坐标而每行的四个坐标就是这4个小方块的坐标。 5.3.2 设置方块随机出现 游戏玩家点击开始按钮七种基础形状组合中的任一个随机出现下落利用系统的时间和通过伪随机函数的设置对组合方块下落增加随机性。主要代码如下所示
5.3.3 获取方块信息 方块组合形成后就是在游戏过程中能够对方块得到获取主要是对方块的横纵坐标进行获取这里获取到最小/大横坐标数值分别通过函数QtGlobal::qMin和函数QtGlobal::qMax代码如下所示
5.3.4 对方块进行变换 游戏过程中玩家通过键盘的四个方向键改变方块位置和方向其中向上键是对方块的旋转方向的控制共有四个方向最终就形成了4*728种图形组合这些形状会在主窗口界面上方随机出现并且实现自由下落运动。主要代码如图所示
5.3.5 方块的颜色设置 为了整个界面的美观这里对方块进行不同的着色使形状在颜色上也有区分如图5.3.1中方格色彩。代码如下所示
5.4 游戏开始与暂停等功能实现
图 5-7 界面开始、暂停、退出按钮 在界面设计中对开始、退出、暂停按钮都实现了实例化开发过程中通过代码编写实现按钮对应功能。 5.5 游戏开始按钮处理 开始按钮的处理首先是判断出这个游戏是否是出于暂停状态若游戏处于暂停状态则开始按钮按下无效系统不作出反应若游戏并未处于暂停状态游戏开始。随机出现方块。代码如下所示
暂停处理是系统先判断游戏状态游戏是否是处于开始的状态非开始状态也非暂停状态则暂停按钮点击无效系统不坐反应开始状态且非暂停状态则实现暂停处理函数游戏出于暂停状态暂停状态下再次运行暂停处理函数游戏变成开始状态游戏暂停状态下界面显示改变主窗体界面的主游戏区域方块清除显示“游戏已暂停”主要代码如下所示。
5.6 按键处理事件 玩家通过键盘方向键对随机下落的方块组合进行控制其中上键是控制方块旋转方向左右两键对方块进行左右方向的移动控制下键使方块快速下降至底部。通过键盘处理事件玩家能够很好地控制方块实现游戏的运行。代码中是通过tetrixboard.cpp函数中keyPressEvent函数实现键盘处理。主要代码如下所示
5.7 游戏计时事件 玩家点击开始按钮后方块开始进行自由下落运动系统也开始进行开始计时事件这个事件是系统先对之前下落的方块状态进行分析判断其是否下落完毕若此方块已经下落完毕则实现新方块的下落若未下落完毕则标记状态为有方块正处于下落过程与此同时在主窗口界面的下一个方块文字下的方块预显示框添加新的方块此方块就是下一次将要下落的方块形状并且等到此方块下落完毕新方进行下落。代码如下所示
5.8 满行消行、等级划分、分数累加 游戏过程中方块满一/多行进行消除剩下没有被消除的方块随着往底部下降与此同时系统将满行消行后取得的分数累加到已有的分数中分数显示框中的数值更新显示并且游戏玩家分数累计到一定的程度就会将等级框中的数值累计加一级并更新显示在主窗口界面中直到游戏结束。 5.8.1 实现等级划分 系统会根据玩家累计的分数进行相应的等级划分玩家分数越高游戏的难度越高闯关等级也是越高。而闯关难度的提高是通过随机出现的方块组合的下降速度的更改实现的。主要代码如下所示
5.8.2 实现满行消行 根据俄罗斯游戏的游戏规则方块在主窗体界面中实现满足一行或者多行填满就必须完成消除而这个过程需先判断已经下落到底的方块是否满行的而满行分为满一行以及满多行对行的话就需要不断地循环判断才可以实现不管是满足一行还是多行都会将这些满的行数消除之后剩余没有消除的方块往底部降落出现新方块。主要代码如下所示
5.8.3 实现用户分数累加显示 方块实现消行后系统会根据消除行数进行分数的叠加整个叠加操作是系统首先对满行消行数值进行判断判断是否大于0如若消除行数大于0的话就对已有的分数进行累加更新显示并且更新到主窗口界面中显示后面遇到消行情况同样操作。主要代码如下所示
5.9 新方块的产生和下一方块的展示 5.9.1 游戏新方块 游戏运行过程中随着之前出现的方块的降落到底界面上方就会出现新方块缓慢下落这个过程首先是将要下降的方块的形状先随机预设好于此同时设置好新方块出现在界面中的位置而这个位置必须满足游戏区域的顶部的中心。设置好后等待之前的方块降落至底之后就可以显示出现实现下落方块下落过程中系统会判断用户能否通关键盘输入控制方块的移动若新方块不能移动则表示游戏结束。主要代码如下所示
5.9.2 下一方块显示 新方块出现时在下一个方块文字下面的预显示方块区域就会显示下一个出现的方块的具体形状。这个过程首先是在预显示区域显示出方块具体像素形状系统绘制出这个方块并且加载出来等待出现在界面顶部中心。这个过程的实现函数主要代码若下所示 第6章 俄罗斯方块游戏测试
6.1 关于软件测试 软件测试存在的目的是为了检验编程好的软件是否满足需求分析阶段定下的要求的检验实际运行结果与期待的结果之间的差别并两者相比较等。软件测试是在特定的条件下铜鼓对编程好的程序经一些操作通过程序表现出来的错误对软件的质量有一定的衡量并判断程序是否满足开发需求。软件测试能够使开发的软件的正确性、完整性都有所提高。 关于软件测试《软件测试的艺术》一书进行了论述 测试的目的不是致力于将程序中的错误找出来并且测试的目的也不能局限于找出错误还要注重于分析各种原因与趋势分析错误发生的原因还有发生的趋势这个在开发过程对项目的负责人找出软件的缺陷是十分有利的这能够方便错误的及时更改避免一些没必要的错误的产生以及造成一定的损失。而且若分析之后如果能够总结出有针对性的解决方法对日后的追踪或者他人的开发带来便利都是十分好的。 软件测试是有原则的第一测试这种事情肯定是能够早期进行就尽量早在需求的阶段就开始着手是最好的因为这个时段就算测试出来很大的错误但造成的最大后果无非就是用户的需求不能够得到满足。第二软件测试人员与编程人员不是同一批人进行软件测试应该由第三方负责。第三进行测试使认定是错误是需要一个过程的A检测出来的错误但还是需要由第三方介入确定并且出现严重错误的情况是需要召开会议进行集合分析评论下言论的并且对其严重程度也需要确定。第四测试是一个过程作为过程就是包含着计划才是严谨的阮籍测试也是一样整个过程必须是严谨的有指导性赶时间是得不到高质量的结果的。 综上所述在开发的过程中软件测试是不可或缺的。 6.2 性能要求 下列主要是叙述这个游戏开发实现应该具有的性能要求 准确性玩家玩游戏的过程中需要确保基础的错误不会出现如确保随机出现的方块的自由下降过程无误、分数累加显示和等级显示都是准确的。 稳当性游戏在运行的过程中只有具有足够的稳当性才能够使程序持续运行不会有突然停止卡顿的事情发生致使程序整体崩塌。 可延伸性除了基本功能的实现正常投放使用的程序都是可以将原有的项目继续延伸发展的。 跨版本性随着科技的发展系统还有开发软件都在不断地升级。程序需满足能在不同版本的系统还有Qt开发平台上运行。 6.3 测试的结果 主窗体界面界面测试整体界面布局舒适合理包含下一个方块显示区、分数累计显示区、当前等级显示区、消行数显示区、开始按钮、暂停按钮、退出按钮还有主游戏区域整体界面排版清晰方便玩家理解与操作。
图 6-1 游戏测试主界面图 基本功能测试 鼠标点击处理事件用户点击按钮时系统对按钮作出相应事件处理。基础形状组合生成游戏进行过程中界面顶部随机出现方块进行自由下落运动这些方块组合是由四个正方体方块组成的共有七种图形组合而玩家通过上方向键控制形状的旋转方向共形成4*728种不同形状组合这些组合都能够实现呈现在游戏界面中。 按键处理事件游戏过程中用户能够通过键盘四个方向键控制方块其中上键控制方块旋转方向、下键使方块快速下降到底部左右方向键控制方块移动方向。 满行消行、分数累加、等级划分游戏过程中方块自动满行消除且剩下方块降落至界面底部消除之后所得的分数累积相加后更新显示到所得分数显示框并且分数到一定程度之后玩家游戏等级增加通过关卡的显示框显示相应等级。 界面实现测试时暂停游戏界面是玩家点击暂停按钮后界面出现游戏已暂停字眼运行界面就是有不同颜色不同形状的方块自由降落分数累计界面是随着游戏的进行关卡、分数、消行数都得到累计增加显示结束界面是方块排列最高的点接近顶部降落的新方块没有办法移动。
参考文献
[1]谭浩强.《C面向对象程序设计》.清华大学出版社:2006.01第一版 [2]Ian Joyner.《C A Critique of C and Programming and Language Trends of the 1990s》 [3]Stanley B. LippmanJosée LajoieBarbara E. Moo. C Primer.(有中文译本人民邮电出版社出版ISBN 978-7-115-14554-3) [4]Luca Cardelli and Peter Wegner. “On Understanding TypesData Abstractionand Polymorphism”Computing SurveysVolume 17, Number 4, pp. 471–522, 1985 [5]陈超C语言常用函数速查手册[M]北京化学工业出版社2010.06 [6]黄丽琴丁林松Qt4图形设计与嵌入式开发[M]北京人民邮电出版社 7布兰切特(BlanchetteJ),(英)萨默菲尔德SummerfieldM.闫锋欣译CGUI Qt4编程(第二版)[M] New York: Spring-Verlag2008.08 [8]美伊斯特EEzustA.)(美)伊斯特(EzustP.)著.李仁见战晓明译C设计模式Qt4开源跨平台开发框架[M]北京清华大学2007.08 9萨特(罗)亚历山德雷斯库.C编程规范101条规则、准则与最佳实践[M].北京人民邮电出版社,2010 [10]郑莉董江周.C语言程序设计(第4版)[M].清华大学出版社:2010 [11]蔡志明.精通Qt4编程[M].北京电子工业出版社2008.1 [12]霍亚飞.《Qt及Qt Quick开发实战精解》.北京航天航空大学出版社2012.05.01 [13]Eric Raymond .《unix编程艺术》一书:第十四章第四节“语言评估” [14]霍亚飞.《Qt5编程入门》.北京航天航空大学出版社2015.02.01 [15]Scott MeyersEffective C: 50 Specific Ways to Improve Your Programs and Design (2nd Edition) (Addison-Wesley Professional Computing Series)
致 谢
从开始写作至论文最终定稿时间过得很快随着毕业设计基本完成说明我四年的大学生活也即将面对结束了这也代表着我的学生生涯的结束。时间真的过得飞快啊回顾四年的校园生活从青涩地进入校园到毕业进入社会好像学习了很多东西但又感觉很当初差不多。 毕业设计代表着最终的结束在这次的毕业设计中也让我学到了很多东西将大学四年所学融为一体、倾注于设计同时在整个毕业设计过程中又让我学到了很多课外知识又通过亲自动手实践提高了自己的实践能力将理论与实践相结合既实践操作提高动手能力同时也在实践过程中夯实了基础更扎实的掌握了理论知识从而提高了自身的专业技能因此在这次毕业设计过程中收获颇丰。 回首四年有太多的感慨四年一路走来有一直陪伴我的同学和老师真心感谢学校的领导、老师、和我的同学们谢谢你们一路的陪伴。 不管将来走到哪里我都不会忘记曾今帮助过我、陪伴过我的老师同学们。今后我会更加努力严格要求自己让自己越来越优秀不辜负大家的期望。