用VC++mfc实现俄罗斯方块的程序详解

课 程 设 计

课程名称: 程 序 设 计 课题名称: 俄罗斯方块游戏的设计 班 级: 计算机学院09-1BJ班 完成人: 曾灵芝(14092400558) 指导教师: 甘靖

湖南理工学院计算机学院

2011年4月14日

用VC++实现俄罗斯方块的程序设计

一、课程设计的目的与要求

1.1课程设计的目的

综合运用所学知识,熟练掌握VC++程序设计的编码与MFC框架结构 。

1.2课程设计的要求

要求用VC++设计与实现俄罗斯方块游戏。要求包括系统的需求分析;系统总框图及每个模块的设计分析;MFC应用程序架构;框架的扩展;算法的设计与实现;游戏的内部实现;游戏区域绘图的实现;系统存在的问题及错误处理;列出所有定义的函数及说明;附上程序源代码。

二、设计正文

2.1需求分析

2.1.1 游戏需求

随机给出不同的形状(长条形、Z字形、反Z形、田字形、7字形、反7形、T字

型)下落填充给定的区域,若填满一条便消掉,记分,当达到一定的分数时,过关,

设置六关,每关方块下落的速度不同,若在游戏中各形状填满了给定区域,为输者。游戏功能要求如下: 2.2.2游戏界面需求:

良好的用户界面,有关数显示和分数显示。让方块在一定的区域内运动和变形,该区域用一种颜色表明,既用一种颜色作为背景,最好设为黑色。还需用另一种颜色把黑色围起来,宽度适中,要实现美感。 2.1.3游戏形状(方块)需求:

良好的方块形状设计,绘制七种常见的基本图形(长条形、Z字形、反Z形、田字形、7字形、反7形、T字型),各个方块要能实现它的变形,可设为顺时针或逆 时针变形,一般为逆时针。

2.2算法分析

2.2.1程序流程图

开始

游戏结束处理

结束

到达底部, 游戏结束 销行操作 到达底部将旧的“下一个下坠物”用作当前 下坠物 将新生的下坠物代替旧的“下一 个下坠物“ 生成下一个下坠物 下降一个单位 销行操作 到达底部1.Main() 2.Rectview() 13.GameEnd() 游戏结束 6.invalidatecurrent() 重新游戏 3.Gamestart()?? 游戏开始 4.DrawGame () 刷新 5.RectDown() 达到指定位置 10.IsBottom() 否 按键 11.KeyDown() 按向上键 显示屏幕信息 图2.2.3 程序运行调用图

7.OnTimer() 下一个图行 8.GamePaush() 9.OnDraw() 达到指定位置 12.RectChang e() 2.2.2定义方块的数据结构

对于方块在某一瞬间的位置标识,我们采用一个4×2的小数组标识出来,即用4个存储单位空间存储当前下坠物的每一子块的位置,也就是说,用4个存储单位空间存储当前下坠物的每一子块的位置来对整个下坠物件的位置进行标识,而每个存储空间的大小就是一个典的坐标值(x,y),而每个方块按照从左到右的方式进行编号,并且在编号过程中对于同一列的方块0 1 2 3 (x0,y0) (x1,y1) (x2,y2) (x3,y3) (x0,y0) (x1,y1) (x2,y2) (x3,y3) 实行从上到下进行编号

[2]

2 3 0 1

图3.1 方块编号

ActiveStatus[0][0]和ActiveStatus[0][1]则是第0号方块的横坐标x和纵坐标y ;ActiveStatus[2][0]和ActiveStatus[2][1]则是第2号方块的横坐标x和纵坐标y。

2.2.3 游戏设计分析

有前面的功能描述可知,我先虚拟出俄罗斯方块游戏的类对象,并抽象出核心的数据属性和操作方法等,然后再作细化,最后将整个虚拟类的外壳脱掉,再移植到视图类中去,其实现如下:

CRectGameView : public CView {

//内部存取数据结构

int m_stateMap[MAX_ROW][MAX_COL]; //初始化操作

GameInitnal(); //游戏的初始化

//用于判断数据相关状态的操作

IsLeftLimit(); //下坠物件是否可向左移动 IsRightLitmit(); //

IsBottom(); //是否已经到达了底部 IsGameEnd(); //是否游戏已经结束 //方块物件下坠过程中的操作 RectChange(); //下坠物件变形 RectDown(); //下坠物件正常下落

RectArrow(); //下坠物件方向移动(左,右,下加速) //状态控制操作

GameStart(); //游戏开始 GamePause(); //游戏暂停 GameEnd(); //游戏结束 }

通过上面的代码可以看出,在虚拟类中抽象出了核心的内部数据和一些基本的操作函数。对于操作函数,可以把它们分为内部实现的基本核心操作(如判断操作)以及明显提供给外部使用的整体模块外部操作(如状态控制操作)。而内部的基本操作又可以分为判断操作和执行操作这样两种类型[3]。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4