VC 6.0 面向对象的俄罗斯方块尝试(部分注释)(5)
protected:
//游戏的底盘。
CBoard m_board;
//当前的形状。
CShape m_currentShape;
//下一个形状。
CShape m_nextShape;
//当前形状是否存在。
bool m_hasShape;
//当前得分。
int m_score;
//当前游戏状态。
int m_status;
protected:
//这里都些私有的函数,都是被上面的公共函数所使用的。
//初始化当前下落快的位置。
void InitShapePos();
//尝试将出界的形状拽进界内,返回是否成功。
bool DragInRange();
//使当前形状下落一格,如果已经到底了就与底盘结合。
void ShapeDown();
//用下一个形状作为当前形状,并重新产生随机的下一个形状。
bool NextShape();
//获取形状shape的信息返回一个ShapeInfo结构。
ShapeInfo GetShapeInfo(const CShape &shape) const;
};
最后是ShapeInfo,这个结构表示一个形状的信息。
struct ShapeInfo
{
//这个布尔型值表示该数据结构是否有效,在一些函数返回一个ShapeInfo的时候如果这个值是false则表示此时不存在这个形状。
bool isValidated;
//type是这个形状的类型ID,对应俄罗斯方块中的7种形状,取值0~6。
int type;
//每个形状一定是由四个小方块构成,下面这个POINT[]型的blocks数组里面存储了四个小方块各自的坐标。
POINT blocks[4];
//构造。
ShapeInfo()
{
isValidated = false;
type = 0;
}
};
现在有了这些类之后,只需要套到MFC的界面框架里,然后编写键盘事件及绘制事件等函数就可以完成游戏了,这个过程不是我发布这篇短文的重点,有兴趣的看客可以去源码里看。在MFC里创建一个CRussia类的实例就可以通过调用它的接口函数来完成游戏了。
这次俄罗斯方块的编写,我主要是想提升一下自己面向对象的感觉,但是写下来还是觉得有些不舒服的地方。不过还是希望能够对新手有些帮助,更希望得到高人指点。一直都是通过网络的帮助来学习的,所以发这篇短文希望也能帮助别人。