#include<dos.h>
#include<stdio.h>
#include<conio.h>
char ficha[8][16]={
" 000000 ",
" 0000000000 ",
" 000000000000 ",
" 00000000000000 ",
" 00000000000000 "};
char far*Q,far*q=(char far*)0xA0000000;
char S[][3]={"0-1","1-0","1/2"," "};
char D[]="012345678036147258048246";
char T[10][3],R[]="%c[%u;%uf%.3s";
char H[10][4],I[2][8],G[10],E;
char J[10][10],M[241][10];
int A[10],B[10],C[10]={9};
int L[10],N[10],V[10],W[10];
int P[242],p[484],ply[10]={9};
int a,c,m,n,t,v,w,x,y=21755;
void figura(f,F){
Q=q+f/3*7680-f%3*24+3631;
for(w=242;w--;*(Q+p[w])=*(Q+p[483-w])=P[w]?F:1);
}
void retirar(f){
t=!t;
B[f]=0;
for(x=G[f];x--;I[t][H[f][x]]--);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
printf("%c[2;25fBlancas Rojas",27);
for(v=5;v--;y-=4992)
for(w=4;w--;){
x=!v&&w?1211:v*5120+w*32+1147;
for(c=16;c--;*(q+x+c*320)=*(q+y+c*320)=7);
for(c=y-x+1,y=x;c--;*(q+x+c)=*(q+x+c+5120)=7);
}
for(c=v=w=y=0;++y<23;w+=298)
for(x=22;x--;p[v++]=w++)
if(y>3&&y<12&&x>2&&x<19) P[v]=ficha[y-4][x-3]!=32;
for(y=9;y--;figura(c++,1),ply[c]=c)
printf("%c[12;%uf%c",27,10+y%3*3,T[c][0]=97+y%3),
printf("%c[%u;7f%c",27,9-y/3*3,T[c][1]=49+y/3);
for(v=24;v--;H[c=D[v]-48][G[c]++]=v/3);
for(v=10;v--;W[v]=w=v%2,V[v]=!w-w);
Inicio:
for(x=y=ply[m]+1;--y>n;) //Reinicio de contadores
for(v=x-y;v--;J[v][y+v]=W[v]);
while(y=C[n]--) //Casilla siguiente
if(!B[--y]){
B[y]=C[++n]=9;
for(x=G[y];x--;)
if(++I[t][H[y][x]]>2) C[n]=0;
if(n==ply[m]&&C[n]) J[C[n]=0][n]=1;
t=!t;
}
if(n){
J[y=0][x=--n]=1;
if(!n){
while(y++<ply[m]*!x) x=J[y-1][y]?0:y;
if(!m) A[c=C[0]]=a,
L[c]=m=x-1,
m+=!x,
C[0]=m?9:c;
else if(m==x){
M[a][L[c]-x]=C[0];
if(--m) C[0]=9;
else for(N[c]=a++,m++,y=9;y--;)
M[a][y]=M[a-1][y];
}
}
else while(y++<ply[m]-n) //Minimax
if(V[y]==J[y-1][++x]-J[y][x]) J[y][x]+=V[y];
if(C[n]<9) retirar(C[n]);
}
else if(m) m=m<L[c]?m+1:0,
retirar(C[0]=m?M[a-1][L[c]-m]:c);
else{
Teclado:
figura(c,1);
do c+=y=(E==75)-(E==77);
while(B[c=c<0?8:c<9?c:0]);
a+=(E==72)-(E==80);
a=a>N[c]*!y?A[c]:a<A[c]?N[c]:a;
figura(c,t?4:7);
for(v=L[c]+1,v+=!v,x=t+v;v--;)
printf(R,27,x/2*2+4,29+x%2*8,S[v==L[c]?t==v%2:3]),
printf(R,27,--x/2*2+4,33-x%2*8,T[v?M[a][v-1]:c]);
while(kbhit()) getch();
while(!(E=getch()));
for(v=16;v--;printf(R,27,4+v/4*2,25+v%4*4,S[3]));
if(E!=13) goto Teclado;
printf(R,27,4,37-t*8,S[v=!L[c]?!t:--ply[0]?3:2]);
while(v<3) if(getch()==27) return 0;
for(x=G[c];x--;I[t][H[c][x]]++);
B[c]=C[a=0]=9;
t=!t;
}
goto Inicio;
}