您的位置:首页 > 其它

记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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: