记MFC俄罗斯方块制作过程
2009-08-21 22:24
260 查看
经过几天努力,终于做好了我的俄罗斯方块,这是我用MFC做的第一个游戏,也是第一个像样的东西。下面都是个人感受,也不知道对不对,不对的话大家不要笑我哦,希望能帮我指出错误来。
感觉做这个游戏需要先理解MFC和win32的运行机制,windows运行是靠消息的传递。我的游戏运行效果图是这样的:
具体开始制作了,首先要准备一张背景图,在视类里读取,然后在OnDraw()里显示,这样,当程序最小化恢复的时候就可以保证画面不会丢失。
做完背景,就可以正式开始制作方块的主要部分。
在这里,方块类要包括:初始化,生成新方块,方块的下落过程,向左,右,下移动,方块变形,将方块画到屏幕上,记录消除行数和等级,消除一行这些方面。
Code:
const int BLOCK_LINE = 20;//当前地图的行数
const int BLOCK_ROW = 10;//当前地图的列数
class CBlock
{
public:
CBlock(void);
~CBlock(void);
private:
// 当前方块形状
int m_BlockShape;
//下一个方块形状
int m_nextBlockShape;
//当前方块状态
int m_BlockState;
//等级
int m_BlockLevel;
//当前可消行数
int m_BlockCurDelLine;
//游戏是否在执行
bool m_blockRunning;
//当前方块位置
POINT m_BlockPos[4];
//下个方块位置
POINT m_nextBlockPos[4];
//当前的屏幕状态
//BLOCK_LINE是行数,BLOCK_ROW是列数
int m_Blockmap[BLOCK_LINE][BLOCK_ROW];
public:
// 初始化游戏
void BlockInit( void );
private:
// 记录方块图形
CBitmap m_bmpBlock[7];
public:
//创建一个新的方块出来,这里只给方块形状赋值
void CreateNewBlock(void);
private:
//这里给方块位置赋值,
//shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组
//xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差
void MakeNewBlock(int shape, POINT pt[], int xPos);
public:
//将方块画在对应的DC上
void DrawBlock(CDC* pDC);
//方块的下落过程,主要部分
void BlockDropDown(CDC* pDC);
private:
// 隐藏方块
void HideBlock(CDC* pDC);
// 背景图片变量
CBitmap m_bmpBKGND;
public:
// 画下个方块的框框
void DrawNextBlock( CDC* pDC );
//方块左移
void BlockLeft(CDC* pDC);
//方块右移
void BlockRight(CDC* pDC);
//方块下移
void BlockFastDown(CDC* pDC);
//方块变形
void ChangeState(CDC* pDC);
// 消除一行
//pDC是传入的DC
//LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19)
//start是 游戏是否是要把消除行以上的都置0,我是用在OnDraw()里,用来重画屏幕的,
void DeleteLine(CDC* pDC, int LineNum, bool start);
// 游戏是否结束,true=结束了
bool BlockGameOver(void);
// 计分板
//del是决定是否是已消一行的
void BlockScore(int del, CDC* pDC);
//返回是否升级了,true=升级了
bool BlockLevelUp(void);
//返回下落速度
int BlockSpeed(void);
};
这里我采用了二维数组int m_Blockmap[20][10];记录游戏区。
在初始化后,就要生成新方块,采用随机数的方法。方块是通过坐标位置记录的,POINT m_BlockPos[4];
游戏是写在定时器里的,通过等级不同使下落时间也不同,游戏的主要过程是方块的下落过程。在这里首先判断是否已经结束,结束了则结束计时器,否则判断是否能下落,不能下落则判断是否能消除一行。这些都完成后则生成新方块,重新下落。
在KEY_DOWN事件中加入左移,右移,下移,变形的函数,就可以实现游戏了。
其他的功能就是自己随便添加的暂停,开始这样的了。那些就不写了。
游戏可执行程序下载地址:http://download.csdn.net/source/1595231
游戏源代码下载地址:http://download.csdn.net/source/1595110
点击这里加我为好友:http://student.csdn.net/invite.php?u=110891&c=3fdff026fca470b3
感觉做这个游戏需要先理解MFC和win32的运行机制,windows运行是靠消息的传递。我的游戏运行效果图是这样的:
具体开始制作了,首先要准备一张背景图,在视类里读取,然后在OnDraw()里显示,这样,当程序最小化恢复的时候就可以保证画面不会丢失。
做完背景,就可以正式开始制作方块的主要部分。
在这里,方块类要包括:初始化,生成新方块,方块的下落过程,向左,右,下移动,方块变形,将方块画到屏幕上,记录消除行数和等级,消除一行这些方面。
Code:
const int BLOCK_LINE = 20;//当前地图的行数
const int BLOCK_ROW = 10;//当前地图的列数
class CBlock
{
public:
CBlock(void);
~CBlock(void);
private:
// 当前方块形状
int m_BlockShape;
//下一个方块形状
int m_nextBlockShape;
//当前方块状态
int m_BlockState;
//等级
int m_BlockLevel;
//当前可消行数
int m_BlockCurDelLine;
//游戏是否在执行
bool m_blockRunning;
//当前方块位置
POINT m_BlockPos[4];
//下个方块位置
POINT m_nextBlockPos[4];
//当前的屏幕状态
//BLOCK_LINE是行数,BLOCK_ROW是列数
int m_Blockmap[BLOCK_LINE][BLOCK_ROW];
public:
// 初始化游戏
void BlockInit( void );
private:
// 记录方块图形
CBitmap m_bmpBlock[7];
public:
//创建一个新的方块出来,这里只给方块形状赋值
void CreateNewBlock(void);
private:
//这里给方块位置赋值,
//shape是形状, pt[]是用来接收方块坐标的(方块形状的排列坐标)数组
//xPos是偏移量,就是方块显示位置和方块显示的框的最左边的差
void MakeNewBlock(int shape, POINT pt[], int xPos);
public:
//将方块画在对应的DC上
void DrawBlock(CDC* pDC);
//方块的下落过程,主要部分
void BlockDropDown(CDC* pDC);
private:
// 隐藏方块
void HideBlock(CDC* pDC);
// 背景图片变量
CBitmap m_bmpBKGND;
public:
// 画下个方块的框框
void DrawNextBlock( CDC* pDC );
//方块左移
void BlockLeft(CDC* pDC);
//方块右移
void BlockRight(CDC* pDC);
//方块下移
void BlockFastDown(CDC* pDC);
//方块变形
void ChangeState(CDC* pDC);
// 消除一行
//pDC是传入的DC
//LineNum是消除的行从第几行开始(我这里是最上面为0,最下面为19)
//start是 游戏是否是要把消除行以上的都置0,我是用在OnDraw()里,用来重画屏幕的,
void DeleteLine(CDC* pDC, int LineNum, bool start);
// 游戏是否结束,true=结束了
bool BlockGameOver(void);
// 计分板
//del是决定是否是已消一行的
void BlockScore(int del, CDC* pDC);
//返回是否升级了,true=升级了
bool BlockLevelUp(void);
//返回下落速度
int BlockSpeed(void);
};
这里我采用了二维数组int m_Blockmap[20][10];记录游戏区。
在初始化后,就要生成新方块,采用随机数的方法。方块是通过坐标位置记录的,POINT m_BlockPos[4];
游戏是写在定时器里的,通过等级不同使下落时间也不同,游戏的主要过程是方块的下落过程。在这里首先判断是否已经结束,结束了则结束计时器,否则判断是否能下落,不能下落则判断是否能消除一行。这些都完成后则生成新方块,重新下落。
在KEY_DOWN事件中加入左移,右移,下移,变形的函数,就可以实现游戏了。
其他的功能就是自己随便添加的暂停,开始这样的了。那些就不写了。
游戏可执行程序下载地址:http://download.csdn.net/source/1595231
游戏源代码下载地址:http://download.csdn.net/source/1595110
点击这里加我为好友:http://student.csdn.net/invite.php?u=110891&c=3fdff026fca470b3
相关文章推荐
- 实例【GPA计算器】的制作过程之MFC初体验收获
- vs2010MFC D3D播放YUV格式视频详细制作全过程
- vs2010MFC D3D播放YUV格式视频详细制作全过程
- MFC制作俄罗斯方块
- Vs2010 MFC 简单制作过程中的问题
- MFC学习之 ico图片制作 imagelist 并制作三态按钮
- wpf日历控件制作过程分析(全)[转]
- ios 静态库制作过程
- 嵌入式Linux教程根文件系统Ramdisk的制作过程
- VS中MFC执行过程
- MFC程序启动过程(VS 2005代码剖析)
- 制作网页过程中经常要用到的代码
- MFC程序的启动过程——先全局对象theApp(第一入口),后WinMain(真正入口),会引爆pApp->InitInstance从而创建窗口(程序员入口)
- 学习MFC过程中的错误及解决方法
- 平衡车 制作过程 (持续更新)
- Windows 7 镜像制作过程 推荐
- MFC--程序执行过程
- RHCE之本地源制作、HTTP发布镜像用于KVM的VM新安装过程 推荐
- 制作U盘启动盘,用U盘安装windows7全过程
- MFC制作选择文件夹对话框以及通过固定分隔符解析文件名(字符串)