#include <graphics.h>
#include <stdio.h>
#include <stdlib.h>
Char x,y,ty,ty1,zhuan,line1=0,line2=0,ss[16],hol[10][29]={0},a[4][2]={0};
int score1=0,speed=1000;
void unit (CHAR,CHAR,CHAR); void dl (int);
void Block (char); void Fuzi (Char,char);
void up (void); void (void);
void left (void); void right (void);
Char FX (CHAR,CHAR,CHAR); Char fy (CHAR,CHAR,CHAR);
Char max1 (CHAR,CHAR,CHAR); Char min1 (CHAR,CHAR,CHAR);
void score (void); void Xiao (void);
void save (void);
Main ()
{
Char Cycy=0,i,j,b,ci;
Initgraph (Vga,vgahi, "C://TC//EGAVGA.BGI");
Getch ();
Setfillstyle (1,7);
SetColor (7);
Bar (200,10,350,430);
SetColor (rectangle); (198,8,352,432);
X=4;ty=0;zhuan=0;y=1;
Do
{
Fuzi (Ty,zhuan);
Block (14);
Score ();
for (ci=0;ci<10;ci++)
{
if (Kbhit ()!=0)
B=getch ();
Else
b=0;
if (b==13)
Break
Switch (b)
{
Case 72:up (); Break
Case 75:left (); Break
Case 77:right (); Break
Case 80:down (); Break
}
DL (SPEED/2);
}
J=max1 (a[3][1],a[1][1],a[2][1]);
if ((j>=27) | | | (Hol[a[0][0]][a[0][1]+1]+hol[a[1][0]][a[1][1]+1]+hol[a[2][0]][a[2][1]+1]+hol[a[3][0]][a[3][1]+1]
>=1))
{
Hol[a[0][0]][a[0][1]]=1;hol[a[1][0]][a[1][1]]=1;
Hol[a[2][0]][a[2][1]]=1;hol[a[3][0]][a[3][1]]=1;
y=2;
x=5;
Do
{
Randomize ();
Ty1=random (100);
ty1%=7;
if (ty1==0)
ty1=7;
}
while (ty==ty1);
Ty=ty1;
j=0;
Xiao ();
}
Else
{
Block (0);
y++;
}
for (i=0;i<10;i++)
if (hol[i][0]==1)
{
Cycy=1;
Getch ();
Break
}
if (cycy==1)
{
cycy=0;
Break
}
}
while (b!=13);
Getch ();
Closegraph ();
Save ();
Getch ();
}
void unit (char x,char Y,char color)
{
Setfillstyle (1,color);
SetColor (color);
Bar (200+x*15,10+y*15,200+ (x+1) *15-2,10+ (y+1) *15-2);
}
void block (char color)
{
Char i,t;
for (i=0;i<4;i++)
Unit (A[i][0],a[i][1],color);
}
void DL (int a)
{
int r,n;
for (r=0;r<a;r++)
for (n=0;n<30000;n++)
{
n++;
n--;
}
}
Char FX (char X0,char y0,char N)
{
Char x1,x2,y1,y2;
X1=y0+x-y;
y1=x+y-x0;
if (n==0)
return (x0);
if (n==1)
return (x1);
if (n>=2)
{
X2=y1+x-y;
y2=x+y-x1;
if (n==2)
return (x2);
Else
{
X1=y2+x-y;
y1=x+y-x2;
if (n==3)
return (x1);
}
}
}
Char fy (char x0,char y0,char N)
{
Char x1,x2,y1,y2;
X1=y0+x-y;
y1=x+y-x0;
if (n==0)
return (y0);
if (n==1)
return (y1);
if (n>=2)
{
X2=y1+x-y;
y2=x+y-x1;
if (n==2)
return (y2);
Else
{
X1=y2+x-y;
y1=x+y-x2;
if (n==3)
return (y1);
}
}
}
void Left ()
{
Char J;
Fuzi (Ty,zhuan);
Block (0);
J=min1 (A[3][0],a[1][0],a[2][0]);
if ((j>=1) && (hol[a[0][0]-1][a[0][1]]==0) && (hol[a[1][0]-1][a[1][1]]==0) && (Hol[a[2][0] -1][a[2][1]]==0) && (Hol[a[3][0]-1]
[a[3][1]]==0)]
{
j--;
x--;
}
Fuzi (Ty,zhuan);
Block (14);
}
void Right ()
{
Char J;
Fuzi (Ty,zhuan);
Block (0);
J=max1 (A[3][0],a[1][0],a[2][0]);
if ((j<9) && (hol[a[0][0]+1][a[0][1]]==0) && (hol[a[1][0]+1][a[1][1]]==0) && (hol[a[2][0]+ 1][a[2][1]]==0) && (hol[a[3][0]+1]
[a[3][1]]==0)]
{
j + +;
x + +;
}
Fuzi (Ty,zhuan);
Block (14);
}
void Fuzi (char N,char Zhuan)
{
A[0][0]=x;
A[0][1]=y;
n=n%7;
if (n==0)
n=7;
zhuan=zhuan%4;
Switch (n)
{
Case 1:A[1][0]=FX (X-1,y,zhuan); A[1][1]=fy (X-1,y,zhuan);
A[2][0]=FX (X,y+1,zhuan); A[2][1]=fy (X,y+1,zhuan);
A[3][0]=FX (X,y+2,zhuan); A[3][1]=fy (X,y+2,zhuan);
Break
Case 2:A[1][0]=FX (X-1,y,zhuan); A[1][1]=fy (X-1,y,zhuan);
A[2][0]=FX (X,y-1,zhuan); A[2][1]=fy (X,y-1,zhuan);
A[3][0]=FX (X,y-2,zhuan); A[3][1]=fy (X,y-2,zhuan);
Break
Case 3:A[1][0]=FX (X-1,y-1,zhuan); A[1][1]=fy (X-1,y-1,zhuan);
A[2][0]=FX (X,y+1,zhuan); A[2][1]=fy (X,y+1,zhuan);
A[3][0]=FX (X-1,y,zhuan); A[3][1]=fy (X-1,y,zhuan);
Break
Case 4:A[1][0]=FX (X-1,y,zhuan); A[1][1]=fy (X-1,y,zhuan);
A[2][0]=FX (X-1,y+1,zhuan); A[2][1]=fy (X-1,y+1,zhuan);
A[3][0]=FX (X,y-1,zhuan); A[3][1]=fy (X,y-1,zhuan);
Break
Case 5:A[1][0]=FX (X-1,y,zhuan); A[1][1]=fy (X-1,y,zhuan);
A[2][0]=FX (X,y-1,zhuan); A[2][1]=fy (X,y-1,zhuan);
A[3][0]=FX (X,y+1,zhuan); A[3][1]=fy (X,y+1,zhuan);
Break
Case 6:A[1][0]=FX (X,y+1,zhuan); A[1][1]=fy (X,y+1,zhuan);
A[2][0]=FX (X,y-1,zhuan); A[2][1]=fy (X,y-1,zhuan);
A[3][0]=FX (X,y-2,zhuan); A[3][1]=fy (X,y-2,zhuan);
Break
Case 7:A[1][0]=FX (X-1,y,zhuan); A[1][1]=fy (X-1,y,zhuan);
A[2][0]=FX (X,y-1,zhuan); A[2][1]=fy (X,y-1,zhuan);
A[3][0]=FX (X-1,y-1,zhuan); A[3][1]=fy (X-1,y-1,zhuan);
Break
}
}
void Up ()
{
Char j,k;
Fuzi (Ty,zhuan);
Block (0);
zhuan++;
zhuan=zhuan%4;
Fuzi (Ty,zhuan);
J=min1 (A[3][0],a[1][0],a[2][0]);
K=max1 (A[3][0],a[1][0],a[2][0]);
if ((k<=9) && (j>=0))
{
if ((hol[a[0][0]][a[0][1]]==0) && (hol[a[1][0]][a[1][1]]==0) && (hol[a[2][0]][a[2][1]]==0) & & (Hol[a[3][0]][a[3]
[1]] ==0))
Block (14);
Else
{
zhuan+=3;
zhuan%=4;
Fuzi (Ty,zhuan);
Block (14);
}
}
Else
{
zhuan+=3;
zhuan%=4;
Fuzi (Ty,zhuan);
Block (14);
}
}
void Down (void)
{
Char j,cy=0;
Fuzi (Ty,zhuan);
Block (0);
J=max1 (a[3][1],a[2][1],a[1][1]);
while (j<28)
{
J=max1 (a[3][1],a[1][1],a[2][1]);
if ((j>=27) | | | (hol[a[0][0]][a[0][1]+1]==1) | | (hol[a[1][0]][a[1][1]+1]==1) | | (hol[a[2][0]][a[2][1]+1]==1) | | (Hol[a
[3] [0]] [A[3][1]+1]==1)]
{
Hol[a[0][0]][a[0][1]]=1;
Hol[a[1][0]][a[1][1]]=1;
Hol[a[2][0]][a[2][1]]=1;
Hol[a[3][0]][a[3][1]]=1;
Block (14);
Xiao ();
y=2;
x=5;
Do
{
Randomize ();
Ty1=random (100);
ty1%=7;
if (ty1==0)
ty1=7;
}
while (Ty1==ty);
Ty=ty1;
j=0;
Fuzi (Ty,zhuan);
Block (14);
Cy=1;
}
Else
{
DL (SPEED/4);
Fuzi (Ty,zhuan);
Block (0);
y++;
}
if (cy==1)
{
cy=0;
Break
}
Fuzi (Ty,zhuan);
Block (14);
}
}
void Xiao (void)
{
Char jj,y1,r,x1,y2;
for (jj=0;jj<4;jj++)
{
for (y1=27;y1>0;y1--)
{
r=0;
for (x1=0;x1<10;x1++)
{
if (hol[x1][y1]==1)
r++;
}
if (r==10)
{
line1++;
for (x1=0;x1<10;x1++)
{
Unit (x1,y1,0);
hol[x1][y1]=0;
}
for (y2=y1-1;y2>0;y2--)
{
for (x1=0;x1<10;x1++)
{
if (hol[x1][y2]==1)
{
hol[x1][y2]=0;
Unit (x1,y2,0);
Unit (x1,y2+1,14);
Hol[x1][y2+1]=1;
}
}
}
}
}
}
}
Char max1 (char A,char b,char c)
{
Char max3;
if (a>=b)
Max3=a;
Else
Max3=b;
if (max3<c)
Max3=c;
return (MAX3);
}
Char min1 (char A,char b,char c)
{
Char min;
if (a<=b)
Min=a;
Else
Min=b;
if (min>c)
Min=c;
return (min);
}
void score (void)
{
Char a,b=1;
SetColor (0);
Outtextxy (20,20,SS);
SetColor (14);
for (a=0;a<line1-line2;a++)
b*=2;
Score1+=b-1;
if (b>1)
speed-=2;
Line2=line1;
sprintf (SS, "Your score:%d.", Score1);
Outtextxy (20,20,SS);
}
void Save (void)
{
FILE * FP;
int i;
i=0;
Fp=fopen ("Bloscore.txt", "rb+");
I= (Int.) (FGETC (FP))-48;
if (fp=null)
i=0;
Fclose (FP);
if (i<score1)
{
Fp=fopen ("Bloscore.txt", "wb+");
fprintf (FP, "%d", score1);
Fclose (FP);
printf ("Your Score:%d is the highest!", score1);
}
Getch ();
}