VC 6.0 面向对象的俄罗斯方块尝试(部分注释)(4)
protected:
//被封装的矩阵对象。
CMatrix m_mat;
protected:
//这里都些私有的函数,都是被上面的公共函数所使用的。
//检查第index行是否全满。
bool IsRowFull(int index) const;
//检查第index行是否全空。
bool IsRowEmpty(int index) const;
//检查第index行是否全X。当full为trye时X=满,否则X=空。此函数为上面两个函数服务。
bool IsRowInStatus(int index, bool full) const;
//清除第index行中的所有方块。
void ClearRow(int index);
//使所有漂浮在半空的固定块下落。
void FallDown();
//拷贝第srcRow行到第destRow行。
void CopyRow(int destRow, int srcRow);
//状态检测,服务于SingleTest函数和RangeTest函数。
bool ShapeTest(const CShape& shape, bool coverTest) const;
};
现在有了形状类和底盘类,应该可以做游戏的逻辑部分了。我们把整个游戏逻辑封装在一个叫做CRussia的类中。
class CRussia
{
public:
CRussia();
virtual ~CRussia();
//初始化游戏,默认的底盘大小是10*20。
void InitGame(int width = 10, int height = 20);
//将当前形状向左移动一格,返回是否成功。
bool MoveShapeLeft();
//............右......................。
bool MoveShapeRight();
//时间流逝函数,表示经过一个tick的时间,一般返回true,返回false表示gameover了。
bool PassTick();
//旋转当前形状,返回是否成功。
bool RotateShape();
//获取底盘数据,填充到指针buffer中,buffer的大小至少要在(底盘宽度*底盘高度*sizeof(int))以上。数据内容为R_EMPTY或R_BLOCK。
void GetBoardInfo(int *buffer) const;
//获取底盘上第row行col列的数据,内容为R_EMPTY或R_BLOCK。
int GetBoardInfo(int row, int col) const;
//获取当前下落的形状的信息,返回值是一个ShaoeInfo结构类型,该数据结构的构成稍后说明。
ShapeInfo GetCurrentShape() const;
//获取下一个形状的信息,返回值也是ShapeInfo类型。
ShapeInfo GetNextShape() const;
//获取当前得分。
int GetScore() const;
//获取当前游戏状态,值:RS_NORMAL、RS_UNITE、RS_CLEAR或RS_GAMEOVER,表示四个游戏状态。Normal是普通状态,Unite表示当前
的tick发生了下落块结合到底盘固定块的事件,Clear表示当前tick发生了满行清除的事件,Gameover不用多说了。
int GetStatus() const;