Código:
#include <stdio.h> #include <stdlib.h> #include <math.h> int main (int argc, char *argv[]) { system("clear"); int **m; int i,filas,columnas; printf("Dimension del tablero YxY:\n"); scanf("%d",&filas); system("clear"); columnas=filas; m=calloc(filas, sizeof(int *)); for (i = 0; i < filas; i += 1) { m[i]=calloc(columnas, sizeof(int)); } int tope=pow(filas,2); int turnos=1; int f,c,a,b; int temp=filas; int fil,col,col2,gana; int diag; printf(" "); for (i = 1; i <= filas; i += 1) { printf("%d ",i); } printf("\n"); for (f = 0; f < filas; f += 1) { printf("%d ",f+1); for (c = 0; c < columnas; c += 1) { if (m[f][c]==0) { printf(". "); } } printf("\n"); } do { printf("Turno numero: %d\n",turnos); printf("Turno Jugador X:\n"); scanf("%d %d",&a,&b); while (a>filas || b>filas || a<1 || b<1 || m[a-1][b-1]==1 || m[a-1][b-1]==2) { if (a>filas || b>filas || a<1 || b<1) { printf("Casilla Invalida\n"); printf("Ingrese otra posicion\n"); scanf("%d %d",&a,&b); } else if (m[a-1][b-1]==1 || m[a-1][b-1]==2) { printf("Casilla Ocupada!\n"); printf("Ingrese otra posicion:\n"); scanf("%d %d",&a,&b); } } system("clear"); m[a-1][b-1]=1; printf(" "); for (i = 1; i <= filas; i += 1) { printf("%d ",i); } printf("\n"); for (f = 0; f < filas; f += 1) { printf("%d ",f+1); for (c = 0; c < columnas; c += 1) { if (m[f][c]==0) { printf(". "); } if (m[f][c]==1) { printf("X "); } if (m[f][c]==2) { printf("O "); } } printf("\n"); } /*-------------------------FILAS-------------------------*/ fil=0; for (f = 0; f < filas; f += 1) { fil=0; for (c = 0; c < columnas; c += 1) { if (m[f][c]==1) { fil++; } } if (fil==columnas) { printf("¡¡¡¡JUGAGOR X HA GANADO!!!! 4\n"); return 0; } } /*-------------------------FIN FILAS-------------------------*/ /*-------------------------COLUMNAS-------------------------*/ col=0; for (c = 0; c < columnas; c += 1) { col=0; for (f = 0; f < filas; f += 1) { if (m[f][c]==1) { col++; } } if (col==columnas) { printf("¡¡¡¡JUGAGOR X HA GANADO!!!! 3\n"); return 0; } } /*-------------------------FIN COLUMNAS-------------------------*/ /*-------------------------DIAGONALES-------------------------*/ for (f = 0; f < filas; f += 1) { fil=0; for (c = 0; c < columnas; c += 1) { if (m[0+c][0+c]==1) { fil++; } } if (fil==columnas) { printf("¡¡¡¡JUGAGOR X HA GANADO!!!! 2\n"); return 0; } } temp=filas; diag=0; for (f = 0; f < filas; f += 1) { for (c = 0; c < columnas; c += 1) { if (m[f][temp-1]==1) { diag++; temp=temp-1; } } if (diag==columnas) { printf("¡¡¡¡JUGAGOR X HA GANADO!!!! 1\n"); return 0; } } /*-------------------------FIN DIAGONALES-------------------------*/ if (turnos==tope) { break; } turnos++; printf("turno numero: %d\n",turnos); printf("Turno Jugador O:\n"); scanf("%d %d",&a,&b); while (a>filas || b>filas || a<1 || b<1 || m[a-1][b-1]==1 || m[a-1][b-1]==2) { if (a>filas || b>filas || a<1 || b<1) { printf("Casilla Invalida\n"); printf("Ingrese otra posicion\n"); scanf("%d %d",&a,&b); } else if (m[a-1][b-1]==1 || m[a-1][b-1]==2) { printf("Casilla Ocupada!\n"); printf("Ingrese otra posicion:\n"); scanf("%d %d",&a,&b); } } system("clear"); m[a-1][b-1]=2; printf(" "); for (i = 1; i <= filas; i += 1) { printf("%d ",i); } printf("\n"); for (f = 0; f < filas; f += 1) { printf("%d ",f+1); for (c = 0; c < columnas; c += 1) { if (m[f][c]==0) { printf(". "); } if (m[f][c]==1) { printf("X "); } if (m[f][c]==2) { printf("O "); } } printf("\n"); } /*-------------------------FILAS-------------------------*/ fil=0; for (f = 0; f < filas; f += 1) { fil=0; for (c = 0; c < columnas; c += 1) { if (m[f][c]==2) { fil++; } } if (fil==columnas) { printf("¡¡¡¡JUGAGOR O HA GANADO !!!!\n"); return 0; } } /*-------------------------FIN FILAS-------------------------*/ /*-------------------------COLUMNAS-------------------------*/ col=0; for (c = 0; c < columnas; c += 1) { col=0; for (f = 0; f < filas; f += 1) { if (m[f][c]==2) { col++; } } if (col==columnas) { printf("¡¡¡¡JUGAGOR O HA GANADO !!!!\n"); return 0; } } /*-------------------------FIN COLUMNAS-------------------------*/ /*-------------------------DIAGONALES-------------------------*/ for (f = 0; f < filas; f += 1) { fil=0; for (c = 0; c < columnas; c += 1) { if (m[0+c][0+c]==2) { fil++; } } if (fil==columnas) { printf("¡¡¡¡JUGAGOR O HA GANADO !!!!\n"); return 0; } } temp=filas; diag=0; for (f = 0; f < filas; f += 1) { for (c = 0; c < columnas; c += 1) { if (m[f][temp-1]==2) { diag++; temp=temp-1; } } if (diag==columnas) { printf("¡¡¡¡JUGAGOR O HA GANADO!!!!\n"); return 0; } } /*-------------------------FIN DIAGONALES-------------------------*/ turnos++; } while (tope>=turnos); printf("<<<EMPATE>>> \n"); for (i = 0; i < filas; i += 1) { free(m[i]); } free(m); return 0; }