编程娱乐之俄罗斯方块

 #include <stdio.h>
 #include <windows.h>
 #include <conio.h>
 #include <time.h>
//游戏窗口
 #define FrameX 4   //游戏窗口左上角的X轴坐标
 #define FrameY 4   //游戏窗口左上角的Y轴坐标
 #define Frame_height  20 //游戏窗口的高度
 #define Frame_width   18 //游戏窗口的宽度
 
//定义全局变量
 int i,j,temp,temp1,temp2; //temp,temp1,temp2用于记住和转换方块变量的值
 int a[80][80]={0};   //标记游戏屏幕的图案:2,1,0分别表示该位置为游戏边框、方块、无图案;初始化为无图案
 int b[4];     //标记4个"口"方块:1表示有方块,0表示无方块
   
 //声明俄罗斯方块的结构体
 struct Tetris
 {
  int x;     //中心方块的x轴坐标
  int y;     //中心方块的y轴坐标
  int flag;    //标记方块类型的序号
  int next;    //下一个俄罗斯方块类型的序号
  int speed;    //俄罗斯方块移动的速度
  int count;    //产生俄罗斯方块的个数
  int score;    //游戏的分数
  int level;    //游戏的等级
 };
 
//函数原型声明
 //光标移到指定位置
 void gotoxy(HANDLE hOut, int x, int y);
 //制作游戏窗口
 void make_frame();
 //随机产生方块类型的序号
 void get_flag(struct Tetris *);
 //制作俄罗斯方块
 void make_tetris(struct Tetris *);
 //打印俄罗斯方块
 void print_tetris(HANDLE hOut,struct Tetris *);
 //清除俄罗斯方块的痕迹
 void clear_tetris(HANDLE hOut,struct Tetris *);
 //判断是否能移动,返回值为1,能移动,否则,不动
 int if_moveable(struct Tetris *);
 //判断是否满行,并删除满行的俄罗斯方块
 void del_full(HANDLE hOut,struct Tetris *);
 //开始游戏
 void start_game();
 

void main()
 { 
  //制作游戏窗口
  make_frame();      
  //开始游戏
  start_game();
 }
 
/******光标移到指定位置**************************************************************/
 void gotoxy(HANDLE hOut, int x, int y)
 {
  COORD pos;
  pos.X = x;  //横坐标
  pos.Y = y;  //纵坐标
  SetConsoleCursorPosition(hOut, pos);
 }
 
/******制作游戏窗口******************************************************************/
 void make_frame()
 {
  HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);  //定义显示器句柄变量
 
 gotoxy(hOut,FrameX+Frame_width-5,FrameY-2);   //打印游戏名称
  printf("俄罗斯方块");
  gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+7);  //打印选择菜单
  printf("**********下一个方块:");
  gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+13);
  printf("**********");
  gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+17);
  printf("↑键:变体");
  gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+19);
  printf("空格:暂停游戏");
  gotoxy(hOut,FrameX+2*Frame_width+3,FrameY+15);
  printf("Esc :退出游戏");
 
 gotoxy(hOut,FrameX,FrameY);       //打印框角并记住该处已有图案
  printf("╔");
  gotoxy(hOut,FrameX+2*Frame_width-2,FrameY);
  printf("╗");
  gotoxy(hOut,FrameX,FrameY+Frame_height);
  printf("╚");
  gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+Frame_height);
  printf("╝");
  a[FrameX][FrameY+Frame_height]=2;     
  a[FrameX+2*Frame_width-2][FrameY+Frame_height]=2;
 
 for(i=2;i<2*Frame_width-2;i+=2)
  {
   gotoxy(hOut,FrameX+i,FrameY);
   printf("═");         //打印上横框
  }
  for(i=2;i<2*Frame_width-2;i+=2)
  {
   gotoxy(hOut,FrameX+i,FrameY+Frame_height);
   printf("═");         //打印下横框
   a[FrameX+i][FrameY+Frame_height]=2;    //记住下横框有图案
  }
  for(i=1;i<Frame_height;i++)
  {
   gotoxy(hOut,FrameX,FrameY+i); 
   printf("║");         //打印左竖框
   a[FrameX][FrameY+i]=2;       //记住左竖框有图案
  }
  for(i=1;i<Frame_height;i++)
  {
   gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i); 
   printf("║");         //打印右竖框
   a[FrameX+2*Frame_width-2][FrameY+i]=2;   //记住右竖框有图案
  }
 }
 
/******制作俄罗斯方块********************************************************************/
 void make_tetris(struct Tetris *tetris)
 {
  a[tetris->x][tetris->y]=b[0];    //中心方块位置的图形状态:1-有,0-无
  switch(tetris->flag)      //共6大类,19种类型
  {
   case 1:         //田字方块
    {  
     a[tetris->x][tetris->y-1]=b[1];
     a[tetris->x+
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值