#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char A[4][4][7][4]={
"0000","0000","0000","0000","0000","0000","0000",
"0000","0100","0010","0110","0110","0100","0110",
"1111","0111","1110","0011","1100","1110","0110",
"0000","0000","0000","0000","0000","0000","0000"};
char far*q=(char far*)0xA0000000;
char B[8][4],C[112],Y[28],e[256];
int D[280],Q[280],I[4],i[4];
int G[]={1,2,3,0};
int X[]={10,1,-1,0};
int M=9,c=61952,d=280,n=48;
int E,L,a,b,g,p,v,w,x,y;
void Pieza(f,F){
if(d>29)
for(v=7;v--;f+=313)
for(w=7;w--;*(q+f++)=F);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
clock_t T;
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
e[77]=1,e[75]=2,e[72]=3;
for(y=28;--y;Pieza(c+80,8),c-=2480)
for(x=10;x--;Q[--d]=c-=8)
if(y%27*x<1) Pieza(c-8,D[d-1]=8);
for(g=4;g--;n=0)
for(a=7;a--;B[a+1][g]=b)
for(y=4;y--;)
for(x=4;x--;)
if(A[g][y][a][x]=A[G[g]][x][a][3-y]-n)
C[b++]=10*y+x;
p=rand()%7+1;
Inicio:
printf("%c[5;28fLineas=%u",27,L);
c=14;
y=b=B[a=p][g=0];
for(n=4;n--;)
if(!D[d=c+C[--y]]--)
Pieza(Q[I[n]=d],a),
Pieza(d=Q[n],0);
else for(;;) if(getch()==27) return 0;
y=B[p=rand()%7+1][0];
for(n=4;n--;Q[n]=d)
Pieza(d=Q[C[--y]]+23160,p);
do{
if(n<0) T=clock();
do if(E=kbhit()) E=getch();
while(!E&&clock()-T<M);
if(E==27&&getch()==E) return 0;
if(n=(E=='-'&&M<10)-(E=='+'&&M>1))
printf("%c[3;35f%u",27,10-(M+=n));
if(x=X[e[E]]) y=b;
else y=B[a][G[g]];
for(n=4;n--;)
if(D[i[n]=c+x+C[--y]]>0) break;
if(n+1) continue;
for(n=4;n--;)
if(!D[d=i[n]]--) Pieza(Q[d],a);
for(n=4;n--;I[n]=i[n])
if(!++D[d=I[n]]) Pieza(Q[d],0);
if(x) c+=x--;
else b=B[a][g=G[g]];
}while(x<10);
for(n=4;n--;)
if(++Y[y=I[n]/10]>8&&++L)
do for(d=10*y,x=9;x--;)
Pieza(Q[d],D[++d]=D[d-9]);
while(Y[y--]=Y[y-1]);
else D[I[n]]=a;
goto Inicio;
}