Anuncios Google

[Problema] [C] Juego de 3 en raya no detecta al ganador.

Hola compañeros.

Llevo un par de días intentando hacer un juego básico del 3 en raya o tic-tac-toe pero tengo un problema y es que las funciones que he creado para que detecten al ganador no funcionan o no de la manera que yo esperaba :(

Les dejo el code por si le quieresn hechar un vistazo y arrojar algo de luz en el asunto ;)

/*
 * Tic-tac-toe
 * ***********
 * 
 * Versión: 1.0
 * Autor: TheTooxicoo
 * E-mail: thetooxicooathotmail [dot] com
 *
*/
 
#include <stdio.h>
 
#define SIMBOLO_1 'X'
#define SIMBOLO_2 'O'
 
int i;
 
int salir = 0;
 
char tablero[3][3] = {
  { ' ', ' ', ' ' },
  { ' ', ' ', ' ' },
  { ' ', ' ', ' ' }
};
 
char ocupadas[3][3] = {
  { 0, 0, 0 },
  { 0, 0, 0 },
  { 0, 0, 0 }
};
 
int fila, columna, turno = 1;
 
int comprobarHorizontales()
{
  if( tablero[0][0] == tablero[0][1] == tablero[0][2] )
  {
    return 1;
  }
  if( tablero[1][0] == tablero[1][1] == tablero[1][2] )
  {
    return 2;
  }
  if( tablero[2][0] == tablero[2][1] == tablero[2][2] )
  {
    return 3;
  }
  return 0;
}
 
int comprobarVerticales()
{
  if( tablero[0][0] == tablero[1][0] == tablero[2][0] )
  {
    return 1;
  }
  if( tablero[0][1] == tablero[1][1] == tablero[2][1] )
  {
    return 2;
  }
  if( tablero[0][2] == tablero[1][2] == tablero[2][2] )
  {
    return 3;
  }
  return 0;
}
 
int comprobarDiagonales()
{
  if( tablero[0][0] == tablero[1][1] == tablero[2][2] )
  {
    return 1;
  }
  if( tablero[0][2] == tablero[1][1] == tablero[2][0] )
  {
    return 2;
  }
  return 0;
}
 
void ganador( int jugador )
{
  printf( "El jugador %i ha ganado.", jugador );
 
  getchar();
 
  for( i=0; i<3; i++ )
  {
    tablero[0][i] = ' ';
  }
  for( i=0; i<3; i++ )
  {
    tablero[1][i] = ' ';
  }
  for( i=0; i<3; i++ )
  {
    tablero[2][i] = ' ';
  }
 
  for( i=0; i<3; i++ )
  {
    ocupadas[0][i] = 0;
  }
  for( i=0; i<3; i++ )
  {
    ocupadas[1][i] = 0;
  }
  for( i=0; i<3; i++ )
  {
    ocupadas[2][i] = 0;
  }
}
 
int main()
{
  while( !salir )
  {
    system( "clear" );
 
    printf( "Turno: %i\n", turno );
    printf( " - - -\n" );
    printf( "|%c|%c|%c|\n", tablero[0][0], tablero[0][1], tablero[0][2] );
    printf( "|%c|%c|%c|\n", tablero[1][0], tablero[1][1], tablero[1][2] );
    printf( "|%c|%c|%c|\n", tablero[2][0], tablero[2][1], tablero[2][2] );
    printf( " - - -\n" );
 
    printf( "Opcion(fila[espacio]columna): " );
    scanf( "%i %i", &fila, &columna );
    if( fila>0 && fila<4 && columna>0 && columna<4 && ocupadas[fila-1][columna-1]==0 )
    {
      if( turno == 1 )
      {
	tablero[fila-1][columna-1] = SIMBOLO_1;
	ocupadas[fila-1][columna-1] = 1;
	if( comprobarVerticales()!=0 )
	{
	  ganador( turno );
	}
	if( comprobarHorizontales()!=0 )
	{
	  ganador( turno );
	}
	if( comprobarDiagonales()!=0 )
	{
	  ganador( turno );
	}
	turno = 2;
      }
      else if( turno == 2 )
      {
	tablero[fila-1][columna-1] = SIMBOLO_2;
	ocupadas[fila-1][columna-1] = 2;
	if( comprobarVerticales()!=0 )
	{
	  ganador( turno );
	}
	if( comprobarHorizontales()!=0 )
	{
	  ganador( turno );
	}
	if( comprobarDiagonales()!=0 )
	{
	  ganador( turno );
	}
	turno = 1;
      }
     }
  }
}

Las funciones en cuestión son comprobarHorizontales(), comprobarVerticales() y comprobarDiagonales().

Muchas gracias :D



Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de joserc87

El error está en los 2 == == seguidos

O almenos uno de los errores son los == (he dejado de leer encuanto lo he visto xD). Ten en cuenta que a == b devuelve 1 si es verdadero o 0 si es falso, luego

(a==b)==c devolverá true si c es igual a 1 y a==b o si c==0 y a!=b. Si c no es ni 1 ni 0 siempre dará false. Lo que tienes que hacer es (a==b)&&(a==c) por ejemplo.

Saludos!


Be pointer my friend...

Dennis Ritchie. Padre de C y cocreador de UNIX.

R.I.P.

 

Imagen de User170294

OK xD

Nunca lo había probado pero estaba absolutamente convencido de que funcionaría perfectamente xD

Ahora lo miro y comento haber como va...

Saludos ;)


Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.