VC 6.0 面向对象的俄罗斯方块尝试(部分注释)(3)
protected:
//被封装的CMatrix对象。
CMatrix m_mat;
//形状的类型ID。
int m_type;
//一个比较微妙的值,暂时不解释,读代码会明白的。关系到形状的旋转,有些形状可以旋转出四种样子,但有些是由两种样子。
bool m_needJump;
//左上角X坐标。
int m_posX;
//......Y....。
int m_posY;
protected:
//这里都些私有的函数,都是被上面的公共函数所使用的。
//随机创建一个形状。
void RandCreate();
//随机旋转几次。
void RandRotate();
//旋转形状,参数表示是否顺时针。
void RotateShape(bool clockwise);
};
有了形状类之后,我们还需要一个底盘类,用来表示游戏中除了当前下落的形状之外的背景部分和已经固定的块。我们称这部分为底盘,类名为CBoard。
class CBoard //此类其实也是对一个CMatrix的对象进行了封装。
{
public:
//构造函数时默认的底盘大小是10*20。
CBoard();
virtual ~CBoard();
//重新设置底盘的大小,并且底盘被清空。这个函数好像没用到。但是整个编写过程用的是面向对象的思想,所以在写这个类的时候我把外面可能会调用的方法都写成了公共接口。
void ResetSize(int width, int height);
//设置row行col列的值为value。value的取值为两个宏,R_EMPTY和R_BLOCK,分别表示“空”和“有方块”状态。
void SetAt(int row, int col, int value);
//将形状shape结合到底盘中,成为底盘的一部分。
void UniteShape(const CShape& shape);
//清除所有排满方块的行中的方块,并使这些行上面的方块们下落下来。
int ClearRows();
//获取底盘宽度。
int GetWidth() const;
//........高度。
int GetHeight() const;
//获取row行col列的格子的内容,两种值:R_EMPTY和R_BLOCK。
int GetAt(int row, int col) const;
//获取底盘数据到指针的destBuffer所指的空间。该空间至少要有GetWidth()*GetHeight()*sizeof(int)个字节大小。
void GetBoardData(int *destBuffer) const;
//独立性检查,检查形状shape是否独立。shape如果和底盘上的固定块有部分重叠则不独立返回false,否则独立返回true。
bool SingleTest(const CShape& shape) const;
//边界检查,检查形状shape是否在边界内。在界内返回true,出界则返回false。
bool RangeTest(const CShape& shape) const;
//重载[]运算符。
const int* operator[](int index) const;