#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
char far*Q[250]={117+(char far*)0xA0000000};
char A[4][4][7][4]=
{"0000","0000","0000","0000","0000","0000","0000",
"1111","0100","0010","0110","0110","0100","0110",
"0000","0111","1110","0011","1100","1110","0110",
"0000","0000","0000","0000","0000","0000","0000"};
char C[7][4][4],H[7][4][4];
char E,N[250],B[256],b[256];
int G[]={1,2,3,0};
int I[]={0,77,75,72};
int X[]={10,1,-1,0};
int D[113],J[9],Y[25];
int e[256],i[49];
int a,d,g,n,x,y,L;
int c=3,h=48,p=6,M=9;
void pieza(char far*F,int f){
for(d=49;d--;*(F+i[d])=f);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
clock_t T;
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
for(g=4;g--;e[I[g]]=g,h=0)
for(a=7;a--;)
for(n=0,y=4;y--;)
for(x=4;x--;) if(A[g][y][a][x]=A[G[g]][x][a][3-y]-h)
C[a][g][n++]=10*y+x;
for(a=7;J[a]=a--;c=3)
do{
g=G[c];
for(x=n=4;n--;i[I[n]=C[a][c][n]]++)
if(h) i[I[n]]--;
while(x--){
D[++h]=d;
for(n=0;n<4;n++)
if(i[y=X[x]+C[a][g][n]]) i[y]--;
else B[D[h]++]=y;
while(n--) if(!i[y=I[n]]) i[y]++;
else b[d++]=y;
H[a][g=c][x]=h-1;
}
}while(c--);
for(d=49;d--;i[d]=d%7+d/7*320);
for(y=25;y--;pieza(Q[c]+80,8))
for(x=10;x--;N[c]=y)
if(Q[c=10*y+x]=Q[0]+2560*y+8*x)
if(!x||y%24<1) pieza(Q[c],8);
Inicio:
for(n=4;n--;pieza(Q[c]+17048,0))
if(!*Q[c=4+C[a=p][g=0][n]]) pieza(Q[c],a+1);
else while(1) if(getch()==27) return 0;
p=rand()%7;
for(c=n=4;n--;pieza(Q[C[p][0][n]]+17080,p+1));
Rutina:
if(n<0) T=clock();
while(E=kbhit()) getch();
do if(kbhit()) E=getch();
while(!E&&clock()-T<M);
if(E==27&&getch()==E) return 0;
if(E=='-') printf("%c[3;35f%u",27,10-(M+=M<10));
if(E=='+') printf("%c[3;35f%u",27,10-(M-=M>1));
y=D[h=H[a][g][x=e[E]]];
for(n=d=D[h+1]-y;d--;) if(*Q[c+B[y++]]) break;
if(d<0){
while(n--) pieza(Q[c+B[--y]],a+1),
pieza(Q[c+b[y]],0);
if(x>2) g=G[g];
else c+=X[x];
}
else if(!x){
for(n=4;n--;Y[y=N[c+C[a][g][n]]]++);
do while(Y[x=y]>8)
do for(L+=x==y,c=10*x--,n=9;n--;)
if(*Q[++c]!=J[a=*Q[c-10]])
pieza(Q[c],J[a]);
while(Y[x+1]=Y[x]);
while(Y[--y]);
printf("%c[5;28fLineas=%u",27,L);
goto Inicio;
}
goto Rutina;
}