- 1、本文档共24页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于Qt的俄罗斯方块游戏
3.4键盘事件响应 键盘的操作主要有上、下、左、右四个方向键,在游戏中分别实现旋转、加速下落、左移、右移的功能。这里通过重新实现虚函数QWidget::keyPressEvent来响应相应的键盘按键事件。具体的流程图如下图所示: * 开始 游戏开始 游戏暂停 向左移动一格 向右移动一格 加速下落 顺时针旋转90度 左 右 下 上 Y N N N N Y Y Y Y N N * 开始 画背景 随机生成方块 方块下落 扫描按键 是否消行 消行积分 是否可以下落 是否充满游戏区 是否按下控制键 暂停 左 右 下 上 是否退出 是否能移位 加速下落 能变形 变形 左右移位 游戏结束 Y Y Y Y Y Y N N N N N N N Y * 谢谢观看! Thanks! * * * 基于Qt的俄罗斯方块游戏开发 南京航空航天大学 作者:刘国栋 王琰 概要设计 系统概要设计概述 概要设计给出俄罗斯方块游戏的总体设计方案机构,确定系统的程序模块以及这些模块之间的关系。 * 模块划分 此次游戏设计共包括方块、窗口和运行三个模块。 * 俄罗斯方块 方块 窗口 运行 Piece模块下又分为设置方块形状和旋转两个小模块,分别用来产生7种基本图形和对图形进行旋转操作。 * 方块 设置方块形状 顺时针旋转 * 窗口 游戏区布局 窗口模块下又分为游戏布局和游戏显示两个模块,游戏区布局模块包括定义主游戏区的大小及位置等信息,游戏显示模块则定义了分数,关卡数等的显示方式。 游戏显示 * 运行 移动 旋转 消行 暂停 键盘 运行模块又包括移动、旋转、消行、暂停和键盘模块。 移动模块负责对下落中的图形进行左移、右移以及加速下落操作 旋转模块负责对下落中的图形进行旋转操作。 消行模块是对已经下落到底部的方块进行检测,如果有满行存在则将满行消去。 暂停模块的功能就是在游戏中实现暂停的功能 键盘模块就是检测游戏过程中按下的按键,并做出相应的响应。 * 游戏详细设计 1.游戏界面设计 2.方块的产生和旋转 3.方块类 * 1.游戏界面设计 游戏主窗体是整个游戏的显示部分,主要用于放置绘制好的游戏区域,显示游戏玩家的得分情况、关卡和其它基本信息。游戏区域的宽分成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) * 3.1方块移动和旋转 当方块移动到地图的左右边界处,或者落下去后,不能再继续移动或者旋转;另一种情况就是,当方块要移动的方向被其他方块挡住时,方块不能再移动或者旋转。 确定方块移动的规则后,接下来就是如何将这种规则用算法表示的问题了。比如,当方块移动的左边界处时,方块不能再继续往左移动了,这个时候,肯定有一个条件
文档评论(0)