3 en raya
C/Visual C
Actualizado el 30 de Octubre del 2024 por Adelino (27 códigos) (Publicado el 27 de Agosto del 2024)
5.640 visualizaciones desde el 27 de Agosto del 2024
Juego de Tres en raya en pantalla de texto.


#include<stdio.h>
#include<conio.h>
char P[]="123456789147258369159357";
char E,T[10][3],R[]="%c[%u;%uf%s";
int H[10][4],I[2][8],G[10];
int N[10][61][8],Y[10][10];
int D[10],X[10],V[10],W[10];
int A[10],K[16],k[16];
int C[10]={10},ply[10]={9};
int c=1,d,n,t,v,w,x,y=1;
void figura(f,F){
printf("%c[%u;%um",27,0,F);
printf(R,27,y=5+f/3*5,x=18-f%3*6," ");
printf(R,27,++y,--x," ");
printf(R,27,++y,x," ");
printf(R,27,++y,++x," ");
}
int main(){
textmode(C40);
_setcursortype(_NOCURSOR);
for(v=9;v--;ply[y]=y++)
printf("%c[20;%uf%c",27,7+v%3*6,T[y][0]=97+v%3),
printf("%c[%u;2f%c",27,16-v/3*5,T[y][1]=49+v/3);
printf(R,27,3,25,"Blancas Rojas");
printf(R,27,4,25,"------- -------");
for(v=4;v--;printf(R,27,4+v*5,5,"----- ----- -----"));
for(w=1,v=16;v--;K[v]=y-1,k[v]=x,w=!w)
printf(R,27,y=6+v/4*2,x=25+v%4*4-w,w?"---":"--");
for(v=10;v--;W[v]=w=v%2,V[v]=!w-w,X[v]--);
for(v=24;v--;H[w][G[w=P[v]-48]++]=v/3);
Plasmar:
figura(c-1,40);
do c+=w=(E==75)-(E==77);
while(D[c=c>9?1:!c?9:c]);
figura(c-1,t?41:47);
v+=(E==43)-(E==45);
v=!A[c]?1:!E+!v||w?A[c]:v>A[c]?1:v;
printf("%c[0m",27);
for(y=16;y--;printf(R,27,K[y],k[y],y%2?" ":" "));
if(x=X[c]+1)
printf(R,27,K[y],k[y=(x+t)*2-1],t==x%2?"0-1":"1-0"),
printf("%c[%u;%ufN§ %u",27,K[14],k[14],v);
for(x+=!x;x--;)
printf(R,27,K[y],k[y=(x+t)*2],T[x?N[c][v-1][x-1]:c]);
E=getch();
while(E!=13) goto Plasmar;
if(--ply[0]*X[c]==0) return 0;
for(x=G[c];x--;I[t][H[c][x]]++);
D[c]=C[E=0]=10;
t=!t;
Inicio:
for(v=x=ply[d]+1;--v>n;) //Reinicio de contadores
for(w=x-v;w--;Y[w][v+w]=W[w]);
while(y=--C[n]) //Casilla siguiente
if(!D[y]){
D[y]=C[++n]=10;
for(x=G[y];x--;)
if(++I[t][H[y][x]]>2) C[n]=1;
if(n==ply[d]&&C[n]>1) C[n]=Y[0][n]=1;
t=!t;
}
switch(n){
case 0: if(!d) goto Plasmar;
else if(x=X[c]-d++) C[0]=N[c][A[c]][x-1];
else C[d=0]=c;
break;
case 1: for(n=x=y=0;!y&&ply[d]>x++;)
if(!Y[x-1][x]) y=x;
if(v=y>=d)
switch(d){
case 0: A[c=C[0]]=0;
X[c]=--y;
if(v=y>0) d=y;
break;
case 1: N[c][y=A[c]++][x=X[c]-1]=C[v=0];
while(x--) N[c][y+1][x]=N[c][y][x];
break;
default: N[c][A[c]][X[c]-d--]=C[0];
}
if(!v) break;
C[0]=10;
goto Inicio;
default: Y[y=0][--n]=1; //Minimax
for(x=n+1;ply[d]-n>y++;x++)
if(V[y]==Y[y-1][x]-Y[y][x])
Y[y][x]+=V[y];
}
t=!t;
D[y=C[n]]=0;
for(x=G[y];x--;I[t][H[y][x]]--);
goto Inicio;
}
Comentarios sobre la versión: 1.2 (0)
No hay comentarios