俄罗斯方块C源代码
#include?stdio.h
#include?windows.h
#include?conio.h
#include?time.h
int?i,j,Ta,Tb,Tc; ? ? //?Ta,Tb,Tc用于记住和转换方块变量的值
int?x,y,?level,score,speed; ? //方块中心位置的x,y坐标,游戏等级、得分和游戏速度
int?flag,next; ? //当前要操作的方块类型序号,下一个方块类型序号
void?gtxy(int?m,?int?n); ? //以下声明要用到的自编函数
void?gflag(?);? //获得下一方块序号
void?csh(?);? //初始化界面
void?start(?);? //开始部分
void?prfk?(?);? //打印方块
void?clfk(?);? //清除方块
void?mkfk(?);? //制作方块
void?keyD(?);? //按键操作
int?ifmov(?);? //判断方块能否移动或变体
void clHA(?);? //清除满行的方块
void?clNEXT(?);? //清除边框外的NEXT方块
int?main(?)
{?csh(?); ?
while(1)
{start(?);?//开始部分
? while(1)
? {?prfk(?);?
? ? Sleep(speed);? //延时
? ? ? clfk(?);
? ? ? Tb=x;Tc=flag;?//临存当前x坐标和序号,以备撤销操作
? ? ? keyD(?); ?
? ? ? y++;??//方块向下移动
? ? if?(ifmov(?)==0)?{?y--;?prfk(?);?dlHA(?);?break;}?//不可动放下,删行,跨出循环
? }
if?(j==0)?{?system("cls");gtxy(10,10);printf("游戏结束!");?getch();?break;?}?
clNEXT(?); ? //清除框外的NEXT方块
}
return?0;
void?gtxy(int?m,?int?n)?//控制光标移动
{COORD?pos;?//定义变量
pos.X?=?m;?//横坐标
pos.Y?=?n;?//纵坐标
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),?pos);
void?csh(?)?//初始化界面
CONSOLE_CURSOR_INFO?cursor_info={1,0};?//以下是隐藏光标的设置
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),cursor_info);
gflag(?);?flag=next;?//获得一个当前方块序号
void?gflag(?) ? //获得下一个方块的序号
void?start(?)?//开始部分
{?gflag(?);?Ta=flag;?flag=next;?//保存当前方块序号,将下一方块序号临时操作
void?prfk?(?)?//打印俄罗斯方块
mkfk?(?);?//制作俄罗斯方块
void?clfk(?)?//清除俄罗斯方块
void?mkfk(?)?//制作俄罗斯方块
{?a[x][?y]=b[0];?//方块中心位置状态:?1-有,0-无
void?keyD(?)?//按键操作
{?if?(kbhit(?))
{?int?key;
key=getch();
{?key=getch();
? ? }
? if?(ifmov(?)==0)?{?x=Tb;?flag=Tc;?}? //如果不可动,撤销上面操作
? else?{?prfk(?);?Sleep(speed);?clfk(?);?Tb=x;Tc=flag;} ? //如果可动,执行操作
int?ifmov(?)?//判断能否移动
{?if?(a[x][y]!=0)?{?return?0;?}?//方块中心处有图案返回0,不可移动
return?0; ? //其它情况返回0
void?clNEXT(?) ? //清除框外的NEXT方块
void clHA(?) ? //清除满行的方块
{?int?k,?Hang=0; ? //k是某行方块个数,?Hang是删除的方块行数
{?if?(a[i][j]==1)?//竖坐标从下往上,横坐标由左至右依次判断是否满行
{?k++; ? //下面将操作删除行
? ? ? {?a[k][j]=0;?gtxy(k,j);?printf("?");?Sleep(1);?}
? ? ? for(k=j-1;kZL;k--)
? ? ? ? {?if(a[i][k]==1)?{?a[i][k]=0;?gtxy(i,k);?printf("?");a[i][k+1]=1;
? ? ? ? ? gtxy(i,k+1);?printf("□");?}?}
? ? ? ? }
? ? ? j++;??//方块下移后,重新判断删除行是否满行
? ? ? Hang++;?//记录删除方块的行数
score+=100*Hang; ? //每删除一行,得100分
以上就是土嘎嘎小编为大家整理的java俄罗斯方块源代码相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!