#include<dos.h>
#include<stdio.h>
#include<conio.h>
char ficha[][16]={
"0000011111100000",
"0001111111111000",
"0011111111111100",
"0111111111111110",
"0111111111111110",
"1111111111111111",
"1111111111111111",
"1111111111111111"};
char far*Q,far*q=(char far*)0xA0000000;
char E,R[]="%c[%u;%uf%c ";
char H[10][4],I[2][8],G[10];
char L[10][10],M[10][10],J[10][10];
int X[]={25,29,33,37,41}; //Tabulacion
int A[10],B[10],C[10]={9};
int N[10],V[10],W[10];
int m[10][10],i[484],p[242];
int c=8,d=8,w=3,y=21755,ply=5;
int g,j,n,t,v,x;
void figura(f,F){
Q=q+f/3*7680-f%3*24+3631;
for(w=242;w--;*(Q+i[w])=*(Q+i[483-w])=F*p[w]+1);
}
int main(){
_AX=0x13;
geninterrupt(0x10);
printf("%c[2;25fBlancas Rojas",27);
for(v=3;v--;)
printf(R,27,3+v*3,7,51-v),
printf(R,27,12,10+v*3,97+v);
for(v=5;v--;w=3,y-=4992)
do{
x=!v&&w?1211:X[w]*8+v*5120+947;
for(n=16;n--;*(q+x+n*320)=*(q+y+n*320)=7);
for(n=y-x+1,y=x;n--;*(q+x+n)=*(q+x+n+5120)=7);
}while(w--);
for(v=w=y=0;y<22;y++,w+=298)
for(x=22;x--;i[v++]=w++)
if(y>2&&y<11&&x>2&&x<19)
p[v]=ficha[y-3][x-3]-48;
for(y=3;y--;)
for(x=3;x--;figura(j,0),B[j++]=1)
for(v=1,w=0,g=4;g--;v-=w,w=1)
if(y-v*2>=0&&y-v*2<3&&x-w*2>=0)
for(--d,n=0;n<3;) c=(y-v*n)*3+x-w*n++,
H[c][G[c]++]=d;
for(j=n=v=0;v<10;w=v%2,V[v]=!w-w,W[v++]=w*2);
Inicio:
for(x=v=ply+1;--v>n;) //Reinicio de contadores
for(w=x-v;w--;J[w][v+w]=W[w]);
while(c=C[n]--) //Casilla siguiente
if(B[--c]){
B[A[n]=c]=0;
C[++n]=9;
for(g=G[c];g--;)
if(++I[t][H[c][g]]>2) C[n]=0;
if(n==ply&&C[n]) J[C[n]=0][n]=1;
t=!t;
}
if(n){
J[0][--n]=1;
B[c=A[n]]=1;
t=!t;
for(g=G[c];g--;I[t][H[c][g]]--);
if(n){
if(!J[0][x=n+1]&&J[n-x%2][x])
for(v=x;--v;m[x][v]=A[v]);
for(y=0;y++<ply-n;x++) //Minimax
if(v=J[y-1][x]-J[y][x])
if(V[y]==(v>0)-(v<0)) J[y][x]+=v;
goto Inicio;
}
for(y=0;y++<ply;)
if(L[j][N[j]=x=y]=J[y-1][y]) M[j][y]=0;
else for(v=y+1,y=ply;--v;)
M[j][v]=m[x][v]+1;
M[j++][0]=c+1;
goto Inicio;
}
while(!j){
gotoxy(25+t*12,4);
printf(d>8?"1/2":t?"1-0":"0-1");
if(getch()==27) return 0;
}
Teclado:
for(y=N[n]+1;--y;)
if(c=M[n][y-1])
gotoxy(33-(x=y+t)%2*4,4+(y-!t)/2*2),
printf("%c%c",99-c%3,51-(--c/3)),
gotoxy(25+x%2*12,4+x/2*2),
printf(L[n][y]?"":t==y%2?"0-1":"1-0");
figura(c,t?3:6);
while(kbhit()) getch();
while(!(E=getch()));
for(v=4;v--;)
for(w=4;w--;printf(R,27,4+v*2,X[w],32));
if(E!=13){
n=E==77?++n*(n<j):j*!n+n-1;
figura(c,0);
goto Teclado;
}
for(g=G[c];g--;)
if(++I[t][H[c][g]]>2) ply=0;
if(ply) ply=8-d++;
C[j=n=0]=ply?9:0;
B[c]=0;
t=!t;
goto Inicio;
}
Comentarios sobre la versión: 1.2 (0)
No hay comentarios