#include<dos.h>
#include<time.h>
#include<stdio.h>
#include<conio.h>
char A[][50]={
" ",
" < ",
" : ",
" D:J:A D::Z::A : D:J:H::Z::A ",
" : : : : : : : : ",
" : : : : : : : : ",
" J J J J : J J J ",
" : : : : : : : : ",
" : : : : : : : : ",
" J G:J:B J : J J J ",
" : : : : : : : ",
" : : : : : : : ",
" J J J : J J J ",
" : : : : : : : ",
" : : : : : : : ",
" J C:J:H:J:J:I:J:J:J:J:I:J:J:J:J:F:J:I:J:J:E ",
" : : : : : : ",
" : : : : : : ",
" J J J : J J ",
" : : : : : : ",
" : : : : : : ",
" J D:J:E G:::8:::::6:::::1 D:J:E J ",
" : : : : : : : : : ",
" : : : : : : : : : ",
" J J J J : : J J J ",
" : : : : : 4:::1 : : : : ",
" : : : : : : : : : : : ",
" G:J:B G:J:J:B : : : 7:::B G:J:J:B ",
" : : : : : : : ",
" : : : : : : : ",
" J J : : : : J ",
" : : : = 3:::2 : "};
char pieza[][5][13]={
" 11111 "," 11111 "," 11111 "," 11111 "," ",
" 111111111 "," 111111111 "," 111111111 "," 111111111 "," ",
" 11111711111 "," 11111111111 "," 11331113311 "," 11221112211 "," 22222 ",
" 11111711111 "," 11111111777 "," 12332123321 "," 14433144331 "," 2222222 ",
"1111177711111","1111117777777"," 12442124421 "," 14433144331 "," 222111222 ",
"1111177711111","1117777777777","1114411144111","1112211122111"," 221111122 ",
"1111777771111","1111117777777","1111111111111","1111111111111"," 222111222 ",
" 11177777111 "," 11111111777 ","1111111111111","1111111111111"," 2222222 ",
" 11777777711 "," 11111111111 ","1111111111111","1111111111111"," 22222 ",
" 177777771 "," 111111111 ","11 111 111 11"," 111 111 111 "," ",
" 77777 "," 11111 ","1 1 1 1"," 1 1 1 "," "};
char far*Q[650],far*q=(char far*)0xA0000000;
int K[][4]={1,0,0,-1,3,1,0,0,0,-1,1,0,0,0,-1,-3};
int G[]={0,2,1,4,3,5,8,7,6,9,10,12,11,13};
int C[]={1371,1380,1627,1636};
int e[256]={0,72,77,80,75};
int I[]={-64,1,64,-1};
int D[]={3,1,3,1};
int H[3200],P[20][143];
int R[4],S[4],b[14],p[20];
int B[650],J[650],X[650],Y[650];
int d=61271,c=2527,h=3200,m=1,w=h;
int E,L,N,a,n,v,x,y;
void figura(int F,char F1,char F2){
for(q=Q[H[F]],v=p[F1];v--;)
*(q+P[F1][v])=F2;
}
void plasmar(F,F1){
if(J[H[F]]<0)
if(J[H[F-=F1]]>0||J[H[F-=F1]]>1)
figura(F,J[H[F]]+14,7);
}
void pildoras(F,F1){
for(d=4;d--;)
if(H[v=h+I[d]])
J[H[v]]+=F,
J[H[v+I[d]]]+=F1;
}
void viraje(F,F1){
if(x=X[F]-X[F1])
if(n%2&&c%2&&!S[n]) x=-x;
if(y=Y[F]-Y[F1])
if(n>1&&c%2<1&&!S[n]) y=-y;
switch(B[a]){
case 5: if(d==0) d=x>0?1:3;
else if(y>0) d=2;
break;
case 6: if(d==1) d=y>0?2:0;
else if(x<0) d=3;
break;
case 7: if(d==2) d=x>0?1:3;
else if(y<0) d=0;
break;
case 8: if(d==3) d=y>0?2:0;
else if(x>0) d=1;
break;
case 9: if(x&&d%2==0) d=x>0?1:3;
else if(y&&d%2) d=y>0?2:0;
}
}
void fantasma(F,F1){
d=D[n];
figura(h,R[n]+5,0);
figura(h,d+11,0);
R[n]=!R[n];
if(B[a=H[h]]<10)
if(B[a]<5) d+=K[B[a]-1][d];
else viraje(H[F],H[F1]);
plasmar(h,I[D[n]=d]);
C[n]=h+=b[B[H[h+=I[d]]]];
figura(h,d+11,15);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
textcolor(BLUE);
clrscr();
clock_t T;
for(y=11;y--;v+=320,w-=320)
for(x=13;x--;)
for(n=5;n--;)
if(a=pieza[y][n][x]%16)
switch(n){
case 0: P[0][p[0]++]=P[a][p[a]++]=v+x;
P[a+2][p[a+2]++]=w+x;
break;
case 1: P[a+1][p[a+1]++]=v+x;
P[a+3][p[a+3]++]=v+12-x;
break;
case 4: if(a<2) P[15][p[15]++]=v+x;
P[16][p[16]++]=v+x;
break;
default: if(a<2) P[n+3][p[n+3]++]=w+x;
if(a>1&&a!=3) P[n+9][p[n+9]++]=w+x;
if(a>1&&a!=4) P[n+11][p[n+11]++]=w+x;
}
for(y=50;y--;d-=1120)
for(w=d+5,v=h-=x=32;x--;v++,h--,w+=5,d-=5)
if(B[m]=A[x][49-y]%16)
J[m]=J[m+1]=A[x][49-y]/16-3,
Q[H[h-1]=m]=q+d,
Q[H[v]=m+1]=q+w,
B[m+1]=G[B[m]],
Y[m]=Y[m+1]=y,
X[m++]=x,
X[m++]=63-x;
b[11]-=b[12]=61;
for(m=5;e[e[--m]]=m;e[m]=0);
for(h=3200;h--;)
if(n=H[h]){
for(q=Q[n]-321,y=12;y--;q+=305)
for(x=15;x--;*q++-=*q==1);
if(J[n]>0)
figura(h,J[n]+14,7),
pildoras(-1,1-J[n]);
}
Inicio:
if(!m--) m=3;
while(clock()-T<2);
T=clock();
for(n=4;n--;)
if(h=w=C[n])
switch(S[n]){
case -1: fantasma(1375,h);
S[n]+=B[a]>12;
break;
case 0: if(m%2==n%2)
fantasma(c,h),
figura(h,R[n]+5,n+2);
while(h==c||w==c)
if(getch()==27) return 0;
break;
default: if(m==n)
fantasma(h,c),
figura(h,R[n]+5,--S[n]<12&&R[n]?7:9);
if(h==c||w==c) S[n]=-1;
}
if(x=m%2){
while(kbhit()) N=E=getch();
E=N;
do if(h=e[E]?c+I[e[E]-1]:c)
if(H[h+=b[B[H[h]]]]&&h!=c)
figura(c,x=0,0),
plasmar(c,I[e[L=E]-1]);
else E=x=E!=L?L:0;
while(x);
n=E?H[c=h]:0;
switch(J[n]){
case 2: for(y=4;y--;)
if(S[y]+1) S[y]=40;
case 1: pildoras(1,J[n]-1),
J[n]=0;
}
}
else if(E) x=6;
figura(c,e[E]+x,14);
goto Inicio;
}
Comentarios sobre la versión: 2.3 (0)
No hay comentarios