俄罗斯方块网上代码 下载本文

内容发布更新时间 : 2024/11/15 23:41:02星期一 下面是文章的全部内容请认真阅读。

? ? ? ? ? ? ? ? ?

/*************************************************************************** **文件:Tetris.c **编写者:huangminqiang **编写日期:2010年12月8号 **简要描述:俄罗斯方块游戏 **修改者:

**修改日期:2012年12月12号 第3次修改

**注:后期功能有些不太完善,主要因为时间原因。VC6.0环境能正常的跑起来。

***

*******************************************************************************/ ?? #include ?? #include ?? #include ?? #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; //记住右竖框有图案