收录日期:2020/10/29 10:38:54 时间:2016/07/16 15:33:48 标签:C语言
多的话不说,老师太恶心了~~
一定要做出来,不做没法过了,大虾们,帮帮忙吧!!


/*   

Turbo C   

俄罗斯方块

*/
#include <stdio.h>
#include <stdlib.h>
#include <dos.h>
#include <conio.h>
#include <time.h>
#include  <graphics.h>

#define L  1
#define LX 15
#define LY  4
static struct BLOCK{
int x0;
int y0;
int x1;
int y1;
int x2;
int y2;
int x3;
int y3;
int color;
int next;
}b[23] = {{0, 1, 1, 1, 2, 1, 3, 1,  4,  1},
{1, 0, 1, 3, 1, 2, 1, 1,  4,  0  },
{1, 1, 2, 2, 1, 2, 2, 1,  1,  2  },
{0, 1, 1, 1, 1, 0, 2, 0,  2,  4  },
{1, 0, 1, 1, 2, 2, 2, 1,  2,  5  },
{0, 2, 1, 2, 1, 1, 2, 1,  2,  6  },
{0, 0, 0, 1, 1, 2, 1, 1,  2,  3  },
{0, 0, 1, 0, 1, 1, 2, 1,  3,  8  },
{0, 1, 0, 2, 1, 1, 1, 0,  3,  9  },
{0, 1, 1, 1, 1, 2, 2, 2,  3, 10  },
{1, 1, 1, 2, 2, 1, 2, 0,  3,  7  },
{1, 0, 1, 1, 1, 2, 2, 2,  7, 12  },
{0, 1, 1, 1, 2, 1, 2, 0,  7, 13  },
{0, 0, 1, 2, 1, 1, 1, 0,  7, 14  },
{0, 1, 0, 2, 1, 1, 2, 1,  7, 11  },
{0, 2, 1, 2, 1, 1, 1, 0,  5, 16  },
{0, 1, 1, 1, 2, 2, 2, 1,  5, 17  },
{1, 0, 1, 1, 1, 2, 2, 0,  5, 18  },
{0, 0, 0, 1, 1, 1, 2, 1,  5, 15  },
{0, 1, 1, 1, 1, 0, 2, 1,  6, 20  },
{0, 1, 1, 2, 1, 1, 1, 0,  6, 21  },
{0, 1, 1, 2, 1, 1, 2, 1,  6, 22  },
{1, 0, 1, 1, 1, 2, 2, 1,  6, 19  }};

static int d[10]={ 33000,3000,1600,1200,900,800,600,400,300,200 };
int Llevel, Lcurrent, Lnext, Lable, lx, ly, Lsum;
unsigned Lpoint;
int La[19][10], FLAG, sum;
unsigned ldelay;
void scrinit( ),datainit( ),dispb( ), eraseb( );
void throw( ), judge( ), delayp( ), move( ), note( ), show( );
int Ldrop( ), Ljudge( ), nextb( ), routejudge( );

main( )
{
char c;
do{
scrinit( );
datainit( );
Lable=nextb();
Lable = Ldrop( );
while( 1 ){
delayp( );
if( Lable != 0 ){
Ljudge( );
Lable = nextb( );
}
ldelay--;
if( ldelay == 0 ){
Lable = Ldrop( );
ldelay = d[0];
}
if( FLAG != 0 )
  break;
}
while( getch( )!='\r' );
gotoxy( 38, 16 );
cputs( "again?" );
c = getch( );
}while( c!='n' && c!='N' );
clrscr( );
}

int nextb( )
{
if( La[(b[Lnext].y0)][(3+b[Lnext].x0)] != 0 ||
La[(b[Lnext].y1)][(3+b[Lnext].x1)] != 0 ||
La[(b[Lnext].y2)][(3+b[Lnext].x2)] != 0 ||
La[(b[Lnext].y3)][(3+b[Lnext].x3)] != 0  ){
FLAG = L;
return( -1 );
}
eraseb( 0, 3, 5, Lnext );
Lcurrent = Lnext;
lx = 3;
ly = 0;
Lable = 0;
ldelay = d[0];
Lsum ++;
Lpoint += 1;
Lnext = random( 23 );
dispb( 0, 3, 5, Lnext );
textcolor( 7 );
gotoxy( 3, 14 ); cprintf( "%#5d", Lsum );
gotoxy( 3, 17 ); cprintf( "%#5d", Lpoint );
return( 0 );
}

void delayp( )
{
 char key;
  if( kbhit( ) != 0 ){
key = getch( );
  move( key );
if( key== '\\' )
getch( );
}
}

void move( funckey )
char funckey;
{
int tempcode;
switch( funckey ){
case 'K': if( lx+b[Lcurrent].x0 > 0 )
if( La[ly+(b[Lcurrent].y0)][lx-1+(b[Lcurrent].x0)]==0 &&
La[ly+(b[Lcurrent].y1)][lx-1+(b[Lcurrent].x1)]==0 &&
La[ly+(b[Lcurrent].y2)][lx-1+(b[Lcurrent].x2)]==0 &&
La[ly+(b[Lcurrent].y3)][lx-1+(b[Lcurrent].x3)]==0 ){
  eraseb( L, lx, ly, Lcurrent );
  lx --;
  dispb( L, lx, ly, Lcurrent );
}
  break;
case 0x20: tempcode = b[Lcurrent].next;
  if( lx+b[tempcode].x0 >= 0 && lx+b[tempcode].x3 <= 9 &&
  ly+b[tempcode].y1 <=19 && ly+b[tempcode].y2 <= 19 )
  if( routejudge( ) != -1 )
if( La[ly+(b[tempcode].y0)][lx+(b[tempcode].x0)]==0 &&
La[ly+(b[tempcode].y1)][lx+(b[tempcode].x1)]==0 &&
La[ly+(b[tempcode].y2)][lx+(b[tempcode].x2)]==0 &&
La[ly+(b[tempcode].y3)][lx+(b[tempcode].x3)]==0 ){
    eraseb( L, lx, ly, Lcurrent );
    Lcurrent = tempcode;
    dispb( L, lx, ly, Lcurrent );
}
  break;
case 'M': if( lx+b[Lcurrent].x3 < 9 )
if( La[ly+(b[Lcurrent].y0)][lx+1+(b[Lcurrent].x0)]==0 &&
  La[ly+(b[Lcurrent].y1)][lx+1+(b[Lcurrent].x1)]==0 &&
  La[ly+(b[Lcurrent].y2)][lx+1+(b[Lcurrent].x2)]==0 &&
  La[ly+(b[Lcurrent].y3)][lx+1+(b[Lcurrent].x3)]==0 ){
  eraseb( L, lx, ly, Lcurrent );
  lx ++;
  dispb( L, lx, ly, Lcurrent );
}
   break;
case 'P': throw( );
  break;
case 0x1b: clrscr( );
exit(0);
break;
default: break;
}
}

void throw( )
{int tempy;
tempy = ly;
while(  ly+b[Lcurrent].y1 < 19 && ly+b[Lcurrent].y2 < 19 &&
La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]==0 &&
La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]==0 &&
La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]==0 &&
La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]==0 )
ly++;
ly--;
eraseb( L, lx, tempy, Lcurrent );
dispb( L, lx, ly, Lcurrent );
La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)] =
La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)] =
La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)] =
La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)] = b[Lcurrent].color;
Lable = -1;
}

int routejudge( )
{
  int i, j;
  for( i=0;i<3;i++ )
for( j=0;j<3;j++ )
      if( La[ly+i][lx+j] != 0 )
return( -1 );
  return( 1 );
}


int Ldrop( )
{
if( ly+b[Lcurrent].y1 >= 18 || ly+b[Lcurrent].y2 >= 18 ){
La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)] =
La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)] =
La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)] =
La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)] = b[Lcurrent].color;
return( -1 );
}
if( La[ly+1+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]!=0 ||
La[ly+1+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]!=0 ||
La[ly+1+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]!=0 ||
La[ly+1+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]!=0 ){
La[ly+(b[Lcurrent].y0)][lx+(b[Lcurrent].x0)]=
La[ly+(b[Lcurrent].y1)][lx+(b[Lcurrent].x1)]=
La[ly+(b[Lcurrent].y2)][lx+(b[Lcurrent].x2)]=
La[ly+(b[Lcurrent].y3)][lx+(b[Lcurrent].x3)]=b[Lcurrent].color;
return( -1 );
}
eraseb( L, lx, ly, Lcurrent );
dispb( L, lx, ++ly, Lcurrent );
return( 0 );
}


int Ljudge(  )
{
int i, j, k,lines, f;
static int p[5]={ 0,1,3,6,10 };
lines = 0;
for( k=0; k<=3; k++ ){
         f = 0;
if( (ly+k)>18 )
                  continue;
for( i=0; i<10; i++ )
    if( La[ly+k][i]==0 ){
f++;
break;
  }
if( f == 0 ){
movetext( LX, LY, LX+19, LY+ly+k-1, LX, LY+1 );
for( i=(ly+k); i>0; i-- )
for( j=0; j<10; j++ )
La[i][j] = La[i-1][j];
for( j=0; j<10; j++ )
La[0][j] = 0;
lines ++;
}
}
Lpoint += p[lines]*10;
return( 0 );
}

void scrinit( )
{
int i;
char lft[20];

textbackground(1);
clrscr( );
gotoxy( 30,9 );
cputs( "ENTER YOUR NAMES:" );
gotoxy( 25,14 );
scanf( "%s",lft );
textbackground(0);
clrscr( );
textcolor( 15 );
gotoxy( 17, 1 );
cprintf( "%s",lft );
gotoxy( 5, 3 );
cputs( "NEXT" );
gotoxy( 4, 13 );
cputs( "block" );
gotoxy( 4, 16 );
cputs( "point" );
for( i=0; i<19; i++ ){
gotoxy( LX-2, LY+i );
cputs( "圹                    圹" );
}
gotoxy( LX-2, LY+19 );
cputs( "圹圹圹圹圹圹圹圹圹圹圹圹" );

}


void datainit( )
{
int i,j;
for( i=0; i<19; i++ )
  for( j=0; j<10; j++ ){
La[i][j]=0;
}
Lable = 0;
FLAG = 0;
ldelay = d[0];
Lsum = 0;
Lpoint=0;
randomize( );
Lnext = random( 23);
}

void dispb( LRflag, x, y, blockcode ) /* display blocks */
int LRflag, x, y, blockcode;
{
    int  realx, realy;
    if( LRflag == L ){
realx = LX+x*2;
realy = LY+y;
    }else{
realx = x;
realy = y;
    }
textcolor( b[blockcode].color );
gotoxy( realx+2*b[blockcode].x0, realy+b[blockcode].y0 ); cputs("圹");
gotoxy( realx+2*b[blockcode].x1, realy+b[blockcode].y1 ); cputs("圹");
gotoxy( realx+2*b[blockcode].x2, realy+b[blockcode].y2 ); cputs("圹");
gotoxy( realx+2*b[blockcode].x3, realy+b[blockcode].y3 ); cputs("圹");
}


void eraseb( LRflag, x, y, blockcode )  /* erase blocks */
int LRflag, x, y, blockcode;
{
    int realx, realy;
    if( LRflag == L ){
realx = LX+x*2;
realy = LY+y;
     }else{
realx = x;
realy = y;
     }
     textcolor( 0 );
     gotoxy( realx+2*b[blockcode].x0, realy+b[blockcode].y0 ); cputs("圹");
     gotoxy( realx+2*b[blockcode].x1, realy+b[blockcode].y1 ); cputs("圹");
     gotoxy( realx+2*b[blockcode].x2, realy+b[blockcode].y2 ); cputs("圹");
     gotoxy( realx+2*b[blockcode].x3, realy+b[blockcode].y3 ); cputs("圹");
}




怎么没注解啊???
作业贴

LNK2001错误,我太急了,谁能帮帮我啊!!!谢谢了! 为什么没有进行判断呢?? (求助)编程实现游戏中的快捷键的问题? Ajax.Updater方式不允许调用外站链接? 新手提问---拷贝构造函数与操作符重载 DataGridView显示问题 Lotus应用范围? Lotus应用范围? 求助:linux2.6在ixp425平台上移植时time_init函数错误 OPENcv中函数cvCalcPCA参数的矩阵行列问题? 求助:用TC2.0画n个周期的正弦波,用角频率控制,A=1 如何破解冰点还原管理员密码 求一段ASP读取多行文本文件最简单代码,50分 关于Symbian问题 SQL查询的SUM问题 关于Windows Mobile问题 js控制div问题 关于在存贮过程中统计页数的疑问 怎么限制图片文件的大小 急问:对于一个字符,如果判断其是否为汉字? 如何用进度条去显示一个算法的运行进度? 关于SIM卡问题(急急急.......) winsock与windows api的关系 奇怪的SUM查询 关于J2ME问题 在客户端用js操作word的问题 TreeView与树形结构算法? 请问下水晶报表9.2怎么打八开纸? Why? 请问哪里可以下载《core java》中文版