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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
protected: //游戏的底盘。 CBoard m_board; //当前的形状。 CShape m_currentShape; //下一个形状。 CShape m_nextShape; //当前形状是否存在。 bool m_hasShape; //当前得分。 in

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类的实例就可以通过调用它的接口函数来完成游戏了。

  这次俄罗斯方块的编写,我主要是想提升一下自己面向对象的感觉,但是写下来还是觉得有些不舒服的地方。不过还是希望能够对新手有些帮助,更希望得到高人指点。一直都是通过网络的帮助来学习的,所以发这篇短文希望也能帮助别人。

精彩图集

赞助商链接