俄罗斯方块Word文档格式.docx
《俄罗斯方块Word文档格式.docx》由会员分享,可在线阅读,更多相关《俄罗斯方块Word文档格式.docx(55页珍藏版)》请在冰豆网上搜索。
在MDI中,CMainFrame对象是在应用程序类的InitInstance中被创建,而视图则被包含在CChildFrame对象中。
单文档(SDI)应用程序在一个主框架上只有一个子框架窗口,多文档(MDI)应用程序在一个主框架上可以有多个子框架窗口。
、
●MFC的CView类是所有视图类的基类,主要有两大功能:
1)将与其相关联文档的数据呈现给用户。
2)接受用户对数据的修改,并反馈给文档。
●本实例将要介绍如何利用MFC单文档应用程序框架如何实现俄罗斯方块游戏,游戏界面如下图:
打开VS2005,建立MFC单文档应用程序,实例的项目名称为“Rect”,框架会自动生成4个类。
CRectApp类:
应用程序类,由CWinApp派生而来,负责初始化应用程序的工作,包括创建文档模板。
CMainFrame类:
框架类,负责应用程序框架,包括菜单、工具条等框架资源的加载或创建。
CRectDoc类:
文档类,由CDocument派生而来,主要负责数据的管理与存储、与视图交互等。
CRectView类:
视图类,由CView派生而来,主要负责数据的显示和与用户交互。
●俄罗斯方块游戏截图:
阶段二:
游戏界面的实现
●添加菜单项
选择项目工作区的资源视图,展开menu资源文件夹,双击菜单资源IDR_MAINFRAME,打开菜单编辑器,设计游戏、选项、帮助三个菜单,并分别给它们添加子菜单,具体如下图所示:
(一)
菜单项属性
主菜单
菜单项
ID
提示
游戏(&
G)
&
S.开始游戏
IDM_GAME_START
游戏开始
P.暂停游戏
IDM_GAME_PAUSE
游戏暂停
E.游戏结束
IDM_GAME_END
游戏结束
X.退出游戏
IDM_GAME_EXIT
退出游戏
(二)
选项(&
O)
I.游戏级别
第一级:
初级
IDM_OPTION_LEVEL1
初级:
低速
第二级:
中级
IDM_OPTION_LEVEL2
中级:
中速
第三级:
高级
IDM_OPTION_LEVEL3
高级:
高速
M.音乐
IDM_OPTION_MUSIC
播放音乐
(三)
帮助(&
H)
H.帮助
IDM_HELP_HELP
游戏帮助
A.关于俄罗斯方块
IDM_HELP_ABOUT
关于
阶段三:
游戏控制的实现
●添加成员变量及定义成员函数
选择项目工作区中的类视图,右击CRectView,光标移至添加,分别添加成员变量及成员函数,如下图所示:
成员变量
成员变量名
数据类型
属性
说明
m_nWidth
int
protected
游戏窗口的宽度
m_nHeight
游戏窗口的高度
m_iCol
列的数量
m_iRow
行的数量
m_iLevel
当前游戏级别
m_iLarge
格子大小
m_iBlockSytle
方块显示样式
m_iStartX
游戏区域左上角的坐标
m_iStartY
InterFace[74][4]
接触面二维数组
m_currentRect
当前的方块形状
m_isBottom
bool
标识方块是否已到底
GameStatus[100][100]
标志方块状态的数组
ActiveStatus[4][2]
当前方块的动态位置
NextStatus[4][2]
下一次要出来的方块的模样的数组
m_bGamePause;
标识游戏是否暂停
m_strLevel
CString
当前游戏级别和信息提示字符串
m_icurrentStatus
当前的样式
m_inextStatus
下一个将会出现的样式
m_pBlackPen
CPen*
画笔指针
m_pGrayBrush
CBrush*
画刷指针
m_pBlackBrush
m_bDrawGrid
标识是否画网格线
m_bMusic
标识是否插放背景音乐
m_iPerformance
游戏总成绩
m_bGameEnd
标识游戏是否已结束
m_memDC
CDC
内存设备环境
m_memBmp
CBitmap
内存位图
m_memRectDC
方块内存设备环境
m_hMemRectBmp
HBITMAP
方块内存位图句柄
m_bFistPlay
标识是否是第一次开始游戏
成员函数
成员函数名
函数功能
voidRectChange()
方块变形
boolIsLeftLimit()
下坠物件是否可向左移动
boolIsRightLitmit()
下坠物件是否可向右移动
voidIsBottom()
判断当前方块是否到底
voidRectDown()
当前方块下降
voidRectArrow(intm_Type)
当前方块加速
voidRectStatusToActiveStatus(intm_which)
映射出当前激活状态下的下坠物形态
voidRectStatusToNextStatus(intm_which)
映射出下一下坠物的形态
VoidctiveStatusToGameStatus()
将当前的状态映射到地图游戏区域
intRandom(intMaxNumber)
产生一个随机数
voidStopMid()
关闭背景音乐
voidPlayMid()
播放背景音乐
voidCurrentLevel()
获取当前级别信息
voidInvalidateCurrent()
刷新指定的区域
voidDcEnvInitial(void)
初始化绘图的设备环境
voidDCEnvClear(void)
释放绘图设备环境
voidDrawGame(CDC*pDC)
绘制游戏画面
●CRectView.h中在定义如下宏:
//白色、黑色、蓝色RGB宏
#defineWHITERGB(255,255,255)
#defineBLACKRGB(0,0,0)
#defineBLUERGB(0,0,255)
//游戏级别
#defineLEVEL11//初级
#defineLEVEL22//中级
#defineLEVEL33//高级
//中断操作的运动趋势
#defineLEFT0//向左移动
#defineRIGHT1//向右移动
#defineUP2//向上(变形)
#defineDOWN3//向下移动(加速)
//地图状态
#defineMAP_STATE_EMPTY0//空(未被占据)
#defineMAP_STATE_NOT_EMPTY1//被占据
●在CRectView.cpp中依次为CRectView类成员函数添加源代码
/**********************
*
*构造函数
**********************/
CRectView:
:
CRectView()
{
//第一次开始游戏
m_bFistPlay=TRUE;
//缺省为不是游戏暂停状态
m_bGamePaush=FALSE;
//缺省为不插放背景音乐
m_bMusic=FALSE;
//缺省为画网格线
m_bDrawGrid=TRUE;
//总分值清零
m_iPerformance=0;
//为行,列
m_iRow=12;
m_iCol=10;
//游戏格子和每个方块为*30像素
m_iLarge=30;
//左上角X,Y坐标
m_iStartX=10;
m_iStartY=10;
//缺省级别为级
m_iLevel=LEVEL1;
//第一种样式
m_iBlockSytle=0;