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

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

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
前阵子发过一个帖子,上传了自己写的俄罗斯方块。但是由于工作比较忙没时间写说明,现在补上。 俄罗斯方块写过好几次了,每次的感觉都不一样,都有新的收获。就像达芬奇画鸡蛋

  前阵子发过一个帖子,上传了自己写的俄罗斯方块。但是由于工作比较忙没时间写说明,现在补上。

  俄罗斯方块写过好几次了,每次的感觉都不一样,都有新的收获。就像达芬奇画鸡蛋一样,虽然都是画同样的鸡蛋,但是每次都有不同的收获。

  先来看看我们需要的是一个怎么样的程序。

  首先要有2个大功能:1.开始游戏 2.退出游戏。其中要编程的主要工作都集中在“开始游戏”之后的过程中。俄罗斯方块的游戏规则相信大家一定都不陌生,也许还有不少人都是骨灰级玩家了,但是在此还是有必要说明一下游戏的规则,因为从编程和玩家的两个不同角度来观察游戏规则,还是有微妙的区别的――侧重的东西不同。

  游戏在一个m*n的矩形框内进行。游戏开始时,矩形框的顶部会随机出现一个由四个小方块构成的形状,每过一个很短的时间(我们称这个时间为一个tick),它就会下落一格,直到它碰到矩形框的底部,然后再过一个tick它就会固定在矩形框的底部,成为固定块。接着再过一个tick顶部又会出现下一个随机形状,同样每隔一个tick都会下落,直到接触到底部或者接触到下面的固定块时,再过一个tick它也会成为固定块,再过一个tick之后会进行检查,发现有充满方块的行则会消除它,同时顶部出现下一个随机形状。直到顶部出现的随机形状在刚出现时就与固定块重叠,表示游戏结束。

  说的有点罗嗦,但是细细分析一下每隔tick之间发生事情的顺序对理清程序思路有好处。

  接下来开始分析程序的设计了。

  照理应该从大的设计一步一步往下细分的,但由于时间有限,我就反过来从小的往大的讲了,请谅解。我会尽量把问题说明白。

  显然俄罗斯方块是一个简单的游戏,因为它都是基于矩阵的。既然是面向对象的方法来写,那么我们首先应该封装一个矩阵类,权且叫做CMatrix吧。

class CMatrix  //矩阵类,这是一个整形矩阵类型
{
public:
    //默认构造函数。
    CMatrix();
    //根据构造函数参数创建指定大小的矩阵
    CMatrix(int width, int height);
    //根据构造函数参数创建指定大小的矩阵,并为矩阵的每个元素统一分配一个初始值。
    CMatrix(int width, int height, int initValue);
    virtual ~CMatrix();

    //重新设置矩阵的尺寸。
    void ResetSize(int width, int height);
    //将左右元素设置为一个值。
    void SetAll(int value);
    //设置row行col列的元素值为value。
    void SetAt(int row, int col, int value);

    //获取矩阵宽度。
    int GetWidth() const;
    //获取矩阵高度。
    int GetHeight() const;
    //获取row行col列元素的值。
    int GetAt(int row, int col) const;

    //旋转矩阵,参数为是否顺时针。
    bool Rotate(bool clockWise = true);

    //获取第row行指针,调用者可以通过“(CMatrix对象)[行][列]”来获取或设置元素。
    int* operator[](int row) const;
    //重载等号运算符,其实也可以写拷贝构造函数。
    CMatrix& operator=(CMatrix &srcMat);

精彩图集

赞助商链接