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