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 B[10],N[250][6],H[10][4];
int C[10][10],Y[10][10];
int I[2][8],K[16],Q[16];
int A[10],D[10],G[10];
int X[10],V[10],W[10];
int a,b,n,t,v,w,x,y;
int c=1,ply=9;
void figura(f,F){
printf("%c[%u;%um",27,0,F);
printf(R,27,y=15-f/3*5,x=6+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(x=10;x--;W[x]=y=x%2,V[x]=!y-y);
for(x=24;x--;H[y=P[x]-48][G[y]++]=x/3);
for(x=9;y=x--;D[y]=1)
printf("%c[20;%uf%c",27,7+x%3*6,T[y][0]=97+x%3),
printf("%c[%u;2f%c",27,16-x/3*5,T[y][1]=49+x/3);
printf(R,27,3,25,"Blancas Rojas");
printf(R,27,4,25,"------- -------");
for(w=1,v=16;v--;w=!w,K[v]=y-1,Q[v]=x)
printf(R,27,y=6+v/4*2,x=25+v%4*4-w,w?"---":"--");
for(y=4;y--;printf(R,27,4+y*5,5,"----- ----- -----"));
Plasmar:
figura(c-1,40);
do c+=a=(E==77)-(E==75);
while(!D[c=c>9?1:!c?9:c]);
figura(c-1,t?41:47);
b+=(E==43)-(E==45);
b=b<=A[c]||a?B[c]:b>B[c]?A[c]+1:b;
printf("%c[0m",27);
for(y=16;y--;printf(R,27,K[y],Q[y],y%2?" ":" "));
if(x=X[c])
printf(R,27,K[y],Q[y=2*(x+t)-1],t==x%2?"0-1":"1-0"),
printf("%c[%u;%ufN%c %u",27,K[14],Q[14],167,b-A[c]);
for(y=x+!x;y--;)
printf(R,27,K[2*(y+t)],Q[2*(y+t)],T[y?N[b-1][y-1]:c]);
while(E=kbhit()) getch();
while(!E) E=getch();
if(E!=13) goto Plasmar;
if(!--ply||!--x) return 0;
for(x=G[c];x--;I[t][H[c][x]]++);
C[0][0]=10;
D[c]=a=b=0;
t=!t;
Inicio:
for(v=w=ply-a;w>n;w--)
for(x=v+1,y=x-w;y--;Y[y][--x]=W[y]);
while(y=--C[a][n])
if(D[y]){
D[y]--;
C[a][++n]=10;
for(x=G[y];x--;)
if(++I[t][H[y][x]]>2) C[a][n]=1;
if(n==v&&C[a][n]>1) C[a][n]=Y[0][n]=1;
t=!t;
}
switch(n){
case 0: if(!a--) goto Plasmar;
break;
case 1: for(n=0;y<v&&Y[y][y+1];y++);
x=y<v?y+1:0;
if(!a) X[c=C[0][0]]=x,
A[c]=B[c]=b;
if(x!=X[c]-a) break;
if(x=a) N[b][a-1]=C[a][0];
while(x--) N[b+1][x]=N[b][x];
if(a<X[c]-1) C[++a][0]=10;
else if(B[c]=++b) break;
goto Inicio;
default: Y[0][--n]=1;
for(x=n+1;v-n>y++;x++)
if(V[y]==Y[y-1][x]-Y[y][x])
Y[y][x]+=V[y];
}
t=!t;
D[y=C[a][n]]++;
for(x=G[y];x--;I[t][H[y][x]]--);
goto Inicio;
}
Comentarios sobre la versión: 1.6 (0)
No hay comentarios