/* * Tic-tac-toe * *********** * * Versión: 1.0 * Autor: TheTooxicoo * E-mail: [email protected] **/#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; } } }}
if( ((tablero[0][0] == SIMBOLO_1) && (tablero[0][1] == SIMBOLO_1) && (tablero[0][2] == SIMBOLO_1)) || ((tablero[0][0] == SIMBOLO_2) && (tablero[0][1] == SIMBOLO_2) && (tablero[0][2] == SIMBOLO_2)))
if( tablero[0][0] == tablero[1][1] == tablero[2][2] )
if( 1 == tablero[2][2] )
if( 0 == tablero[2][2] )
if ( ( tablero[0][0] == tablero[1][1] ) && ( tablero[1][1] == tablero[2][2] ) )
Yo he notado un error, tu declaraste a salir como una variable entera y la inicializaste como 0, el punto es que tu utilizaste while y pusiste como condicion ( !salir ) .. pero en este caso (segun yo) seria infinitita la iteraccion ya que una variable entera jamas puede tomar un valor true o false....
if (!valor){ // Podría entrar aquí aunque valor sea un puntero válido. Desgraciadamente no hay ninguna forma mejor de comprobar que el puntero es válido, porque NULL también vale cero.}
Yo he notado un error, tu declaraste a salir como una variable entera y la inicializaste como 0, el punto es que tu utilizaste while y pusiste como condicion ( !salir ) .. pero en este caso (segun yo) seria infinitita la iteraccion ya que una variable entera jamas puede tomar un valor true o false.... en todo caso, tendrias que declarar la variable salir como bool...bool salir = true;
Amm... en C *no* existe ese tipo de variables.