elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Juego del gato
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Juego del gato  (Leído 21,799 veces)
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Juego del gato
« 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


En línea

Ferno


Desconectado Desconectado

Mensajes: 375


Ver Perfil
Re: Juego del gato
« Respuesta #1 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".


En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Juego del gato
« Respuesta #2 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
« Última modificación: 13 Abril 2012, 02:14 am por durasno » En línea

Ahorrate una pregunta, lee el man
m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Juego del gato
« Respuesta #3 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.  
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Juego del gato
« Respuesta #4 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
En línea

Ahorrate una pregunta, lee el man
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Juego del gato
« Respuesta #5 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.
En línea

durasno


Desconectado Desconectado

Mensajes: 373


Ver Perfil
Re: Juego del gato
« Respuesta #6 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
En línea

Ahorrate una pregunta, lee el man
s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Juego del gato
« Respuesta #7 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. }
« Última modificación: 14 Abril 2012, 07:02 am por s00rk » En línea

m@o_614


Desconectado Desconectado

Mensajes: 389


Ver Perfil
Re: Juego del gato
« Respuesta #8 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
En línea

s00rk

Desconectado Desconectado

Mensajes: 195



Ver Perfil
Re: Juego del gato
« Respuesta #9 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
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Juego Gato Inteligente.
Programación C/C++
xcoverdalex 5 7,572 Último mensaje 2 Septiembre 2010, 15:00 pm
por xcoverdalex
Juego Gato
Java
Lain0x 2 9,648 Último mensaje 22 Marzo 2011, 05:43 am
por sapito169
juego del gato
Java
m@o_614 4 4,898 Último mensaje 8 Mayo 2012, 22:04 pm
por m@o_614
Ayuda con el juego del gato
Programación C/C++
Dieux Rablia 3 3,523 Último mensaje 20 Mayo 2012, 18:59 pm
por Dieux Rablia
Recomendad un juego al gato. « 1 2 3 »
Juegos y Consolas
Saberuneko 21 28,963 Último mensaje 19 Junio 2012, 13:40 pm
por Saberuneko
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines