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: thetooxicoohotmail [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
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!
Dennis Ritchie. Padre de C y cocreador de UNIX.
R.I.P.
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 ;)