内容发布更新时间 : 2024/11/15 23:41:02星期一 下面是文章的全部内容请认真阅读。
? ? ? ? ? ? ? ? ?
/*************************************************************************** **文件:Tetris.c **编写者:huangminqiang **编写日期:2010年12月8号 **简要描述:俄罗斯方块游戏 **修改者:
**修改日期:2012年12月12号 第3次修改
**注:后期功能有些不太完善,主要因为时间原因。VC6.0环境能正常的跑起来。
***
*******************************************************************************/ ?? #include
?? //游戏窗口
?? #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(\:退出游戏\??
?? 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 ??? gotoxy(hOut,FrameX,FrameY+i); ??? printf(\║\打印左竖框 ??? a[FrameX][FrameY+i]=2; //记住左竖框有图案 ??? } ??? for(i=1;i ??? gotoxy(hOut,FrameX+2*Frame_width-2,FrameY+i); ??? printf(\║\打印右竖框 ??? a[FrameX+2*Frame_width-2][FrameY+i]=2; //记住右竖框有图案