c语言写俄罗斯方块(源码)

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define   ROW    19     // 游戏区域的行数
#define   COL    12     // 游戏区域的列数
#define    NR    4  // 方块数据大小
#define    TYPE  7  // 方块类型数
/* 按键枚举 */
enum key {
   DOWN,                // 上
   LEFT,                // 左
   RIGHT,               // 右
   CHANGE,              // 变化
   STOP,                // 停止
   EXIT,                // 退出
   UNKNOW,              // 未知
};

/***** 函数声明区域 ******/
void initalGameArea(void);                  // 初始化游戏区域
void drawBlock(char bl[NR][NR]);            // 画方块
void cleanBlock(char bl[NR][NR]);           // 清除方块
void turnBlock(char bl[NR][NR]);            // 旋转方块
void gameEnd(void);                         // 结束游戏
void gameStop(void);                        // 暂停游戏
void showGame(void);                        // 显示游戏
void gameSelf(int signo);                   // 游戏自动运行
void checkDeleteLine(void);                 // 检查是否满一行
void checkGameOver(char bl[NR][NR]);        // 检查是否游戏结束
int  checkMove(char bl[NR][NR], int flag);  // 检查方块是否可移动
void  setBufferedInput(bool enable);                        // 获取输入

/* 全局变量区域 */
static char gameArea[ROW][COL] = {0};       // 游戏区域数据
static int startX = 4, startY = 6;          // 方块出现的起始位置
static int type = 0;                        // 方块当前类型
static int nextType = 0;                    // 方块的下一种类型
static int diret = 0;                       // 方块的方向
char *state = "\033[32m游戏中...\033[0m";    // 游戏运行状态
static unsigned int level = 0;              // 游戏等级
static unsigned int score = 0;              // 游戏分数
static unsigned int maxScore = 0;           // 游戏最高记录
static FILE *fp = NULL;                     // 用于把记录保存到文件

/* 方块数据 */
char bl[TYPE][NR][NR][NR] = {
    /* 第一种方块 */
 {
      { /* 第一种方向 */
       {1,1,0,0},
       {1,1,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第二种方向 */
       {1,1,0,0},
       {1,1,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第三种方向 */
       {1,1,0,0},
       {1,1,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第四种方向 */
       {1,1,0,0},
       {1,1,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
 },

 /* 第二种方块 */
 {
      { /* 第一种方向 */
       {2,2,2,2},
       {0,0,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第二种方向 */
       {0,2,0,0},
       {0,2,0,0},
       {0,2,0,0},
       {0,2,0,0},
      },
      { /* 第三种方向 */
       {2,2,2,2},
       {0,0,0,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第四种方向 */
       {0,2,0,0},
       {0,2,0,0},
       {0,2,0,0},
       {0,2,0,0},
      },
 },

 /* 第三种方块 */
 {
      { /* 第一种方向 */
       {3,0,0,0},
       {3,3,3,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第二种方向 */
       {0,3,3,0},
       {0,3,0,0},
       {0,3,0,0},
       {0,0,0,0},
      },
      { /* 第三种方向 */
       {3,3,3,0},
       {0,0,3,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第四种方向 */
       {0,0,3,0},
       {0,0,3,0},
       {0,3,3,0},
       {0,0,0,0},
      },
 },

 /* 第四种方块 */
 {
      { /* 第一种方向 */
       {0,0,4,0},
       {4,4,4,0},
       {0,0,0,0},
       {0,0,0,0},
      },
      { /* 第二种方向 */
       {0,4,0,0},
       {0,4,0,0},
       {0,4,4,0},
       {0,0,0,0},
      },
      { /* 第三种方向 */
       {0,4,4,4},
       {0,4,0,0},
       {0,0,0,0},
       {0,0,0,0}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值