青岛理工大学琴岛学院
设 计 报 告
课
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
名称:俄罗斯方块
学 院:青岛理工大学琴岛学院
专业班级:计算机应用技术10-2
学 号:20100311028
学 生:马书航
指导教师:张秀国
青岛理工大学琴岛学院教务处
2011年7月1日
学 生
马书航
指导教师
张秀国
课题名称
俄罗斯方块
设计时间
2011年7月1日
设计地点
8教212
设计目的
增加对C++和MFC的认识,锻炼自己的动手能力、查询资料的能力和独立思考的能力。学习怎样用MFC开发一个完整的程序。
指导教师评语
系部教研室
意 见
一.
确定题目:
本次游戏设计确定为俄罗斯方块游戏的开发。以对话框为基础进行游戏主界面的设计。主要是想通过此次游戏的开发,加深对对话框游戏编写的了解,对游戏界面的控制,以及键盘对程序控制的练习。设计流程图如下
二. 需求
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
俄罗斯方块是一款非常简单的小游戏,对于练习游戏开发是很好的选择之一。现在的俄罗斯方块可以用多种编程语言,多种编程工具来实现,这里选择用C++在VC++6.0的环境下进行开发。主要是因为C++语言中的面向对象思想非常适合开发此类游戏,并且MFC提供了很好的面向对象环境。
三. 界面设计
本游戏是基于对话框的程序开发,开始的时候删除新建对话框中已有的控件。游戏的控制按钮包括开始新游戏、暂停、停止游戏、难度设置、操作说明、关于作者7个按钮,采用Button控件,并为每个按钮创建相应的响应函数,其基类定为主对话框类即CElsfkDlg,打开游戏的时候每个按钮都是可以按下的。按下难度设置、操作说明、关于作者按钮后,会有相应的对话框弹出,如按下难度设置按钮后会弹出对话框,如图1:
图1-难度设置对话框
游戏界面的左上方设置当前得分与当前级别的显示,采用Group Box和Static Text和两种控件,Group Box控件用来显示静态文本所表示的内容,Static Text控件用来接受与显示具体的分数与等级。
按钮ID号和静态文本ID号与其对应的功能如表1:
ID号
显示
对应功能
ID_START
开始新游戏
单击开始游戏,大地图中出现下落方块
ID_TIMEOUT
暂停
单击暂停游戏
ID_STOP
停止游戏
停止游戏
ID_SETTING
难度设置
单击出现难度设置对话框,可选择游戏难度
ID_GAMEHELP
操作说明
单击出现操作说明对话框,内有游戏规则
ID_ABOUT
关于作者
单击出现对话框,内有作者信息
ID_EXIT
退出游戏
单击后关闭游戏
IDC_SCORE
当前得分
显示当前游戏得分
IDC_LEVE
当前等级
显示当前游戏等级
表1-ID号的说明
游戏大地图和方块预览地图通过程序生成,此大地图左上角坐标相在主对话框中的坐标为(2+35,88),其横长为20*(WIDTH-2),纵长为20*(HEIGHT-1)。(WIDTH和HEIGHT分别为事先定义好的大地图的横长和纵长)详情见后面的具体设置。此时的游戏界面中并没有具体的游戏区域。界面见图2:
图2-设计初始界面
四. 功能划分
1.开始新游戏按钮。点击开始新游戏按钮后游戏开始运行。大地图上方开始下落方块,预览区域开显示下一个将要下落的方块的形状与颜色。计时器1开始工作,同时难度设置按钮被禁用,防止在游戏进行中改变游戏等级。
2.暂停。点击暂停按钮后,下落的方块停止在当前位置,不再下落。且点击暂停后,暂停按钮上的字变成“继续”,如果想继续游戏的话,点击新出现的“继续”按钮,继续按钮重新变成暂停按钮,方块继续下落。
3.停止游戏按钮。点击此按钮后,游戏画面静止,停止了游戏。“继续”与“停止”按钮被禁用。此后点击开始新游戏按钮后可以开始一个新的游戏。
4.难度设置按钮。点击难度设置按钮后会弹出一个对话框,要求输入开始新游戏的等级,数值范围为1到7。
5.操作说明按钮。点击操作说明按钮,弹出操作说明对话框,其中用静态文本显示游戏的操作说明。
6.关于作者按钮。点击按钮后,弹出作者信息。
7.退出游戏按钮。点击退出游戏按钮后,调用DestroyWindow()函数,销毁对话框,结束游戏。
8.键盘方向键。开始游戏后,在非暂停状态下,按下左按键,如果方块可以向左移动,正在下落的方块向左移动,一次移动一格,按下右按键,如果方块可以向右移动,正在下落的方块向右移动,一次移动一格。 按上方向键,如果方块可以变形,则按顺时针方向变形。按下方向键,下落的方块加速下降,松开后,下落方块恢复到原来的速度。
五. 主要类及成员变量、数据成员的说明
类名
类说明
CPiece
方块的基类,内定义1个5*5三维数组
CLongPiece
Cpiece的派生类,表示长条形方块
CLShapPiece
Cpiece的派生类,表示L形方块
COLShapPiece
Cpiece的派生类,表示反L形方块
COZShapPiece
Cpiece的派生类,表示反Z形方块
CZShapPiece
Cpiece的派生类,表示Z形方块
CPShapPiece
Cpiece的派生类,表示T形方块
CSquarePiece
Cpiece的派生类,表示田字形方块
CHELP
操作说明对话框对应类
CSETTING
难度设置对话框对应类
CABOUT
关于作者对话框对应类
CElsfkDlg
主对话框类
表2-主要类的说明
成员函数或数据成员名
说明
DrawNextPiece(CDC*pDC)
绘制预览界面
DrawBitMap(CDC *pDc)
画出游戏大地图界面
NewPiece()
产生一个新的方块
MoveLeft()
使下落方块左移一格
MoveRight()
使下落方块右移一格
Rotate()
使当前下落方块按顺时针旋转一个方向
CanMoveLeft()
判断当前下落方块能否左移
CanMoveRight()
判断当前下落方块能否右移
CanRotate()
判断当前下落方块能否旋转
CanDown()
判断当前方块能否下落
IsGameOver()
判断游戏是否结束
FillBigMap()
当方块不能下落时填充游戏主界面区域
ClearBigMap()
设置游戏主界面数据为0
void ClearLine()
消除满行
CopyPiece(int a[4][5][5],int b[4][5][5])
将方块a中的数据复制到方块b
m_yPos
当前下落方块在游戏主界面中的相对位置
m_xPos
当前下落方块在游戏主界面中的相对位置
m_directionForCur
当前方块的旋转方向
m_directionForNext
下一个方块的旋转方向
m_clrBottomRight
正方形小方块边框颜色
m_clrTopLeft
正方形小方块边框颜色
m_clrNextPiece
下一个方块颜色
m_clrCurPiece
当前下落方块的的颜色
m_clrBigMap[HEIGHT][WIDTH]
储存游戏主界面每格正方形小块的颜色值
NextPiece[DIRECTION][Y_COUNT][X_COUNT]
在预览界面显示的下一个方块
CurPiece[DIRECTION][Y_COUNT][X_COUNT]
在游戏主界面当前下落的方块
BigMap[HEIGHT][WIDTH]
表示游戏主界面数据的二维数组
m_longPiece
创建长条形方块的对象
m_lshapePiece
创建L形方块的对象
m_olshapePiece
创建反L形方块的对象
m_zshapePiece
创建Z形方块的对象
m_ozshapePiece
创建反Z形方块的对象
m_squarePiece
创建田字形方块的对象
m_pshapePiece
创建T形方块的对象
m_downPos
当前方块不能再下落的相对位置
m_bTimeOutFlag
游戏暂停标志
m_IsGameOver
游戏结束标志
m_nGameOverLine
游戏结束时动态填充游戏主界面的行
m_speedOfLevel
游戏级别对应的计时器响应时间(ms)
m_levelFlag,m_level
游戏开始前设置的级别
m_preSpeed
保存未按下加速键时的计时器响应时间
m_seed
随机种子
m_score
分数
set_oo
创建一个设置对话框的对象
表3-主对话框类CElsfkDlg中数据成员成员函数的说明
六. 详细设计
1.用MFC AppWizard创建一个基于对话框的应用程序,在复选对话框的Minimize box。
使得主对话框的大小不能改变。同时删除对话框里原来附带的一个静态文本控件和一个开始按钮,一个取消按钮。
2.创建方块类。将每一种方块用一个三维数组来表示,首先定义一个基类Piece,在其中定义一个三维数组,int PieceMap[DIRECTION][Y_COUNT][X_COUNT],并对其进行初始化,第一个参数表示此时方块的旋转方向,第二个参数第三个参数表示小区域中各个基础方块的相对位置,定义一个5*5的区域,初始值全为0。数组值为1时,表示该区域有方块,否则没有。具体代码如下:
#define DIRECTION 4
#define X_COUNT 5
#define Y_COUNT 5
CPiece::CPiece()//构造函数
{
for(int d=0;d
本文档为【俄罗斯方块设计报告】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。