您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 基于Qt的俄罗斯方块游戏
2020/5/26基于Qt的俄罗斯方块游戏开发南京航空航天大学作者:刘国栋王琰概要设计系统概要设计概述概要设计给出俄罗斯方块游戏的总体设计方案机构,确定系统的程序模块以及这些模块之间的关系。2020/5/26模块划分此次游戏设计共包括方块、窗口和运行三个模块。2020/5/26俄罗斯方块方块窗口运行Piece模块下又分为设置方块形状和旋转两个小模块,分别用来产生7种基本图形和对图形进行旋转操作。2020/5/26方块设置方块形状顺时针旋转2020/5/26窗口游戏区布局窗口模块下又分为游戏布局和游戏显示两个模块,游戏区布局模块包括定义主游戏区的大小及位置等信息,游戏显示模块则定义了分数,关卡数等的显示方式。游戏显示2020/5/26运行移动旋转消行暂停键盘运行模块又包括移动、旋转、消行、暂停和键盘模块。移动模块负责对下落中的图形进行左移、右移以及加速下落操作旋转模块负责对下落中的图形进行旋转操作。消行模块是对已经下落到底部的方块进行检测,如果有满行存在则将满行消去。暂停模块的功能就是在游戏中实现暂停的功能键盘模块就是检测游戏过程中按下的按键,并做出相应的响应。2020/5/26游戏详细设计1.游戏界面设计2.方块的产生和旋转3.方块类2020/5/261.游戏界面设计游戏主窗体是整个游戏的显示部分,主要用于放置绘制好的游戏区域,显示游戏玩家的得分情况、关卡和其它基本信息。游戏区域的宽分成10等分,高分成22等分,也就是说每行有10小矩形,总共有22行。左边是数据的显示部分。分为得分(scoreLcd)、关卡(levelLcd)等。另外,主窗体还设计了游戏的选项按钮,方便游戏者的操作。通过调用QPainter的drawLine的方法绘制游戏网格,调用QPainter的drawPixmap和drawRect绘制方块背景和边框。具体界面如下图所示:定义一个枚举类型,表示方块的七种形状,通过图形实体类随机产生一个初值,用于产生图形的某种状态,如下图所示2.方块的产生和旋转2.1方块的产生每个形状由4个小方块组成,这里每行的四个坐标即4个小方块的坐标,其中横向为X,纵向为Y,上图分别为Z字形、S字形、直线型、T字形、正方形、L字形和反L字形,各个图形的坐标依次如下:{{0,-1},{0,0},{1,0},{1,1}},{{0,-1},{0,0},{-1,0},{-1,1}},{{0,-1},{0,0},{0,1},{0,2}},{{-1,0},{0,0},{1,0},{0,1}},{{0,0},{1,0},{0,1},{1,1}},{{-1,-1},{0,-1},{0,0},{0,1}},{{1,-1},{0,-1},{0,0},{0,1}}2.2方块的旋转这里的思路就是使用坐标变换,要使图形顺时针旋转,则将方块当前的Y坐标值赋给X,X的坐标值取反赋给Y。比如:以最上面的方块为例,旋转之前它的坐标是(0,1),旋转时,Y坐标赋给X,所以X为1,X的坐标赋给Y,所以Y的坐标为0,因此旋转后的坐标就为(1,0)2020/5/263.1方块移动和旋转当方块移动到地图的左右边界处,或者落下去后,不能再继续移动或者旋转;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动或者旋转。确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件成立,那就是方块的横坐标必定是小于或者等于零的。3.方块类3.1方块的移动和旋转这里我们使用了一个tryMove()函数来实现这个功能。第一步是判断是否到边界:首先读入当前块的坐标,再加上将要发生的位移,得到新的坐标值,然后判断新的坐标值是否小于0或者超过了上边界值。如果不返回false的话就进入第二步:判断当前x,y所在的坐标是否已经存在方块,如果存在,则返回false,否则就就返回true,并调用绘图函数生成新的图形。具体的流程图如下图所示:2020/5/263.2满行及消行判断功能:判断是否有已满行,然后把该行消去。实现:这里我们使用removeFullLines()函数进行处理。游戏在方块下移到底后,利用循环判断有几行已满,并将行数值存入变量。再利用循环将非满行往下移动相应的行数,并将已满行进行清零和进行加分操作,同时更新窗口,从而实现消行的效果。2020/5/26方块落下是否有消行否检测第一行检测第二行消去该行是是否有消行消去该行检测第三行是否有消行检测第四行消去该行否是消去该行是否有消行否是统计所消行数,增加相应积分结束开始3.3游戏控制游戏中,如果按下暂停键,就会暂停当前的游戏。这里暂停键的基本设计思路是将计时器停止运行,那么图形的移动和旋转就会停止,此时程序所做的工作就是刷新界面。2020/5/263.3.1暂停功能开始游戏开始暂键按下停计时器停止刷新界面计时器重新开始NYNY3.3.2加速下落2020/5/263.4键盘事件响应键盘的操作主要有上、下、左、右四个方向键,在游戏中分别实现旋转、加速下落、左移、右移的功能。这里通过重新实现虚函数QWidget::keyPressEvent来响应相应的键盘按键事件。具体的流程图如下图所示:2020/5/26开始游戏开始游戏暂停向左移动一格向右移动一格加速下落顺时针旋转90度左右下上YNNNNYYYYNN2020/5/26开始画背景随机生成方块方块下落扫描按键是否消行消行积分是否可以下落是否充满游戏区是否按下控制键暂停左右下上是否退出是否能移位加速下落能变形变形左右移位游戏结束YYYYYYNNNNNNNY2020/5/26谢谢观看!Thanks!
本文标题:基于Qt的俄罗斯方块游戏
链接地址:https://www.777doc.com/doc-5555695 .html