Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: m@o_614 en 12 Abril 2012, 05:09 am



Título: Juego del gato
Publicado por: m@o_614 en 12 Abril 2012, 05:09 am
Saludos
Tengo un problema con mi codigo del Juego del Gato que estoy haciendo, el programa me tiene que inicializar la matriz vacia, y despues cuando le pido al usuario que ingrese la posición de la fila y la columna me tiene que imprimir la letra(X u O) en la casilla.Pero mi codigo por cada vez que le pide al usuario la posicion me las imprime en tableros diferentes en vez de en uno solo

Código
  1. #define MAX_FILA 3
  2. #define MAX_COLUM 3
  3. #define MAX_JUG 2
  4. #define MAX_TURNO 9
  5.  
  6. void turno_jugador();
  7. void imprimir_tablero(char letra, int fila, int columna);
  8.  
  9. int main()
  10. {
  11.    printf("Juego del Gato v1.0\n");
  12.    turno_jugador();
  13.    return 0;
  14. }
  15.  
  16. void imprimir_tablero(char letra, int fila, int columna)
  17. {
  18.    int i,j;
  19.    char gato[MAX_FILA][MAX_COLUM];
  20.    for(i=0;i<MAX_FILA;i++)
  21.    {
  22.        for(j=0;j<MAX_COLUM;j++)
  23.        {
  24.            if((fila==i)&&(columna==j))
  25.               printf("%c",letra,gato[i][j]);
  26.            else
  27.               printf(" ",gato[i][j]);
  28.            if(j<MAX_COLUM)
  29.               printf("|");
  30.        }
  31.        printf("\n");
  32.        if(i<MAX_FILA)
  33.           printf("______");
  34.        printf("\n");
  35.    }
  36. }
  37.  
  38. void turno_jugador()
  39. {
  40.    int fila,columna,i,turno;
  41.    char jugador[]={'X','O'},letra;
  42.    do
  43.    {
  44.        turno=1;
  45.        for(i=0;i<MAX_JUG;i++)
  46.        {
  47.            printf("Es turno del jugador %c\n",jugador[i]);
  48.            printf("Dime la fila (1 a 3): ");
  49.            scanf("%d",&fila);
  50.            printf("Dime la columna(1 a 3): ");
  51.            scanf("%d",&columna);
  52.            letra=jugador[i];
  53.            imprimir_tablero(letra,fila,columna);
  54.            turno++;
  55.        }
  56.    }while(turno<=MAX_TURNO);
  57. }
  58.  

y no tengo idea de como modificarlo
de antemano gracias


Título: Re: Juego del gato
Publicado por: Ferno en 13 Abril 2012, 02:00 am
Es porque estás creando tantos tableros como turnos existen. Cada vez que entras a la función "imprimir_tablero" estás creando una nueva matriz (en este caso un nuevo tablero).
Para solucionarlo, debés crear el tablero matriz en la función "turno_jugador" y pasar la matriz como parámetro en la función "imprimir_tablero".


Título: Re: Juego del gato
Publicado por: durasno en 13 Abril 2012, 02:12 am
Hola!  algunos errores y cosas para mejorar:
1º en la funcion turno_jugador() al inicializar turno=1 dentro del do-while lo que estas haciendo es generar un ciclo infinito, si bien turno se incremento dentro del for, al salir del for, turno se vuelve a inicializar en 1 por ende nunca termina. Deberias hacerlo fuera del do-while.

2º printf("%c",letra,gato[j]);
¿por que en los printf de la funcion imprimir_tablero() le pasas como argumento el arreglo gato? si no lo estas utilizando para nada no es necesario ponerlo

3º  if(j<MAX_COLUM)
               printf("|");
La condicion del if no es necesaria, esa misma condicion esta en el for. Solo basta con poner printf("|"); Al igual q if(i<MAX_FILA)

4º el programa pide filas y columnas del 1 a 3, osea el usuario va ingresar un numero entre 1 y 3, pero los arreglos se inician en 0, en algun momento deberias restarle 1 a esos numeros ingresado por el usuario; sino no se va a imprimir bien

5º Lo mas importante es lo que dijo Ferno, deberias pasar una matriz a la funcion imprimir_tablero() pero antes(o despues ) debes guardar "letra" en la matriz. Ademas debes cambiar esta condicion:
            if((fila==i)&&(columna==j))
               printf("%c",letra,gato[j]);
por una donde puedas imprimir todas la letras en el tablero y no solo una

Cualquier cosa segui preguntando, saludos


Título: Re: Juego del gato
Publicado por: m@o_614 en 13 Abril 2012, 22:55 pm
saludos

gracias ferno y durasno estuve checando las modificaciones que tenía que hacerle al código pero no pude hacer la mas importante, no pude mandar la matriz de nuevo a la función imprimir_matriz aqui esta el codigo

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4. #define MAX_FILA 3
  5. #define MAX_COLUM 3
  6. #define MAX_JUG 2
  7. #define MAX_TURNO 9
  8.  
  9. void turno_jugador();
  10. void imprimir_tablero(char letra, int fila, int columna);
  11.  
  12. int main()
  13. {
  14.    printf("Juego del Gato v1.0\n");
  15.    turno_jugador();
  16.    return 0;
  17. }
  18.  
  19. void imprimir_tablero(char letra, int fila, int columna)
  20. {
  21.   ??????
  22. }
  23.  
  24. void turno_jugador()
  25. {
  26.    int fila,columna,i,j,turno;
  27.    char jugador[]={'X','O'},letra;
  28.     for(i=0;i<MAX_FILA;i++)//cree la matriz en la función turno_jugador.
  29.    {
  30.        for(j=0;j<MAX_COLUM;j++)
  31.        {
  32.            if((fila-1==i)&&(columna-1==j))
  33.               printf("%c",letra);
  34.            else
  35.               printf(" ");
  36.               printf("|");
  37.        }
  38.        printf("\n");
  39.           printf("______");
  40.        printf("\n");
  41.    }
  42.    turno=1;
  43.    do
  44.    {
  45.        for(i=0;i<MAX_JUG;i++)
  46.        {
  47.            printf("Es turno del jugador %c\n",jugador[i]);
  48.            printf("Dime la fila (1 a 3): ");
  49.            scanf("%d",&fila);
  50.            printf("Dime la columna(1 a 3): ");
  51.            scanf("%d",&columna);
  52.            letra=jugador[i];
  53.            imprimir_tablero();//aqui ya no supe como mandarle la matriz
  54.            turno++;
  55.        }
  56.    }while(turno<=MAX_TURNO);
  57. }
  58.  


Título: Re: Juego del gato
Publicado por: durasno en 14 Abril 2012, 01:14 am
Hola! nose porque pusiste las dos funciones en una, o tipiaste mal??

Tomando como ejemplo el primero programa que hiciste solo necesitas un par de cambios:
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. #define MAX_FILA 3
  6. #define MAX_COLUM 3
  7. #define MAX_JUG 2
  8. #define MAX_TURNO 9
  9.  
  10. void turno_jugador();
  11. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM]);
  12.  
  13. int main()
  14. {
  15.    printf("Juego del Gato v1.0\n");
  16.    turno_jugador();
  17.    return 0;
  18. }
  19.  
  20. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM])
  21. {
  22.    int i,j;
  23.    for(i=0;i<MAX_FILA;i++)
  24.    {
  25.        for(j=0;j<MAX_COLUM;j++)
  26.        {
  27.            if((gato[i][j]=='X')||(gato[i][j]=='O'))
  28.               printf("%c",gato[i][j]);
  29.            else
  30.               printf(" ");
  31.               printf("|");
  32.        }
  33.        printf("\n");
  34.           printf("______");
  35.        printf("\n");
  36.    }
  37. }
  38.  
  39. void turno_jugador()
  40. {
  41.    int fila,columna,i,turno=1;
  42.    char jugador[]={'X','O'},letra;
  43.    char gato[MAX_FILA][MAX_COLUM];
  44.    do
  45.    {
  46.        for(i=0;i<MAX_JUG;i++)
  47.        {
  48.            printf("Es turno del jugador %c\n",jugador[i]);
  49.            printf("Dime la fila (1 a 3): ");
  50.            scanf("%d",&fila);
  51.            printf("Dime la columna(1 a 3): ");
  52.            scanf("%d",&columna);
  53.            letra=jugador[i];
  54.            gato[fila-1][columna-1]=letra; // guardo la letra del jugador en la matriz
  55.            imprimir_tablero(gato); // paso la matriz a la funcion
  56.            turno++;
  57.        }
  58.    }while(turno<=MAX_TURNO);
  59. }

Cambie el prototipo de la funcion imprimir_tablero().
Defini una matriz en turno_jugador() donde le guardo la letra correspondiente.
Y cambie la condicion de imprimir las letras

Saludos


Título: Re: Juego del gato
Publicado por: s00rk en 14 Abril 2012, 02:09 am
Yo le agregaria ahi en el codigo un chequeo que en la posicion que se decea ingresar que este vacia o que no exista una X u O, y si en tal posicion existe alguna de ellas vuelva a pedir la posicion.


Título: Re: Juego del gato
Publicado por: durasno en 14 Abril 2012, 02:28 am
Claro eso seria optimizar el codigo pero primero lo basico xD. Ademas de lo que dijo s00rk tambien podrias comprobar que el usuario no ingrese un numero menor a 1 y mayor a 3

Saludos


Título: Re: Juego del gato
Publicado por: s00rk en 14 Abril 2012, 03:08 am
Bueno aqui yo hice el propio aunque aun me falto hacer el codigo para checar si hubi un ganador hehehe! xD
Solo puse que siempre regrese 0, pero ahi se ocupa solo checar la tabla y pues que recorra y ya si encuentra un ganador pues regresa el numero del jugador 1 si el ganador es el X o 2 si el ganador es el O. Por ahora pues debo salir so lo hice rapido, si tengo tiempo luego pues hago la parte que me falto si es que alguien no la hace por aca xP

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. #define MAX_TURNO 9
  5. #define COLUMNA 3
  6. #define FILA 3
  7.  
  8. void MostrarTabla(char TABLA[FILA][COLUMNA]);
  9. int ChecarGanador(char TABLA[FILA][COLUMNA]);
  10.  
  11. int main()
  12. {
  13. char TABLA[FILA][COLUMNA];
  14. int turno = 1, fila, columna, ganador = 0;
  15. bool bandera = false;
  16. MostrarTabla(TABLA);
  17.  
  18. do{
  19. ganador = ChecarGanador(TABLA);
  20. if(ganador != 0)
  21. {
  22. cout << "El Ganador es el JUGADOR [ " << ganador << " ]" << endl;
  23. break;
  24. }
  25. cout << "Turno del jugador: " << ((turno%2 == 0) ? "2" : "1") << endl;
  26. do{
  27. bandera = false;
  28. do{
  29. cout << "Selecciona Fila (1 - 3) : ";
  30. cin >> fila;
  31. }while(fila > 3 && fila < 1);
  32. do{
  33. cout << "Selecciona Columna (1 - 3) : ";
  34. cin >> columna;
  35. }while(columna > 3 && columna < 1);
  36. if(TABLA[fila-1][columna-1] != -52)
  37. {
  38. bandera = true;
  39. cout << "Esta posicion ya fue seleccionada" << endl;
  40. }else
  41. TABLA[fila-1][columna-1] = ((turno%2 == 0) ? 'O' : 'X');
  42.  
  43. }while(bandera);
  44. MostrarTabla(TABLA);
  45. turno++;
  46. }while(MAX_TURNO >= turno);
  47.  
  48. if(ganador == 0)
  49. {
  50. cout << "Empate!! ;D" << endl;
  51. }
  52. cout << "Fin del Juego!" << endl;
  53. cin.get();cin.get();
  54. return 0;
  55. }
  56.  
  57. void MostrarTabla(char TABLA[FILA][COLUMNA])
  58. {
  59. cout << endl << "----------" << endl;
  60. for(int x = 0; x < FILA; x++)
  61. {
  62. for(int xx = 0; xx < COLUMNA; xx++)
  63. {
  64. cout << "| " << ((TABLA[x][xx] != -52) ? TABLA[x][xx] : ' ');
  65. }
  66. cout << "|" << endl;
  67. }
  68. cout << "----------" << endl;
  69. }
  70.  
  71. int ChecarGanador(char TABLA[FILA][COLUMNA])
  72. {
  73. int p1 = 0, p2 = 0;
  74.  
  75. // Horizontal
  76. for(int x = 0; x < FILA; x++)
  77. {
  78. for(int xx = 0; xx < COLUMNA; xx++)
  79. {
  80. if(TABLA[x][xx] == 'X')
  81. p1++;
  82. else if(TABLA[x][xx] == 'O')
  83. p2++;
  84. }
  85. if(p1 == 3)
  86. return 1;
  87. else if(p2 == 3)
  88. return 2;
  89. else{
  90. p1 = 0;
  91. p2 = 0;
  92. }
  93. }
  94. // Vertical
  95. for(int x = 0; x < COLUMNA; x++)
  96. {
  97. for(int xx = 0; xx < FILA; xx++)
  98. {
  99. if(TABLA[xx][x] == 'X')
  100. p1++;
  101. else if(TABLA[xx][x] == 'O')
  102. p2++;
  103. }
  104. if(p1 == 3)
  105. return 1;
  106. else if(p2 == 3)
  107. return 2;
  108. else{
  109. p1 = 0;
  110. p2 = 0;
  111. }
  112. }
  113.  
  114. // Diagonales
  115. if(TABLA[0][0] == 'X' && TABLA[1][1] == 'X' && TABLA[2][2] == 'X')
  116. return 1;
  117. else if(TABLA[0][0] == 'O' && TABLA[1][1] == 'O' && TABLA[2][2] == 'O')
  118. return 2;
  119. else if(TABLA[0][2] == 'X' && TABLA[1][1] == 'X' && TABLA[2][0] == 'X')
  120. return 1;
  121. else if(TABLA[0][2] == 'O' && TABLA[1][1] == 'O' && TABLA[2][0] == 'O')
  122. return 2;
  123.  
  124. return 0;
  125. }


Título: Re: Juego del gato
Publicado por: m@o_614 en 24 Abril 2012, 20:20 pm
saludos, no pude postear el resto del codigo antes  por falta de tiempo, pero lo que intente hacer fue validar cuando hay un ganador pero tengo problemas por que no se como hacer que cheque todas las condiciones al mismo tiempo

Código
  1. #define MAX_FILA 3
  2. #define MAX_COLUM 3
  3. #define MAX_JUG 2
  4. #define MAX_TURNO 9
  5. #define O_ASCII 237
  6. #define X_ASCII 264
  7.  
  8. void turno_jugador();
  9. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM]);
  10. void verificar_ganador(char gato[MAX_FILA][MAX_COLUM]);
  11.  
  12. int main()
  13. {
  14.    printf("Juego del Gato v1.0\n");
  15.    turno_jugador();
  16.    return 0;
  17. }
  18.  
  19. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM])
  20. {
  21.    int i,j;
  22.    for(i=0;i<MAX_FILA;i++)
  23.    {
  24.        for(j=0;j<MAX_COLUM;j++)
  25.        {
  26.            if((gato[i][j]=='X')||(gato[i][j]=='O'))
  27.                printf("%c",gato[i][j]);
  28.            else
  29.               printf(" ");
  30.               printf("|");
  31.        }
  32.        printf("\n");
  33.           printf("______");
  34.        printf("\n");
  35.    }
  36. }
  37.  
  38. void verificar_ganador(char gato[MAX_FILA][MAX_COLUM])
  39. {
  40.    int i,j,suma=0;
  41.    for(i=0;i<MAX_FILA;i++)
  42.    {
  43.        if((suma+=gato[i][i])=X_ASCII)//VALIDAR DIAGONAL
  44.           printf("El ganador es el jugador X\n");
  45.    }
  46.  
  47.    for(i=0,j=0;j<MAX_COLUM;j++)//VALIDA LA PRIMERA FILA
  48.    {
  49.        if((suma+=gato[i][j])==X_ASCII)//aqui tambien me falta validar para O pero eso ya despues
  50.           printf("El ganador es el jugador X\n");
  51.    }
  52.    for(i=1,j=1;j<MAX_COLUM;j++)//VALIDA LA SEGUNDA FILA
  53.    {
  54.        if((suma+=gato[i][j])==X_ASCII)
  55.           printf("El ganador es el jugador X\n");
  56.    }
  57.    for(i=2,j=2;j<MAX_COLUM;j++)
  58.    {
  59.        if(suma+=gato[i][j]==X_ASCII)
  60.           printf("El ganador es el jugador X\n");//VALIDAR LA TERCERA FILA
  61.    }/*para sacar las columnas solo inviertes el gato[j][i]*/
  62.  
  63. }
  64. void turno_jugador()
  65. {
  66.    int fila,columna,i,turno=1;
  67.    char jugador[]={'X','O'},letra;
  68.    char gato[MAX_FILA][MAX_COLUM];
  69.    do
  70.    {
  71.        for(i=0;i<MAX_JUG;i++)
  72.        {
  73.            printf("Es turno del jugador %c\n",jugador[i]);
  74.            printf("Dime la fila (1 a 3): ");
  75.            scanf("%d",&fila);
  76.            printf("Dime la columna(1 a 3): ");
  77.            scanf("%d",&columna);
  78.            letra=jugador[i];
  79.            gato[fila-1][columna-1]=letra;
  80.            imprimir_tablero(gato);
  81.            verificar_ganador(gato);
  82.            printf("Pulse enter para continuar...\n");
  83.            getch();
  84.            system("cls");
  85.            turno++;
  86.        }
  87.    }while(turno<=MAX_TURNO);
  88. }
  89.  

gracias


Título: Re: Juego del gato
Publicado por: s00rk en 25 Abril 2012, 00:37 am
El error es en eso que haces con la suma deberia ser asi:

Código
  1. suma = 0;
  2. for(i=0;i<MAX_FILA;i++)
  3.    {
  4.        if(gato[i][i] == X_ASCII)//VALIDAR DIAGONAL
  5.            suma++;          
  6.    }
  7. if(suma == 3)
  8.    printf("El ganador es el jugador X\n");
  9. suma = 0;
  10.  
  11.    for(i=0,j=0;j<MAX_COLUM;j++)//VALIDA LA PRIMERA FILA
  12.    {
  13.        if(gato[i][j] == X_ASCII)//aqui tambien me falta validar para O pero eso ya despues
  14.           suma++;
  15.    }
  16. if(suma == 3)
  17.    printf("El ganador es el jugador X\n");
  18.  

Bueno y pues ya sabes el resto  hehehe, lo unico que te faltaria seria la diagonal invertida ;D


Título: Re: Juego del gato
Publicado por: m@o_614 en 25 Abril 2012, 04:03 am
muchas gracias s00rk ya me fije en donde me estaba equivocando en validar segunda fila no era i=1,j=1 era i=1,j=0 :o y ya le agregue tambien la diagonal invertida

Código
  1. int i,j,suma=0;
  2.    for(i=0;i<MAX_FILA;i++)
  3.    {
  4.        if((gato[i][i])==X_ASCII)//VALIDAR DIAGONAL
  5.           suma=suma+gato[i][i];
  6.    }
  7.    if(suma==264)
  8.       printf("El ganador es el jugador X\n");
  9.  
  10.    for(i=2,j=0;j<MAX_COLUM;i--,j++)//VALIDA DIAGONAL INVERTIDA
  11.    {
  12.        if((gato[i][j]==X_ASCII))
  13.           suma=suma+gato[i][j];
  14.    }
  15.    if(suma==264)
  16.       printf("El ganador es el jugador X\n");
  17.  
  18.    for(i=0,j=0;j<MAX_COLUM;j++)//VALIDA LA PRIMERA FILA
  19.    {
  20.       if((gato[i][j])==X_ASCII)//aqui tambien me falta validar para O pero eso ya despues
  21.          suma=suma+gato[i][j];
  22.    }
  23.    if(suma==264)
  24.       printf("El ganador es el jugador X\n");
  25.  
  26.    for(i=1,j=0;j<MAX_COLUM;j++)//VALIDA SEGUNDA FILA
  27.    {
  28.        if((gato[i][j])==X_ASCII)
  29.           suma=suma+gato[i][j];
  30.    }
  31.    if(suma==264)
  32.       printf("El ganador es el jugador X\n");
  33.  
  34.    for(i=2,j=0;j<MAX_COLUM;j++)//VALIDA TERCER FILA
  35.    {
  36.        if(gato[i][j]==X_ASCII)
  37.           suma=suma+gato[i][j];
  38.    }
  39.    if(suma==264)
  40.       printf("El ganador es el jugador X\n");

todavia me faltan varias cosas más pero como todavia estoy un poco verde para programar voy a paso de tortuga :-\


Título: Re: Juego del gato
Publicado por: s00rk en 25 Abril 2012, 18:16 pm
Algo que te falta ahi es terminar el metodo si es que gano y si no gano regresar la suma a 0, para en el siguiente chequeo tenga 0 y no lo que ya tenia anteriormente ya que de esa forma si en el primero se encontro una X, pero no e toda la diagonal suma ya tendra un valor y si en una fila estan todas las X, pero como suma ya tenia un valor pues ya con eso no encontrara un ganador.

Ejemplo:

if(suma == 264)
{
    // Mensaje de ganador
    return; // Termina el metodo o la funcion ..
}
suma = 0; // Regresamos suma a su valor original


Título: Re: Juego del gato
Publicado por: m@o_614 en 30 Abril 2012, 03:20 am
pues aqui tengo el codigo, ahora ya compila bien a excepcion de dos errores que encontre, el primero

que las primeras veces que le meto X u O a la matriz me verifica perfectamente si hay ganador o no, pero a partir como del 5to turno ya no lo hace :-\ me aparece que el ganador es X, cuando en realidad no hay ganador

y el segundo que le implemente una bandera ganador para que el do-while me siga iterando mientras el numero de turnos sea menos o igual a 9 y la bandera sea igual a 0(osea que todavia no haya encontrado ganador)pero en vez de romper el ciclo inmediatamente cuando una de estas condiciones no se cumple me itera una vez más antes de salirse del ciclo.

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio.h>
  4.  
  5. #define MAX_FILA 3
  6. #define MAX_COLUM 3
  7. #define MAX_JUG 2
  8. #define MAX_TURNO 9
  9. #define O_ASCII 79
  10. #define X_ASCII 88
  11.  
  12. void turno_jugador();
  13. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM]);
  14. int verificar_ganador(char gato[MAX_FILA][MAX_COLUM]);
  15.  
  16. int main()
  17. {
  18.    printf("Juego del Gato v1.0\n");
  19.    turno_jugador();
  20.    return 0;
  21. }
  22.  
  23. void imprimir_tablero(char gato[MAX_FILA][MAX_COLUM])
  24. {
  25.    int i,j;
  26.    for(i=0;i<MAX_FILA;i++)
  27.    {
  28.        for(j=0;j<MAX_COLUM;j++)
  29.        {
  30.            if((gato[i][j]=='X')||(gato[i][j]=='O'))
  31.                printf("%c",gato[i][j]);
  32.            else
  33.               printf(" ");
  34.               printf("|");
  35.        }
  36.        printf("\n");
  37.           printf("______");
  38.        printf("\n");
  39.    }
  40. }
  41.  
  42. int verificar_ganador(char gato[MAX_FILA][MAX_COLUM])
  43. {
  44.    int i,j,suma=0,ganador;
  45.  
  46.    for(i=0;i<MAX_FILA;i++)
  47.    {
  48.        for(j=0;j<MAX_COLUM;j++)
  49.        {
  50.            if((gato[i][j])==X_ASCII)//me falta validar para O tambien, pero eso despues
  51.               suma=suma+gato[i][j];
  52.        }
  53.    }
  54.     if(suma==264)
  55.     {
  56.         printf("El ganador es el jugador X\n");
  57.         ganador=1;
  58.     }
  59.     else
  60.        ganador=0;
  61.     return ganador;
  62. }
  63. void turno_jugador()
  64. {
  65.    int fila,columna,i,turno,ganador;
  66.    char jugador[]={'X','O'},letra;
  67.    char gato[MAX_FILA][MAX_COLUM];
  68.    turno=1;
  69.    do
  70.    {
  71.        for(i=0;i<MAX_JUG;i++)
  72.        {
  73.            printf("Es turno del jugador %c\n",jugador[i]);
  74.            printf("Dime la fila (1 a 3): ");
  75.            scanf("%d",&fila);
  76.            printf("Dime la columna(1 a 3): ");
  77.            scanf("%d",&columna);
  78.            letra=jugador[i];
  79.            gato[fila-1][columna-1]=letra;
  80.            imprimir_tablero(gato);
  81.            ganador=verificar_ganador(gato);
  82.            printf("Pulse enter para continuar...\n");
  83.            getch();
  84.            system("cls");
  85.            turno++;
  86.        }
  87.    }while((turno<=MAX_TURNO)&&(!ganador));
  88. }
  89.  

de antemano gracias


Título: Re: Juego del gato
Publicado por: s00rk en 30 Abril 2012, 03:41 am
El error de que aveces gana y no es verdad podria ser por esto mira imaginemos que nuestra tabla quedo asi:

X | X | O
O | X |

Aqui ya en el quinto movimienten tu codigo

Código
  1. for(i=0;i<MAX_FILA;i++)
  2.    {
  3.        for(j=0;j<MAX_COLUM;j++)
  4.        {
  5.            if((gato[i][j])==X_ASCII)//me falta validar para O tambien, pero eso despues
  6.               suma=suma+gato[i][j];
  7.        }
  8.    }

llegara a encontrar las 3 X primero por lo que al final en ese turno obtendras suma = 264, lo que vendria siend el ganador, para evitar esto ese bucle deberia quedar asi:

Código
  1. for(i=0;i<MAX_FILA;i++)
  2.    {
  3.        for(j=0;j<MAX_COLUM;j++)
  4.        {
  5.            if((gato[i][j])==X_ASCII)//me falta validar para O tambien, pero eso despues
  6.               suma=suma+gato[i][j];
  7.        }
  8.        if(suma == 264)
  9.        {
  10.            printf("El ganador es el jugador X\n");
  11.            ganador=true;
  12.        }
  13.        suma = 0;
  14.    }
  15. if(ganador) // Esto para asi ya no seguir buscando si ya se encontro el ganador
  16.    return true;

Luego tu error de que sigue dndo vuelta es por tu mismo while la variable ganador mejor tratala como bool y asi ya te funcionaria, junto con el codigo que te puse aqui corregido.