第12章 综合项目—俄罗斯方块_ 教学PPT_190904ppt课件.pptx
《第12章 综合项目—俄罗斯方块_ 教学PPT_190904ppt课件.pptx》由会员分享,可在线阅读,更多相关《第12章 综合项目—俄罗斯方块_ 教学PPT_190904ppt课件.pptx(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第12章 综合项目俄罗斯方块_ 教学PPT_190904 第第12章章 综合项目综合项目俄罗斯方块俄罗斯方块 项目分析 项目实现 程序调试 项目心得 12.1.1 项目需求分析俄罗斯方块是一款经典的游戏,在游戏过程中可通过不同的方向键控制俄罗斯方块使其变形、移动、加速下落等。当不同形状的俄罗斯方块堆满一行就将该行消除,获得分数。如果俄罗斯方块垂直堆满游戏屏幕,则游戏结束。 12.1.1 项目需求分析本教材在实现俄罗斯方块时,需要实现以下需求:(1)游戏开始时,显示上次游戏得分,在此基础上按任意键开始游戏。(2)在玩游戏时,俄罗斯方块有7种基础形状,如下图。 12.1.1 项目需求分析(3)在玩
2、游戏时,使用左右方向键控制俄罗斯方块的移动,使用下方向键加速俄罗斯方块下落,使用上方向键控制俄罗斯方块旋转,使用空格键控制游戏暂停与继续,使用【Esc】键退出游戏。(4)绘制游戏场景,玩游戏时,俄罗斯方块显示在右侧,左侧显示游戏说明,游戏说明包括俄罗斯方块预览、按键说明、游戏得分等 12.1.1 项目需求分析 12.1.1 项目需求分析(4)玩游戏时,俄罗斯方块堆满一行就消除该行,消除一行可得100分。(5)游戏过程中,如果俄罗斯方块垂直堆满屏幕,则结束本次游戏,并根据用户输入(y或n)决定是否重新开始游戏。(6)游戏结束时,将游戏得分存储到文件中,以供实时查询。 12.1.1 项目需求分析
3、12.1.1 项目需求分析本项目可划分为4个功能模块:窗口构建模块、俄罗斯方块生成模块、游戏规则制定模块、分数保存查看模块。 12.1.1 项目需求分析 12.1.1 项目需求分析1、窗口构建模块在窗口构建模块中,调用Windows API中定义的结构体和函数构建坐标体系,在坐标体系中移动光标、隐藏光标。同时,在坐标系中绘制游戏场景,设置游戏边界,划分游戏区域与游戏说明区域。 12.1.1 项目需求分析2、俄罗斯方块生成模块俄罗斯方块生成模块主要功能包括在指定的位置输出方块或空格、构画俄罗斯方块7种形状及21种旋转状态,随机生成俄罗斯方块。 12.1.1 项目需求分析3、游戏规则制定模块游戏规
4、则制定模块定义了程序需要的宏、变量与数据类型。同时,该模块还制定了游戏规则,在俄罗斯方块下落过程中进行碰撞检测,如果俄罗斯方块堆满一行就消行积分。如果俄罗斯方块堆积到顶部就结束本次游戏,根据用户输入(y或n)决定是否重新开始游戏。同时,在游戏执行过程中,程序可接受键盘输入,通过判断输入的按键执行不同的操作,如左移、右移、游戏暂停等。 12.1.1 项目需求分析4、分数保存查看模块分数保存查看模块功能主要是将游戏得分保存到外部文件中,以供实时查询。 12.1.2 项目设计数据设计项目设计 12.1.2 项目设计(1)窗口构建模块窗口构建模块主要是调用Windows API构建坐标体系,实现光标的
5、移动与隐藏,并且在坐标体系中搭建游戏场景。在坐标系中划分游戏场景,需要定义两个宏标识坐标系的水平方向游戏范围与垂直方向游戏范围。#define COORD_X 30/定义水平方向的游戏范围#define COORD_Y 29/定义垂直方向的游戏范围 12.1.2 项目设计(2)俄罗斯方块生成模块一个俄罗斯方块由4个小方块组成,这四个小方块用一个44矩阵(二维数组)存储。俄罗斯方块的基础形状有7种,可以使用一个大小为7的一维数组存储这个7个基础俄罗斯方块,即一维数组中每个元素是一个二维数组。但是,每个俄罗斯方块有3个旋转方向,即有3个变形状态,一维数组无法满足其旋转要求,因此可以使用一个74的二
6、维数组存储俄罗斯方块。 12.1.2 项目设计74矩阵,存储7种开头的俄罗斯方块及其旋转状态。 12.1.2 项目设计typedef struct Tetris/定义struct Tetris结构体类型int diamonds44;/diamonds二维数组,4*4矩阵TETRIS;TETRIS tetris74;/74结构体二维数组 12.1.2 项目设计定义一个二维数组blockages,该数组要足够大,覆盖整个游戏区域。根据坐标,将空格、墙壁、小方块存储到blockages二维数组中。用于计算俄罗斯方块是否堆满一行,并根据blockages数组元素状态,完成旋转、碰撞检测等。int bl
7、ockagesCOORD_YCOORD_X + 10; 12.1.2 项目设计 12.1.2 项目设计由于blockages二维数组存储了空格、小方块、墙壁,因此需要定义空格、小方块、墙壁的宏定义。#define WALL 2/墙壁#define BLOCK 1/小方块#define BLANK 0/空格 12.1.2 项目设计(3)游戏规则制定模块游戏规则制定模块主要制定游戏规则,如开始游戏、碰撞检测、消行积分、结束游戏等。游戏过程中需要通过各种按键完成游戏状态的切换,因此需要定义宏表示按键。#define SPACE 32 /空格键#define UP 72 /上方向键#define LE
8、FT 75 /左方向键#define RIGHT 77 /右方向键#define DOWN 80 /下方向键#define ESC 27 /退出键 12.1.2 项目设计除此之外,游戏规则制定模块还需要定义一些变量,如分数、随机数等,该模块定义的变量如下所示:int score = 0;/游戏分数int ranNum = 0;/随机数int pause = 0;/pause变量控制游戏状态,0为执行游戏,1为暂停游戏 12.1.2 项目设计(4)分数保存查看模块分数保存查看模块只是在游戏结束时将分数保存到外部文件中,当下次执行程序时,程序会读取文件显示上次游戏得分。该模块需要引用游戏模块中定义
9、的score变量,使用extern关键字引入该变量即可。 12.1.2 项目设计(1)窗口构建模块窗口构建模块需要实现的功能是在构建的坐标系中移动光标、隐藏光标,并且绘制游戏场景。该模块需要实现的功能函数如下表。函数声明功能描述void movePos(int x, int y);移动光标,并隐藏光标void drawScene();绘制游戏场景 12.1.2 项目设计(2)俄罗斯方块生成模块俄罗斯方块生成模块主要是在指定位置输出小方块或空格,随机生成俄罗斯方块,该模块要实现的功能函数如下表。函数声明功能描述void generateTetris();生成俄罗斯方块void printBloc
10、k(int base, int roCon, int x, int y);输出小方块void printBlank(int base, int roCon, int x, int y);输出空格 12.1.2 项目设计(3)游戏规则制定模块游戏规则制定模块完成游戏规则的制定,包括开始游戏方式、碰撞检测规则、消行积分规则、退出游戏方式等。该模块要实现的功能函数如下表。函数声明功能描述void startGame();开始游戏bool collision(int n, int rotate, int x, int y);碰撞检测int eliminate();消行积分void gameOver()
11、;结束游戏 12.1.2 项目设计(4)分数保存查看模块分数保存查看模块要实现的功能为保存游戏得分到外部文件,供下次游戏开始时查询使用。该模块要实现的功能函数如下表。函数声明功能描述void lastScore();读取文件,显示上一次游戏得分void saveInfo();将游戏得分保存到外部文件 12.2.1 窗口构建模块的实现窗口构建模块主要是通过Windows API中定义的控制台坐标系建立游戏窗口,获取移动坐标点的值并隐藏控制台中的光标。该模块主要实现两个函数:movePos()函数和drawScene()函数。 12.2.1 窗口构建模块的实现(1)movePos()函数moveP
12、os()函数的作用是将光标移动到指定坐标处,并隐藏光标。(2)drawScene()函数drawScene()函数的功能是绘制游戏场景 12.2.2 俄罗斯方块生成模块的实现俄罗斯方块生成模块主要是在指定的位置输出方块或空格、构画俄罗斯方块7种形状及21种旋转状态,随机生成俄罗斯方块。该模块主要实现三个函数:generateTetris()函数、printBlank()和printBlock()函数。 12.2.2 俄罗斯方块生成模块的实现generateTetris():随机生成俄罗斯方块。构画俄罗斯方块的7个基础形状及21个变形状态。printfBlank():功能是在指定位置输出空格。p
13、rintfBlock():功能是在指定位置输出小方块。 12.2.3 游戏规则制定模块的实现游戏规则制定模块主要是制定游戏规则,如碰撞检测、消行积分、俄罗斯方块的移动、游戏暂停继续等。该模块需要实现4个函数:startGame()函数、collision()函数、eliminate()函数和eliminate()函数。 12.2.3 游戏规则制定模块的实现startGame():用于启动游戏。collision():功能是完成碰撞检测。该函数通过for循环嵌套遍历tetrisnrotate.diamonds数组,如果该数组tetrisnrotate.diamondsij位置存储了小方块,并且b
14、lockagesx+iy+j位置存储了墙壁或小方块,则表示俄罗斯方块与其他物体(墙壁或小方块)发生了碰撞,返回1;如果for循环嵌套结束,函数调用还未返回,表示没有碰撞,返回0。 12.2.3 游戏规则制定模块的实现eliminate():用于消行积分,该函数主要是将blockages二维数组的每行元素值相加,判断其结果是否达到19(左右两边墙壁水平坐标差值),以此确定该行是否是完整一行小方块,如果是完整一行小方块,则消除该行,得分100。gameOver():功能是结束本次游戏。 12.2.4 分数保存查看模块的实现分数保存查看模块的功能主要是将游戏得分保存到外部文件,当游戏开始时,会读取文
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第12章 综合项目俄罗斯方块_ 教学PPT_190904ppt课件 12 综合 项目 俄罗斯方块 教学 PPT_190904ppt 课件
限制150内