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 N[10][61][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 ply=9,c=1;
int a,b,d,n,t,v,w,x,y;
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--;)
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+=v=(E==77)-(E==75);
while(D[c=c>9?1:!c?9:c]);
figura(c-1,t?41:47);
w+=(E==43)-(E==45);
w=!A[c]?1:!E+!w||v?A[c]:w>A[c]?1:w;
printf("%c[0m",27);
for(y=16;y--;)
printf(R,27,K[y],Q[y],y%2?" ":" ");
if(A[c])
printf("%c[%u;%ufN%c %u",27,K[14],Q[14],167,w);
if(x=X[c])
printf(R,27,K[y],Q[y=2*(x+t)-1],t==x%2?"0-1":"1-0");
for(v=x+!x;v--;)
printf(R,27,K[y],Q[y=2*(v+t)],T[v?N[c][w-1][v-1]:c]);
while(E=kbhit()) getch();
while(!E) E=getch();
if(E!=13) goto Plasmar;
if(--ply*--x==0) return 0;
for(x=G[c];x--;I[t][H[c][x]]++);
C[0][0]=10;
D[c]=1;
E=a=0;
t=!t;
Inicio:
b=ply-a;
for(v=x=b+1;--x>n;)
for(w=v-x;w--;Y[w][w+x]=W[w]);
while(y=--C[a][n])
if(!D[y]){
D[y]=1;
C[a][++n]=10;
for(x=G[y];x--;)
if(++I[t][H[y][x]]>2) C[a][n]=1;
if(n==b&&C[a][n]>1) C[a][n]=Y[0][n]=1;
t=!t;
}
switch(n){
case 0: if(d=!a--) goto Plasmar;
break;
case 1: d=n=y=x=0;
while(!x&&b>y++)
if(!Y[y-1][y]) x=y;
if(!a) A[c=C[0][0]]=0,
X[c]=x;
if(x!=X[c]-a) break;
if(x=a) N[c][y=A[c]][a-1]=C[a][0];
while(x--) N[c][y+1][x]=N[c][y][x];
if(a==X[c]-1) A[c]++;
else C[++a][0]=d=10;
break;
default: Y[y=0][d=--n]=1;
for(x=n+1;b-n>y++;x++)
if(V[y]==Y[y-1][x]-Y[y][x])
Y[y][x]+=V[y];
}
if(d<10){
t=!t;
D[y=C[a][d]]=0;
for(x=G[y];x--;I[t][H[y][x]]--);
}
goto Inicio;
}
Comentarios sobre la versión: 1.4 (0)
No hay comentarios