#include<time.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
int e[256],i[49],Y[25],I[10]={20};
int main()
{
textmode(C40);
_setcursortype(_NOCURSOR);
clock_t T;
srand(time(NULL));
printf("%c[3;28f Nivel=1",27);
char far*Q[250],far*q=1967+(char far*)0xB8000000;
char E,b[4][4][7][4],C[7][4][4],N[7][4][4];
char B[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"};
int f[250],F[25],X[]={10,1,-1,0},G[]={1,2,3,0};
int a,g,n,x,y,c=249,L=48,M=9,p=rand()%7;
e[77]=1;
e[75]=2;
e[72]=3;
for(y=25;y--;F[y]=c+1,q-=60)
for(x=10;x--;f[c--]=y,q-=2)
if(*(q-1)=*(q+I[x]-1)=219)
*(Q[c]=q)=*(q+I[x])=y%24<1||!x?8:0;
for(g=4;g--;L=0)
for(a=7;a--;)
for(n=y=4;y--;)
for(x=4;x--;) if(B[g][y][a][x]=B[G[g]][x][a][3-y]-L)
C[a][g][--n]=F[y]+x;
for(a=7;a--;)
for(g=4;g--;)
for(y=G[g],x=4;x--;){
for(n=4;n--;) i[C[a][g][n]]++;
while(++n<4) if(!i[c=C[a][y][n]+X[x]])
B[g][x][a][L++]=c;
else i[c]--;
N[a][y=g][x]=L;
while(n--) if(i[c=C[a][g][n]])
i[b[g][x][a][--L]=c]--;
}
Inicio:
for(g=n=0;n<4;n++) if(*(q=Q[C[a=p][0][n]+4])) break;
else if(*q=a+1) *(q+502)=0;
while (n<4) if(getch()==27)
return 0;
p=rand()%7;
while(n--) if(*(q=Q[C[p][0][n]]+510)=p+1)
*(--q)=219;
c=4;
T=clock();
do{
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=N[a][g][x=e[E]];
for(n=0;n<y;n++)
if(*Q[I[n]=B[g][x][a][n]+c]) break;
if(n<y) continue;
while(n--)
*Q[b[g][x][a][n]+c]-=*Q[I[n]]=a+1;
if(x>2) g=G[g];
else c+=X[x++];
T=clock();
}while(x);
for(n=0;n<4;n++) Y[y=f[C[a][g][n]+c]]++;
do while(Y[x=y]>8)
do for(c=F[x],L+=x--==y,n=9;n--;)
*Q[++c]=x?*Q[c-10]:0;
while(Y[x+1]=Y[x]);
while(Y[--y]);
printf("%c[5;28fLineas=%u",27,L);
goto Inicio;
}