Ver Mensaje Individual
  #1 (permalink)  
Antiguo 14/11/2013, 09:38
fepom
 
Fecha de Ingreso: noviembre-2013
Mensajes: 3
Antigüedad: 6 años
Puntos: 1
Juego del Gato en C

Hola, bueno hice el juego del Gato en C para cualquier dimension del tablero, sin embargo, aveces el juego termina antes de lo que deberia, quizas hay algun error o algo asi. Si me pudieran ayudar seria genial :D

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;
}