121
C / C++ / Re:Ta-Te-Ti o Tic-Tac-Toe en lenguaje C.
« en: Enero 02, 2016, 10:58:46 pm »
Un fallo en tu línea 60, donde llamas al verificar. Al cambiar de jugador en el loop anterior, cuando se llegaba a la última partida, el jugador ganador se cambiaba por el jugador perdedor antes de llamar a la función, por lo que "verificar" hacía la verificación con el jugador que perdía y por eso mismo daba 0 y no acababa de salir del bucle.
EDIT: Yo reestructuraría un poco el código para que no quedase tan feo (hace daño a los ojos) el parche que le he puesto. Ademas, en lo personal, no me gusta hacer bucles do while (pese a que ahorran un par de ciclos al procesador...) porque encuentro que afean el código y se hace más complicado leerlo.
Suerte!
EDIT: Yo reestructuraría un poco el código para que no quedase tan feo (hace daño a los ojos) el parche que le he puesto. Ademas, en lo personal, no me gusta hacer bucles do while (pese a que ahorran un par de ciclos al procesador...) porque encuentro que afean el código y se hace más complicado leerlo.
Código: C
- #include <stdio.h>
- #include <windows.h>
- void dTablero( char tablero[] );
- void jugada(int *jugador, char tablero[]);
- int verificar( int *jugador, char a[] );
- int main(void){
- int jugador = 1;
- char tablero[9] = "";
- dTablero( tablero );
- jugada( &jugador, tablero );
- return 0;
- }
- void dTablero( char tablero[] ){
- }
- void jugada(int *jugador, char tablero[] ){
- int i, ch, ok, casillero, final = 0;
- for( i = 0; i < 9; i++){
- do{
- do{
- dTablero( tablero );
- }while(!ok);
- if( tablero[casillero-1] == 0 ){
- if( *jugador == 1 ){
- tablero[casillero-1] = 'X';
- final = verificar( jugador, tablero );
- if (final == 0) *jugador = 2;
- }
- else{
- tablero[casillero-1] = '0';
- final = verificar( jugador, tablero );
- if (final == 0) *jugador = 1;
- }
- }
- else{
- ok = 0;
- }
- }while(!ok);
- if( final > 0 ){
- dTablero( tablero );
- break;
- }
- }
- }
- int verificar( int *jugador, char a[] ){
- int contarAciertos = 0, cj;
- if( *jugador == 1 )
- cj = 264 ;
- else
- cj = 144 ;
- if( a[0] + a[1] + a[2] == cj || a[3] + a[4] + a[5] == cj || a[6] + a[7] + a[8] == cj) contarAciertos++;
- if( a[0] + a[3] + a[6] == cj || a[1] + a[4] + a[7] == cj || a[2] + a[5] + a[8] == cj) contarAciertos++;
- if( a[0] + a[4] + a[8] == cj || a[2] + a[4] + a[6] == cj) contarAciertos++;
- return contarAciertos;
- }
Suerte!