龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC 6.0 面向对象的俄罗斯方块尝试(部分注释)(4)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
protected: //被封装的矩阵对象。 CMatrix m_mat; protected: //这里都些私有的函数,都是被上面的公共函数所使用的。 //检查第index行是否全满。 bool IsRowFull(int i

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;

精彩图集

赞助商链接