基于MFC的俄罗斯方块小游戏(一)

一、唠嗑一下

这次接触mfc纯属意外:一家开发公司在西安举办了软件编程大赛来我们学校做大赛宣传,看了下作品要求都是些Web Page、Android APP什么的,然后看到mfc开发一项,对mfc产生了好奇,于是就查了一些mfc的资料,觉得界面编程挺有趣的。所以这也是我第一次接触微软基础类库mfc,也是我第一次写游戏哈哈哈!不完善之处希望多多包涵。

二、游戏思路及逻辑说明

这款游戏本身操作简单、逻辑分明,大致可分为以下几种状态:

1、 初始态:

随机生成物体,出现在最高处,分数为0;基本上为静态贴图。

2、 游戏进行态:

(一)方块控制

1.变形

    围绕一个方块向右旋转90度.以变形

2.左右下移动

    1>物体左右移动的时候不要过界.

    2>物体落定后.

        (1).设定它落下的位置.

        (2).看是否满足三个同样方格排成一排或一列,满了消去,而后继续随机生成新的方块

        (3).看是否方块垒到顶了.到了game over

(三)随机生成物体

    共七种类型的方块,分别是“田”,“一”,“L”、“J”、“Z”、反“Z”、“T”

(四)重复以上步骤

3、 死亡状态:

方块垒到最高处

三、实现

(一)类的定义

  • 方格类
typedef struct tagPane
   {
     int y; // 行
     int x;  // 列
     CImage blockPNG;
     int imageKind;    //方格的种类
    }Pane;
  • block类
//每个物体定义
   struct Block
   { 
     Pane eachPane[4];    //每个方块共有4个方格,用结构体数组记录
     int y1; // 对应于最上面的一个方块的y坐标
     int y2; // 对应于最下面一个方块x的坐标
     int x1; // 对应于最左面一个方块的y坐标
     int x2; // 对应于最右面一个方块x的坐标
    };
  • 游戏区域类
    struct GameArea
   {
     int bSet;//记录该方格是否被占用,被占用==1,否则为0
     int blockkind;
     CImage blockPNG;
   };

(二)操作函数

    void DrawBlock(int flag);//随机产生方块的颜色
    void GenerateBlock(struct Block &blk);// 随机的产生方块形状
    void TransBlockForm();//方块变形
    void Move(int direction);//方块左右移动
    void MoveDown();//方块下落

    void UpdateLimit(struct Block &blk);// 更新物体的上下左右边界
    bool IsBorder();//判断是否到达边界
    void SetBlockFlag();//标记
    bool IsLine();//判断是否符合消去条件
    bool IsValid();//消消乐的玩法

    void Initialize();//游戏初始化
    void Pause();//游戏暂停
    void GameOver();//游戏结束

(三)一些变量

    //当前的方块
    struct Block block;

    //我们将这个游戏区域格式化为 18*10 (y*x);
    struct GameArea gameAreas[18][10];

    int AreasTopLine;       //记录游戏区域最高的一行
    CRect GAME_RECT;        //游戏区域
    CImage background;      //背景图
    CImage blockPNG;        //方块的图片
    CDC cacheDC;            //缓冲DC
    CBitmap cacheCBitmap;   //缓冲位图

    int score;//得分

你可能感兴趣的:(游戏编程,mfc)