Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: mathias_vg en 3 Junio 2013, 16:47 pm



Título: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 3 Junio 2013, 16:47 pm
Buenas tardes soy nuevo en el foro y recien me estoy iniciando en el tema de la programacion, estoy intentando hacer el juego 4 en linea pero ando bastante trancado, elijo la dimension de mi tablero y muestro el mismo sin problemas pero cuando hago la primer jugada ya me muestra cualquier cosa.
Les dejo el codigo abajo para ver si me pueden ayudar.


Desde ya, muchas gracias.


Estoy compilando con DevC++


Codigo:

#include <stdio.h>
main()
{
   // Elejimos la dimension del tablero
   int n,k;
   printf("Ingrese la dimension del tablero de juego: ");
   scanf("%d",&n);
    char matriz[n][n];
    int i,j;

    // Mostramos el tablero inicial
    for (i=0;i<n;i++)
    {
       for (j=0;j<n;j++)
        {
           printf("%c ",matriz[j]='-');
          }
printf("\n");
     }
     printf("Haga su jugada: ");
     scanf("%d",&k);
     matriz[k][n]='X';
     printf("%c",matriz[k][n]+matriz[j]);
}


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: amchacon en 4 Junio 2013, 14:08 pm
Código
  1. printf("Haga su jugada: ");
  2. scanf("%d",&k);    
  3. matriz[k][n]='X';

Has puesto la coordenada x pero no la y  :silbar:


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 4 Junio 2013, 17:21 pm
Código
  1. printf("Haga su jugada: ");
  2. scanf("%d",&k);    
  3. matriz[k][n]='X';
Has puesto la coordenada x pero no la y  :silbar:

Es decir debería ser algo así::

Código
  1. printf("Haga su jugada: ");
  2. scanf("%d",&k);  
  3. scanf("%d",&n);    
  4. matriz[k][n]='X';

Y además:

Código
  1. printf("%c",matriz[k][n]+matriz[i][j]);

te dará un cararacter "rarito". Debe ser tan solo:

Código
  1. printf("%c",matriz[k][n]);

Saluditos! . ... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 4 Junio 2013, 22:25 pm
Hola gracias por las prontas respuestas,

si pongo tan solo printf("%c",matriz[k][n]); me deja toda la matriz en X.

Logro hacer la matriz inicial pero cuando quiero colocar un valor no me da, se me modifican varios.

Les agradezco sus respuestas!


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 01:04 am

Una pequeñita ayudita que te dibuja el tablero y te va poniendo las X:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.    int n=0,i=0,j=0,k=0,dim=0;
  6.    puts ("Ingresa la dimension del tablero de juego:");
  7.    scanf (" %d",&dim);
  8.    char matriz[dim][dim];
  9.    do
  10.    {
  11.        for (i=0;i<dim;i++)
  12.        {
  13.            for (j=0;j<dim;j++)
  14.            {
  15.                if (matriz[i][j]!='X' )
  16.                    printf("%c ",'-');
  17.                else
  18.                    printf ("%c",'X');
  19.            }
  20.             putchar ('\n');
  21.        }
  22.        puts("\nHaga su jugada. Introduzca las coordenadas:");
  23.        scanf (" %d",&k);
  24.        scanf (" %d",&n);
  25.        matriz[k][n]='X';
  26.        printf ("%c\n",matriz[k][n]);
  27.     }while (1);
  28.    return 0;
  29. }
  30.  

Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 13:47 pm
Una pequeñita ayudita que te dibuja el tablero y te va poniendo las X:


Ahora de pequeñita na´de na´. Para que te hagas una idea, el código que te paso rellena la matriz según el tamaño introducido, va colocando las fichas de los jugadores, teniendo en cuenta que no estén ya ocupadas y ...... ¡el tamaño de la consola se ajusta al tamaño de la matriz!.

(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/4enraya_zps89562ed4.jpg)

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <windows.h>
  4.  
  5. int dim=0,dim_plus=0,x=0,y=0, i=0,j=0,jugador =0;
  6.  
  7. void dibujar_tablero(int matriz[dim_plus][dim_plus],int dim);
  8. void jugadores (int matriz [dim_plus][dim_plus], int dim, int jugador);
  9.  
  10. int main()
  11. {
  12.    char tamanyo_consola[80];
  13.    do
  14.    {
  15.        puts ("\nIngresa la dimension del tablero de juego( 3-10):");
  16.        if (scanf ("%d",&dim)==0)
  17.        {
  18.            while (getchar ()!='\n');
  19.            puts ("\nOpción erronea.Vuelva a intentarlo:");
  20.            dim=12;
  21.        }
  22.    }while (dim<3  || dim>10);
  23.    dim_plus=dim+1;
  24.    int matriz[dim_plus][dim_plus];
  25.    for(i=0;i<=dim;i++)
  26.        for(j=0;j<=dim;j++)
  27.        {
  28.            if (i==0  && j==0 )
  29.                matriz[i][j]=0;
  30.            else if (i==0 && j>0)
  31.                matriz[i][j]=j;
  32.            else if (j==0)
  33.                matriz[i][j]=i;
  34.            else
  35.                matriz[i][j]=0;
  36.        }
  37.    int tam_x=0,tam_y=0;
  38.    tam_x=6*dim+2; /* con estos valores puedes*/
  39.    tam_y=dim+14; /*cambiar el tamanyo de la consola*/
  40.    sprintf(tamanyo_consola, "MODE %d,%d", tam_x, tam_y);
  41.    system ("pause");
  42.    system ("cls");
  43.    system(tamanyo_consola);
  44.    do
  45.    {
  46.        dibujar_tablero( matriz, dim);
  47.        jugadores ( matriz ,dim,jugador);
  48.        jugador++;
  49.        system ("cls");
  50.        dibujar_tablero( matriz, dim);
  51.        jugadores ( matriz ,dim,jugador);
  52.        system ("cls");
  53.        dibujar_tablero( matriz, dim);
  54.        system ("cls");
  55.        jugador=0;
  56.    }while (1);
  57.    return 0;
  58. }
  59.  
  60. void dibujar_tablero(int matriz[dim_plus][dim_plus],int dim)
  61. {
  62.    for(i=0;i<=dim;i++){
  63.        for(j=0;j<=dim;j++){
  64.            if ( matriz[i][j]==11 )
  65.                printf(" (X) ");
  66.            else if ( matriz[i][j]==12 )
  67.                printf (" (O) ");
  68.            else if (i>=1 && j>=1)
  69.                printf (" (-) ");
  70.            else if (i==0 && j==0  )
  71.                printf ("  ");
  72.            else if (j==0  )
  73.                printf (" %d",matriz[i][j]);
  74.            else if (i==0 || j==0  )
  75.                printf ("  %d  ",matriz[i][j]);
  76.            else
  77.                printf (" %d ",matriz[i][j]);
  78.        }
  79.        putchar ('\n');
  80.    }
  81. }
  82. void jugadores (int matriz [dim_plus][dim_plus], int dim, int jugador)
  83. {
  84.        do
  85.        {
  86.            printf("\nJUGADOR %d. Haga su jugada.\nIntroduzca las coordenadas:",jugador+1);
  87.            do
  88.            {
  89.                printf ("\nIngresa la coordenada X( 1-%d):",dim);
  90.                if (scanf (" %d",&x)==0)
  91.                {
  92.                    while (getchar ()!='\n');
  93.                    puts ("\nOpción erronea.Vuelva a intentarlo:");
  94.                    x=dim;
  95.                }
  96.                else if (x<1  || x>dim)
  97.                    puts ("Valor fuera de rango.");
  98.            }while (x<1  || x>dim);
  99.            do
  100.            {
  101.                printf ("Ingresa la coordenada Y( 1-%d):",dim);
  102.                if (scanf (" %d",&y)==0)
  103.                {
  104.                    while (getchar ()!='\n');
  105.                    puts ("\nOpción erronea.Vuelva a intentarlo:");
  106.                    y=dim;
  107.                }
  108.                else if (y<1  || y>dim)
  109.                    puts ("Valor fuera de rango.");
  110.            }while (y<1  || y>dim);
  111.  
  112.            if (matriz[x][y]!=0)
  113.                puts ("Posicion ocupada.\nIntroduzca nuevas coordenadas.");
  114.        }while (matriz[x][y]!=0);
  115.        system ("cls");
  116.        if (jugador ==0)
  117.            matriz[x][y]=11;
  118.        else
  119.            matriz[x][y]=12;
  120. }
  121.  

Cualquier duda, pregunta.

Y a ti te queda implementar la condición de cuando se gana. Espero ansioso tus aportaciones.


Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)

P.D: ¡Y sin un solo goto!.


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 13:54 pm
Muchas gracias leosansan, me ha sido de gran ayuda, pero cuando intento complilar el ultimo codigo me sale error cuando llamo al procedimiento imprimir_matriz; tampoco me dejan utilizar la el comando getchar  :-X



Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 14:09 pm
Muchas gracias leosansan, me ha sido de gran ayuda, pero cuando intento complilar el ultimo codigo me sale error cuando llamo al procedimiento imprimir_matriz; tampoco me dejan utilizar la el comando getchar  :-X


¿De qué código me estas hablando?. El mio no tiene ni lo uno ni lo otro.

Si es uno tuyo postealo para revisarlo, pero esta ves hazlo bien: picas en donde pone GeSHi y eliges C++ y en medio de las etiquetas que aparecen copias el código. Si no, es muy difícil de entender, toda vez que el código sin etiquetas no sale completo, como el original. No te olvides, es importante para los que queramos echarte una mano.


Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 14:27 pm
Código
  1. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 7 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  2. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 7 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  3. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 8 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  4. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 8 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  5. In function `int main()':
  6. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 46 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] `dibujar_tablero' undeclared (first use this function)
  7. 46 [Error] (Each undeclared identifier is reported only once for each function it appears in.)
  8. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 47 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] cannot convert `int (*)[((unsigned int)((int)dim_plus))]' to `int (*)[2]' for argument `1' to `void jugadores(int (*)[2], int, int)'
  9. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 51 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] cannot convert `int (*)[((unsigned int)((int)dim_plus))]' to `int (*)[2]' for argument `1' to `void jugadores(int (*)[2], int, int)'
  10. C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp: At global scope:
  11. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 61 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  12. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 61 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  13. In function `void dibujar_tablero(int (*)[2], int)':
  14. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 61 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] `void dibujar_tablero(int (*)[2], int)' used prior to declaration
  15. C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp: At global scope:
  16. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 83 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  17. \Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\Sin Nombre1.cpp 83 C:\Documents and Settings\MatiasC\Escritorio\Practico 1 Soluciones\C [Error] variable-size type declared outside of any function
  18. unrecognized option `-static-libstdc++'
  19.  

Ese error me sale cuando intento compilar el codigo que me colgaste abajo.


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 15:07 pm
Sorry, cambia la linea:

Código
  1. void imprimir............;
  2.  
  3. y
  4.  
  5. void jugadores (int matriz [dim][dim], int dim, int jugador);
  6.  
  7.  
  8.  

por la actual:

Código
  1. void dibujar_tablero(int matriz[dim_plus][dim_plus],int dim);
  2.  
  3. y
  4.  
  5. void jugadores (int matriz [dim_plus][dim_plus], int dim, int jugador)
  6. {
  7.  

Había puesto una versión anterior. Ya está corregido también en el post anterior. Y por cierto, guárdalo como .c no .cpp, ya que está en C y no en C++.

Yo uso Code::Blocks y no me "canta" ni warnings. ¿No usarás Dev-C++?


Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/simba1.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 15:52 pm
Si uso DevC++, debido a que me piden que se entregue para que funcione con ese compilador. Como puedo hacer para que me funcione en DevC++?

Muchas Gracias


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 15:58 pm
Si uso DevC++, debido a que me piden que se entregue para que funcione con ese compilador. Como puedo hacer para que me funcione en DevC++?

Muchas Gracias

Estoy en un ordenador de prestado, pero me hará el loco e instalaré el Dev-C++ a  ver qué pasa. Tardaré unos minutitos.

Saluditos, otra vez! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 16:05 pm
Ok, espero tu respuesta. muchas gracias por tu tiempo leosansan. Saludos!


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 16:41 pm
Ok, espero tu respuesta. muchas gracias por tu tiempo leosansan. Saludos!


¡Pá tras ni pá coger impulso!, como diría un buen canarion.

Es como volver a las cavernas, menos mal que está la imagen del post anterior para comprobar que efectivamente compila, no así en Dev-C++.

No acabo de comprender, si de entender, los múltiples mensajes que "larga" tu compilador. En esencia creo que el problema lo presenta por la declaración de las variables globales y el uso de un parámetro, dim o dim_plus para dimensionar las matrices, ya que no son variables constantes, que es lo que supongo espera el compilador, así como la declaración de variables "en medio" del código, cosa no permitida en C89 y sí en C99, así como el uso que hago de arrays de longitud variable o arrays cuya dimensión no es una constante definida previamente sino que se "escanea" en medio del código.

En fin, que no soy un experto en Dev-C++,nací al mundo del C/C++ de  la mano del Code::Blocks, habiendo probado primero con el tuyo, Pelles C, Borland Builder, VisualStudio y algunos más y de todos ellos el que más me convenció para mis propósitos fue el Code::Blocks, con diferencia.

Espero que alguien entre quienes sigan el tema tenga más conocimientos de Dev-C++ y del lenguaje C que yo y pueda hacerlo rular en el dichoso Dev-C++.

Sorry, muchos sorry, la intención era buena, pero no pienso dejar mi Code::Blocks, en el que incluso puedo configurar lo para que acepte las novedades del C++11, por un compilador que no sé si ni tan siquiera llegó a adaptarse a las especificaciones del C99, más que nada por los años que hace que no se actualiza.

De todas formas siempre estoy abierto a aprender, cualquier sugerencia y/o lección magistral que me den será bienvenida, tanto de C como de Dev-C++.

Pero lo positivo es que tienes al menos un código por el que guiarte para tu tarea, trata de adaptarlo. Yo si fuera la adaptación para algo más nuevo me molestaría en hacerlo, pero como dije al principio "¡Pá tras ni pá coger impulso!".

Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 16:48 pm
Ok voy a tratar de verlo con algun compañero de clase que han tenido el mismo problema pero creo que lograron solucionarlo, cualquier cosa te comento luego para ver bien en que quedo esto jeje.

Saludos!!! y una vez mas gracias jeej


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 5 Junio 2013, 21:18 pm
leosansan, eh estado tratando de seguir con el juego y hasta ahora he avanzado un poco aca abajo te cuelgo lo que puede hacer, a ver que tan bien esta o que me podes sugerir.

Nota en el juego fije la coordenada Y (dim) porque tengo que colocar la ficha en el lugar mas bajo posible.

Aguardo tus comentarios, saludos!!!

Código
  1. #include <stdio.h>
  2. #include <iostream.h>
  3. int main()
  4. {
  5.  
  6.    char d;
  7.    printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
  8.    printf("       Nueva partida (S/N)");
  9.    scanf("%c",&d);
  10.    int n=0,i=0,j=0,dim=0,resto=0;
  11.    printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
  12.    scanf (" \n%d",&dim);
  13.    char matriz[dim][dim];
  14.    do
  15.    {
  16.        for (i=1;i<=dim;i++)
  17.        {
  18.            for (j=1;j<=dim;j++)
  19.            {
  20.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  21.                    printf("%c ",'.');
  22.                else
  23.                    printf ("%c ",'X');
  24.            }
  25.            printf("\n");
  26.        }
  27.        while (resto<=(dim*dim))
  28.        {
  29.         if ((resto%2)==0)
  30.        {
  31.         printf("\nJuega JUGADOR 1: ");
  32.         scanf (" %d",&n);
  33.            matriz[dim][n]='O';
  34.            printf ("%c\n",matriz[dim][n]);
  35.            for (i=1;i<=dim;i++)
  36.        {
  37.            for (j=1;j<=dim;j++)
  38.            {
  39.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  40.                    printf("%c ",'.');
  41.                else
  42.                    if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  43. printf ("%c ",'O');
  44. else
  45. printf ("%c ",'X');
  46.            }
  47.            printf("\n");
  48.        }
  49.        }
  50.        else
  51.        {
  52.         printf("\nJuega JUGADOR 2: ");
  53.            scanf (" %d",&n);
  54.            matriz[dim][n]='X';
  55.            printf ("%c\n",matriz[dim][n]);
  56.            for (i=1;i<=dim;i++)
  57.        {
  58.            for (j=1;j<=dim;j++)
  59.            {
  60.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  61.                    printf("%c ",'.');
  62.                else
  63.                if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  64. printf ("%c ",'O');
  65. else
  66. printf ("%c ",'X');
  67.  
  68.            }
  69.            printf("\n");
  70.        }
  71.        }
  72.        resto++;
  73.        }
  74.  
  75.     }while (1);
  76.    return 0;
  77.    system("PAUSE");
  78. }
  79.  
  80.  


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 5 Junio 2013, 22:25 pm
leosansan, eh estado tratando de seguir con el juego y hasta ahora he avanzado un poco aca abajo te cuelgo lo que puede hacer, a ver que tan bien esta o que me podes sugerir.

Nota en el juego fije la coordenada Y (dim) porque tengo que colocar la ficha en el lugar mas bajo posible.

Aguardo tus comentarios, saludos!!!


Lamento tener que corregir a quien te puso esta tarea ya que su nombre es "conecta 4", donde las fichas obligatoriamente "caen" al fondo, de ahí que se rellenen de esa manera. En cambio, en el "cuatro en ralla" se "escribe" en cualquier posición, de ahí que tanto amchacon como yo te hallamos dicho que eran dos los scanf, uno para cada coordenada. Pero en el conecta-4 efectivamente sólo hace falta uno ya que la ficha "cae" en la columna indicada por el scanf y se parará cuando tropiece con otra.

Te dejo en el código que te paso algunas sugerencias. Lamentablemente ya por hoy no tengo más tiempo. Por cierto, tienes mal una librería, te la dejo corregida. La stdlib sería para usar system y "limpiar la pantalla después de cada jugada:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.  
  6.    char d;
  7.    printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
  8.    printf("       Nueva partida (S/N)");
  9.    scanf("%c",&d);   /*<==esto asi no sirve. Tienes que hacer un do-while*/
  10.    /*para si es "s" jugar y si no salir*/
  11.    int n=0,i=0,j=0,dim=0,resto=0,/*<<<<<esto es nuevo>>>>>*/jugador=1;
  12.    printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
  13.    scanf ("%d",&dim);
  14.    char matriz[dim][dim];
  15.    do
  16.    {
  17.        for (i=1;i<=dim;i++)
  18.        {
  19.            for (j=1;j<=dim;j++)
  20.            {
  21.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  22.                    printf("%c ",'.');
  23.                else
  24.                    printf ("%c ",'X');
  25.            }
  26.            printf("\n");
  27.        }
  28.        while (resto<=(dim*dim))
  29.        {
  30.         /*if ((resto%2)==0)*/
  31.         if (jugador==1)/*el codigo es mas eficiente porque se
  32.                 ahorra dim*dim divisiones y calculo de restos*/
  33.        {
  34.         jugador++;
  35.         printf("\nJuega JUGADOR 1: ");
  36.         scanf (" %d",&n);
  37.            matriz[dim][n]='O';
  38.            printf ("%c\n",matriz[dim][n]);
  39.            for (i=1;i<=dim;i++)
  40.        {
  41.            for (j=1;j<=dim;j++)
  42.            {
  43.                /*<==aqui tienes que revisar los if porque si la posicion*/
  44.            /* esta ocupada por X o por O , entonces es matriz[dim-1][n]='O';
  45.             es decir, sube, Tal como lo tienes los valores que repiten posicion
  46.             borran a los anteriores y no sales nunca de la ultima linea*/
  47.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  48.                    printf("%c ",'.');
  49.                else
  50.                    if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  51. printf ("%c ",'O');
  52. else
  53. printf ("%c ",'X');
  54.            }
  55.            printf("\n");
  56.        }
  57.        }
  58.  
  59.        else
  60.        {
  61.            jugador=1;
  62.         printf("\nJuega JUGADOR 2: ");
  63.            scanf (" %d",&n);
  64.            matriz[dim][n]='X';
  65.            printf ("%c\n",matriz[dim][n]);
  66.            for (i=1;i<=dim;i++)
  67.        {
  68.            for (j=1;j<=dim;j++)
  69.            {
  70.                /*<==IDEM se superponen tal como esta*/
  71.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  72.                    printf("%c ",'.');
  73.                else
  74.                if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  75. printf ("%c ",'O');
  76. else
  77. printf ("%c ",'X');
  78.  
  79.            }
  80.            printf("\n");
  81.        }
  82.        }
  83.  
  84.        resto++;
  85.        }
  86.  
  87.     }while (1);
  88.    return 0;
  89.    system("PAUSE");
  90. }
  91.  

Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 6 Junio 2013, 21:20 pm
leosansan como estas?

Eh estado tratando de solucionar los problemas que me marcaste, mas precisamente que me imprima hacia arriba las jugadas pero no lo eh lo grado me podrias decir en que estoy fallando?

Cuelgo el codigo a continuacion

Muchas gracias

Código
  1. leosansan como estas?
  2.  
  3. Eh estado tratando de solucionar los problemas que me marcaste, mas precisamente que me imprima hacia arriba las jugadas pero no lo eh lo grado me podrias decir en que estoy fallando?
  4.  
  5. Cuelgo el codigo a continuacion
  6.  
  7. Muchas gracias


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 6 Junio 2013, 21:26 pm
Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.  
  6.    char d;
  7.    bool termino = false;
  8.    int n=0,i=0,j=0,dim1=0,dim2=0,resto=1,contador=1;
  9.    printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
  10.    printf("       Nueva partida (S/N)  ");
  11.    scanf("%c",&d);
  12.    printf("\n");
  13.    printf("       JUGADOR 1  \n");
  14.    printf("       JUGADOR 2    ");
  15.    switch (d)
  16.    {
  17.        case 'N':case 'n':
  18.        termino = true;
  19.        break;
  20.         default: printf("\n\nError");
  21.        break;
  22.        case 'S': case's':
  23.    printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
  24.    scanf (" \n%d",&dim2);
  25.    dim1 = dim2;
  26.    char matriz[dim1][dim2];
  27.    do
  28.    {
  29.        for (i=1;i<=dim1;i++)
  30.        {
  31.            for (j=1;j<=dim2;j++)
  32.            {
  33.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  34.                {
  35.                    printf("%c ",'.');
  36.                }
  37.                else
  38.                {
  39.                    printf ("%c ",'X');
  40.                }
  41.            }
  42.            printf("\n");
  43.        }
  44.        while (resto<=(dim2*dim2))
  45.        {
  46.         if ((resto%2)==0)
  47.        {
  48.         printf("\nJuega JUGADOR 1: ");
  49.         scanf (" %d",&n);
  50.            matriz[dim1][n]='O';
  51.            printf ("%c\n",matriz[dim1][n]);
  52.            for (i=1;i<=dim1;i++)
  53.            {
  54.            for (j=1;j<=dim2;j++)
  55.            {
  56.                  if ((matriz[i][j]=='X') || (matriz[i][j]=='O'))
  57.                {
  58.                   matriz[dim1-1][n]='O';   /* corregir */
  59.                }
  60.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  61.                {
  62.                    printf("%c ",'.');
  63.                }
  64.                else
  65.                {
  66.                    if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  67.                    {
  68. printf ("%c ",'O');
  69.                    }
  70. else
  71. {
  72.         printf ("%c ",'X');
  73.                    }
  74.                }
  75.            }
  76.            printf("\n");
  77.        }
  78.    }
  79.        else
  80.        {
  81.         printf("\nJuega JUGADOR 2: ");
  82.            scanf (" %d",&n);
  83.            matriz[dim1][n]='X';
  84.            printf ("%c\n",matriz[dim1][n]);
  85.            for (i=1;i<=dim1;i++)
  86.        {
  87.            for (j=1;j<=dim2;j++)
  88.            {
  89.                 if ((matriz[i][j]=='X') || (matriz[i][j]=='O'))
  90.                {
  91.                   matriz[dim1-1][n]='X';   /* corregir */
  92.                }
  93.                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
  94.                {
  95.                    printf("%c ",'.');
  96.                }
  97.                else
  98.                {
  99.                if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
  100.                {
  101. printf ("%c ",'O');
  102.                }
  103. else
  104. {
  105.     printf ("%c ",'X');
  106.                    }
  107.                }
  108.  
  109.            }
  110.            printf("\n");
  111.        }
  112.        }
  113.        resto++;
  114.        }
  115.        printf("EMPATE\n\n");
  116.        system("PAUSE");
  117.     }while (1);
  118.    return 0;
  119.    break;
  120.  
  121.    }
  122.    while (!termino);
  123. }
  124.  
  125.  


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 6 Junio 2013, 21:29 pm
leosansan, eh estado tratando de seguir con el juego y hasta ahora he avanzado un poco aca abajo te cuelgo lo que puede hacer, a ver que tan bien esta o que me podes sugerir.


Por si te has quedado atascado, te paso el código "ligeramente modificado" para que no tengas problemas al compilar con el Dev-C++.

He mejorado por un lado el tema de las elecciones de las variables  y, por otro lado, ya puedes entrar las fichas sin que se superpongan y que "suban", vamos que puedes rellenar el tablero sin problemas.

Harina de otro costal es implementar las condiciones para ver quien gana,si hay empate y si se "salen" del tablero. Si tienes dificultad, si es que te lo piden también, avisa y veremos que se puede hacer. En realidad ya "casi" lo tengo hecho para el "otro" juego, el original de cuatro en línea, pero claro yo hago uso de funciones y no sé si tú puedes usarlas o no. Ya me dirás.

Eso sí, aclaro que no es el código que yo haría sino una mejora en el que has propuesto:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5.  
  6.    char d;
  7.    printf("\n\n\n     JUEGO CONECTA CUATRO\n\n\n\n\n\n\n");
  8.    do
  9.    {
  10.        printf("       Nueva partida (S/N): ");
  11.        scanf("%c",&d);
  12.        if (d=='n' || d=='N')
  13.        {
  14.            puts ("Hasta lueguito.");
  15.            return 1;
  16.        }
  17.        if (d!='s' && d!='S')
  18.            puts ("Elija: s / n ");
  19.    }while (d!='s' && d!='S');
  20.  
  21.    int n=0,i=0,j=0,dim=0,resto=0,k=0,jugador=1;
  22.    printf("\n\n\n\nIngresa la dimension del tablero de juego(5-10):\n\n");
  23.    do
  24.    {
  25.        scanf (" \n%d",&dim);
  26.        if (dim<5 || dim>10)
  27.            puts("Opcion no valida.\nIngresa la dimension (5-10)");
  28.    }while (dim<5 || dim>10);
  29.  
  30.    char matriz[dim+1][dim+1];
  31.    system ("cls");
  32.    do
  33.    {
  34.        for (i=1;i<=dim;i++)
  35.        {
  36.            for (j=1;j<=dim;j++)
  37.            {
  38.                matriz[i][j]='.';
  39.                    printf("%c ",matriz[i][j]);
  40.            }
  41.            printf("\n");
  42.        }
  43.        while (resto<=(dim*dim))
  44.        {
  45.            if (jugador==1)
  46.            {
  47.                jugador++;
  48.                do
  49.                {
  50.                    //
  51.                    printf("\nJuega JUGADOR 1: ");
  52.                    scanf ("%d",&n);
  53.                    if (n<1 || n>5)
  54.                        puts ("Posicion no valida.\nEntre un nuevo valor.");
  55.                }while(n<1 || n>5);
  56.                for (k=dim;k>=1;k--)/*<==este for es mejorable*/
  57.                {
  58.                        if (matriz[k][n]!='.')
  59.                            continue;
  60.                        else
  61.                        {
  62.                            matriz[k][n]='O';
  63.                            break;
  64.                        }
  65.                }
  66.                printf("\n");
  67.                for (i=1;i<=dim;i++)
  68.                {
  69.                    for (j=1;j<=dim;j++)
  70.                    {
  71.                        printf ("%c ",matriz[i][j]);
  72.                    }
  73.                    printf("\n");
  74.                }
  75.            }
  76.            else
  77.            {
  78.                jugador=1;
  79.                do
  80.                {
  81.                    printf("\nJuega JUGADOR 2: ");
  82.                    scanf ("%d",&n);
  83.                    if (n<1 || n>5)
  84.                        puts ("Posicion no valida.\nEntre un nuevo valor.");
  85.                }while(n<1 || n>5);
  86.                for (k=dim;k>=1;k--)
  87.                {
  88.                        if (matriz[k][n]!='.')
  89.                            continue;
  90.                        else
  91.                        {
  92.                            matriz[k][n]='X';
  93.                            break;
  94.                        }
  95.                }
  96.                system ("cls");printf("\n");
  97.                for (i=1;i<=dim;i++)
  98.                {
  99.                    for (j=1;j<=dim;j++)
  100.                    {
  101.                        printf ("%c ",matriz[i][j]);
  102.                    }
  103.                    printf("\n");
  104.                }
  105.            }
  106.  
  107.        resto++;
  108.        }
  109.     }while (1);
  110.    return 0;
  111.    system("PAUSE");
  112. }
  113.  

Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: rir3760 en 7 Junio 2013, 02:30 am
Algunos comentarios:

Código
  1. scanf(" \n%d",&dim);
En la cadena de formato " \n%d" no es necesario utilizar " \n" ya que la función lo primero que hace es descartar el espacio blanco (tabulador, avance de linea, etc). Solo es necesario cuando se utilizan los especificadores "%c" y "%[]" ya que con ellos el descarte no sucede.

Código
  1. scanf (" \n%d",&dim);
  2.  
  3. /* ... */
  4.  
  5. char matriz[dim][dim];
Si van a utilizar un array declarado en esa forma hay que asegurarse de que el compilador soporte el estándar C99 y se compile en ese modo (a veces sucede).

Código
  1. char matriz[dim][dim];
  2.  
  3. /* ... */
  4.  
  5. for (i = 1; i <= dim; i++){
  6.   for (j = 1; j <= dim; j++){
  7.      matriz[i][j] = '.';
  8.      printf("%c ", matriz[i][j]);
  9.   }
  10.  
  11.   printf("\n");
  12. }
En C y C los indices de los arrays inician en 0 y terminan en N-1 donde N es el numero de elementos. Hay que cambiar el par de bucles a:
Código
  1. char matriz[dim][dim];
  2.  
  3. /* ... */
  4.  
  5. for (i = 0; i < dim; i++){
  6.   for (j = 0; j < dim; j++){
  7.      matriz[i][j] = '.';
  8.      fputs(". ", stdout); /* Imprime ". " en la salida estandar */
  9.   }
  10.  
  11.   printf("\n");
  12. }

Un saludo


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: KaL3o en 7 Junio 2013, 22:52 pm
hay varios apartes que se repiten, seria bueno utilizar funciones, reduciriaas varias lineas de codigo

salu2 :)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 9 Junio 2013, 23:02 pm
Algunos comentarios:
........................................
Si van a utilizar un array declarado en esa forma hay que asegurarse de que el compilador soporte el estándar C99 y se compile en ese modo (a veces sucede).

Yo al menos llevo un tiempito usándolos en el Code::Blocks sin problemas.

Código
  1. char matriz[dim][dim];
  2.  
  3. /* ... */
  4.  
  5. for (i = 1; i <= dim; i++){
  6.   for (j = 1; j <= dim; j++){
  7.      matriz[i][j] = '.';
  8.      printf("%c ", matriz[i][j]);
  9.   }
  10.  
  11.   printf("\n");
  12. }
En C y C los indices de los arrays inician en 0 y terminan en N-1 donde N es el numero de elementos. Hay que cambiar el par de bucles a:
Código
  1. char matriz[dim][dim];
  2.  
  3. /* ... */
  4.  
  5. for (i = 0; i < dim; i++){
  6.   for (j = 0; j < dim; j++){
  7.      matriz[i][j] = '.';
  8.      fputs(". ", stdout); /* Imprime ". " en la salida estandar */
  9.   }
  10.  
  11.   printf("\n");
  12. }

Un saludo

Sí, estoy de acuerdo contigo. Pero yo lo estoy haciendo "a conciencia", puesto que las líneas de i=0 y j=0 se rellenarán para la numeración de las casillas.

 Y la dimensión de la matriz en mi último post ya estaba corregida a dim+1. De todas formas, gracias nuevamente por la atención prestada.

Saluditos! .... ..
(http://st.forocoches.com/foro/images/smilies/ciao.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 11 Junio 2013, 17:23 pm
Buenas! finalmente luego de unas cuantas horas podido hacer el juego. Lo posteo abajo para que me puedan corregir algunas cosas las cuales yo no me doy cuenta debido a que soy bastante nuevo en esto.

leosansan muchas gracias, me ha sido de gran ayuda tus consejos.


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #define DIM 16
  4. int inicializar_tablero(char tablero[][DIM],int);
  5. int juegan_O_(char tabla[][DIM],int,int);
  6. int juegan_X_(char tablero[][DIM],int,int);
  7. int main()
  8. {
  9.    int n=0,i,j,x,resto=1,k=0,jugador,partida,victoria=0;
  10.    char d;
  11.    printf("\n\n\n     JUEGO CONECTA CUATRO\n\n\n\n\n\n\n");
  12.    printf("       Nueva partida (S/N): ");
  13.    do
  14.    {
  15.        scanf("%c",&d);
  16.        system("cls");
  17.        if (d=='n' || d=='N')
  18.        {
  19.            return 1;
  20.        }
  21.        if (d!='s' && d!='S')
  22.            printf("\nOpcion incorrecta. Elija: s / n  ");
  23.    }while (d!='s' && d!='S');
  24.    volver:
  25.     printf("\n\nIngresa la dimension del tablero de juego(4-15): ");
  26.    do
  27.    {
  28.        scanf (" %d",&x);
  29.        system("cls");
  30.        if (x<4 || x>15)
  31.            printf("\nOpcion no valida. Ingresa la dimension (4-15): ");
  32.    } while (x<4 || x>15);
  33.    system("cls");
  34.    char tablero[DIM][DIM];
  35.    printf("\n ELIJA JUGADOR\n\n\n");
  36.    printf("\n\n  1) JUGADOR 1 (X)\n");
  37.    printf("\n\n  2) JUGADOR 2 (O)\n");
  38.    elegir:
  39.    scanf("%d",&jugador);
  40.    system("cls");
  41.    if ((jugador!=1) && (jugador!=2))
  42.    {
  43.        printf("\nError: Los jugadores posibles son 1 y 2 ");
  44.        goto elegir;
  45.    }
  46.    do
  47.    {
  48.        inicializar_tablero(tablero,x);
  49.        while ((resto<=(x*x)) && (victoria!=1))
  50.        {
  51.            if (jugador==1)
  52.            {
  53.                jugador++;
  54.               juegan_X_(tablero,x,n);
  55.               for (i=1;i<=x;i++)
  56.           {
  57.     for (j=1;j<=x;j++)
  58. {
  59. if ((tablero[i][j]=='X') && ((tablero[i][j+1])=='X') && ((tablero[i][j+2])=='X') && ((tablero[i][j+3])=='X'))
  60. {
  61. victoria = 1;
  62. }
  63. else if ((tablero[i][j]=='X') && ((tablero[i+1][j])=='X') && ((tablero[i+2][j])=='X') && ((tablero[i+3][j])=='X'))
  64. {
  65. victoria = 1;
  66. }
  67. else if ((tablero[i][j]=='X') && ((tablero[i+1][j-1])=='X') && ((tablero[i+2][j-2])=='X') && ((tablero[i+3][j-3])=='X'))
  68. {
  69. victoria = 1;
  70. }
  71. else if ((tablero[i][j]=='X') && ((tablero[i+1][j+1])=='X') && ((tablero[i+2][j+2])=='X') && ((tablero[i+3][j+3])=='X'))
  72. {
  73. victoria = 1;
  74. }
  75. }
  76.   }
  77.               if (victoria == 1)
  78.               {
  79.               printf("\nJUGADOR 1 GANA!!!\n");
  80.               }
  81.               else
  82.               {
  83.               resto++;
  84.               }
  85.            }
  86.            else if (jugador == 2)
  87.            {
  88.                jugador--;
  89. juegan_O_(tablero,x,n);
  90. for (i=1;i<=x;i++)
  91.           {
  92.     for (j=1;j<=x;j++)
  93. {
  94. if ((tablero[i][j]=='O') && ((tablero[i][j+1])=='O') && ((tablero[i][j+2])=='O') && ((tablero[i][j+3])=='O'))
  95. {
  96. victoria = 1;
  97. }
  98. else if ((tablero[i][j]=='O') && ((tablero[i+1][j])=='O') && ((tablero[i+2][j])=='O') && ((tablero[i+3][j])=='O'))
  99. {
  100. victoria = 1;
  101. }
  102. else if ((tablero[i][j]=='O') && ((tablero[i+1][j-1])=='O') && ((tablero[i+2][j-2])=='O') && ((tablero[i+3][j-3])=='O'))
  103. {
  104. victoria = 1;
  105. }
  106. else if ((tablero[i][j]=='O') && ((tablero[i+1][j+1])=='O') && ((tablero[i+2][j+2])=='O') && ((tablero[i+3][j+3])=='O'))
  107. {
  108. victoria = 1;
  109. }
  110. }
  111.   }
  112.               if (victoria == 1)
  113.               {
  114.               printf("\nJUGADOR 2 GANA!!!\n");
  115.               }
  116.               else
  117.               {  
  118.                resto++;
  119.               }
  120.            }
  121.        if (resto > (x*x) && (victoria!=1))
  122.         {
  123.         printf("\n\nEMPATE\n\n");
  124.            }
  125.        }
  126.    }while ((resto<=(x*x)) && (victoria!=1));
  127.    resto = 1;
  128.    victoria = 0;
  129.    printf("\nPara jugar nuevamente presione 1: ");
  130.    scanf("%d",&partida);
  131.    system("cls");
  132.    if (partida == 1)
  133.    {
  134.     goto volver;
  135.    }
  136.    system("PAUSE");
  137. }
  138. int inicializar_tablero(char tablero[DIM][DIM],int x)
  139. {
  140. int i,j;
  141. for (i=1; i<=x; i++)
  142. {
  143. for (j=1;j<=x; j++)
  144. {
  145. printf("%c ",tablero[i][j]='.');
  146. }
  147. printf("\n");
  148. }
  149.  
  150. }
  151. int juegan_X_(char tablero[DIM][DIM],int x,int n)
  152. {
  153. int i,j,k;
  154. do
  155.    {
  156.        printf("\nJuega JUGADOR 1: ");
  157.                    scanf ("%d",&n);
  158.        if (n<1 || n>x)
  159.        {
  160.            printf("Error: las columnas posibles son de 1 a %d",x);
  161.        }  
  162. else if (tablero[1][n]!='.')
  163. {
  164. printf("\nError: la columna ya esta llena.\n ");
  165.     }
  166.    }while((n<1 || n>x) || (tablero[1][n]!='.'));
  167. for (k=x;k>=1;k--)
  168.    {
  169.            if (tablero[k][n]!='.')
  170.                continue;
  171.            else
  172.            {
  173.                tablero[k][n]='X';
  174.                break;
  175.            }
  176.    }
  177.       system("cls");  
  178.   printf("\nUltima jugada X: Columna %d\n",n);      
  179.    printf("\n");
  180.    for (i=1;i<=x;i++)
  181.    {
  182.        for (j=1;j<=x;j++)
  183.        {
  184.            printf ("%c ",tablero[i][j]);
  185.  
  186.        }
  187.        printf("\n");
  188.    }
  189. }
  190. int juegan_O_(char tablero[DIM][DIM],int x,int n)
  191. {
  192. int i,j,k;
  193. do
  194.    {
  195.        printf("\nJuega JUGADOR 2: ");
  196.                    scanf ("%d",&n);
  197.        if (n<1 || n>x)
  198.        {
  199.            printf("Error: las columnas posibles son de 1 a %d",x);
  200.        }  
  201. else if (tablero[1][n]!='.')
  202. {
  203. printf("\nError: la columna ya esta llena.\n ");
  204.     }
  205.    }while((n<1 || n>x) || (tablero[1][n]!='.'));
  206. for (k=x;k>=1;k--)
  207.    {
  208.            if (tablero[k][n]!='.')
  209.                continue;
  210.            else
  211.            {
  212.                tablero[k][n]='O';
  213.                break;
  214.            }
  215.    }
  216.       system("cls");    
  217.   printf("\nUltima jugada O: Columna %d\n",n);    
  218.    printf("\n");
  219.    for (i=1;i<=x;i++)
  220.    {
  221.        for (j=1;j<=x;j++)
  222.        {
  223.            printf ("%c ",tablero[i][j]);
  224.  
  225.        }
  226.        printf("\n");
  227.    }
  228. }
  229.  


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 11 Junio 2013, 19:40 pm
hay varios apartes que se repiten, seria bueno utilizar funciones, reducirias varias lineas de codigo

salu2 :)

Pues la verdad que tienes razón y como simple ejercicio voy a rehacer el código usando funciones, o sea modular, para que no se repitan líneas de código más allá de las imprescindibles.

Y ahora que mathias_vg a publicado su código, posteo el mío. Y como una imagen vale más que mil palabras ahí va:


(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4beta1_zpsa3bac13e.jpg)(http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4beta11_zps1c3b4f99.jpg) (http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4beta13_zpsbbb0d824.jpg)    (http://i1280.photobucket.com/albums/a497/leosansan/GRAFICOS1/conecta4beta14_zpsd79aea5d.jpg)

Observar que he tenido en cuenta el "detallito" de que si el usuario introduce por error una letra en lugar de un número no entre en un bucle.  ;)

Conste que hay una dimensión de la matriz por usar, todo a su momento, como el tema del color. ¿Te animas a una partidita?:


Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include<locale.h>
  4.  
  5.  
  6. /**************  FUNCIONES  **************/
  7. char** asig_memoria( int dim_plus);
  8. void tamanyo_consola (char **matriz,int dim_plus);
  9. void jugada(char **matriz,int dim_plus,int jugador, int color_juego);
  10. void imprimir(char **matriz,int dim_plus,int color_juego);
  11. void comprobar_ganador (char **matriz , int jugador, int x, int y, int dim_plus, int color_jueg);
  12. void ganador (char** matriz,int jugador, int dim_plus, int color_juego,int gana_empata);
  13. void contador(int* cont,char** matriz,int jugador, int dim_plus, int color_juego);
  14. void liberar_mem_matriz( char** matriz, int dim_plus);
  15. void salir( char** matriz, int dim_plus);
  16.  
  17. /**************  FUNCION MAIN   **************/
  18.  
  19. int main()
  20. {
  21.    setlocale(LC_ALL, "Spanish");
  22.    int color_juego=0,dim_plus=0;
  23.    char d,**matriz;
  24.    int i=0,j=0,dim=0,movimientos=0,k=0,jugador=1,gana_empata=0;
  25.    printf("\n\n\tIngresa la dimensión del tablero de juego (4-10):");
  26.    fflush (stdout);
  27.    do
  28.    {
  29.        scanf ("%d",&dim);
  30.        if (dim<4 || dim>10 )
  31.        {
  32.            printf("\n\n\t\tOpción no valida.\n\n\t\tIngresa la dimensión (4-10): ");
  33.            fflush (stdout);
  34.        }
  35.  
  36.        while (getchar()!='\n');
  37.    }while (dim<4 || dim>10);
  38.    dim_plus=dim+1;
  39.    matriz = asig_memoria( dim_plus );
  40.    for (i=1;i<dim_plus;i++)
  41.        for (j=1;j<dim_plus;j++)
  42.            matriz[i][j]=' ';
  43.    tamanyo_consola (matriz, dim_plus);
  44.    imprimir( matriz, dim_plus, color_juego);
  45.    while (movimientos<=(dim*dim))
  46.    {
  47.        jugada( matriz, dim, jugador, color_juego);
  48.        imprimir( matriz, dim_plus, color_juego);
  49.        if (jugador==1)
  50.            jugador=2;
  51.        else
  52.            jugador=1;
  53.        movimientos++;
  54.        if (movimientos==dim*dim)
  55.            ganador (matriz,jugador,dim_plus,  color_juego,gana_empata);
  56.    }
  57.    system("PAUSE");
  58.    return 0;
  59. }
  60. /**************  FUNCION JUGADA  **************/
  61. void jugada(char **matriz,int dim_plus,int jugador,int color_juego)
  62. {
  63.    int x=0,y=0,flag=0;
  64.    char simbolo[]={'X','O'};
  65.    do
  66.    {
  67.        do
  68.        {
  69.            flag=0;
  70.            printf("\nJUGADOR %d (%c): ",jugador,simbolo[jugador-1]);
  71.            fflush (stdout);
  72.            scanf ("%d",&y);
  73.            while (getchar()!='\n');
  74.            if (y<1 || y>dim_plus)
  75.                puts("Opción no valida.\nIngresa (4-10)");
  76.        }while(y<1 || y>dim_plus);
  77.        for (x=dim_plus;x>=0;x--)/*<==este for es mejorable*/
  78.        {
  79.            if (matriz[x][y]!=' ' && x!=0)
  80.                continue;
  81.            else if (x==0)
  82.            {
  83.                puts("¡Ya se llego al limite!.\nIntroduzca otro valor.");
  84.                flag=1;
  85.            }
  86.            else
  87.            {
  88.                matriz[x][y]=simbolo[jugador-1];
  89.                break;
  90.            }
  91.        }
  92.    }while (flag==1);
  93.    comprobar_ganador (matriz,jugador,x, y,dim_plus, color_juego);
  94. }
  95. /**************  FUNCION TAMAÑO DE LA CONSOLA  **************/
  96. void tamanyo_consola (char **matriz,int dim_plus)
  97. {
  98.    char tamanyo_consola2[80];
  99.    int tam_x=0,tam_y=0;
  100.    tam_x=3.8*dim_plus; /* con estos valores puedes*/
  101.    tam_y=2*dim_plus ;/*cambiar el tamaño de la consola*/
  102.    sprintf(tamanyo_consola2, "MODE %d,%d", tam_x, tam_y);
  103.    system(tamanyo_consola2);
  104.    system ("cls");
  105. }
  106. /**************  FUNCION ASIGNACION DE MEMORIA  **************/
  107. char **asig_memoria(int dim_plus )
  108. {
  109.    int i;
  110.    char** matriz;
  111.    matriz = malloc( dim_plus * sizeof *matriz );
  112.    for( i = 0; i < dim_plus; ++i )
  113.         matriz[i] = malloc( dim_plus * sizeof **matriz );
  114.   return matriz;
  115. }
  116. /**************  FUNCION IMPRIMIR  **************/
  117. void imprimir(char **matriz,int dim_plus,int color_juego)
  118. {
  119.    int i=0,j=0;
  120.    system ("cls");
  121.    for (i=0;i<dim_plus;i++)
  122.    {
  123.        for (j=1;j<dim_plus;j++)
  124.        {
  125.            if (i==0)
  126.                {
  127.                    printf ("[%d] ",j);
  128.                    fflush (stdout);
  129.                }
  130.  
  131.            else
  132.                {
  133.                    printf ("(%c) ",matriz[i][j]);
  134.                    fflush (stdout);
  135.                }
  136.        }
  137.        puts("");
  138.    }
  139. }
  140. /**************  FUNCION COMPROBAR GANADOR  **************/
  141. void comprobar_ganador (char **matriz , int jugador, int x, int y,int dim_plus,int color_juego)
  142. {
  143.    int k=1,cont=1;
  144.    for (k=1;k<5;k++)
  145.    {
  146.        if ( x+k <= dim_plus && y+k <= dim_plus && matriz[x][y]==matriz[x+k][y+k])
  147.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  148.        else
  149.            break;
  150.    }
  151.    for (k=1;k<5;k++)
  152.    {
  153.        if ( x+k > 0 && y+k > 0 && matriz[x][y]==matriz[x-k][y-k])
  154.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  155.        else
  156.            break;
  157.    }
  158.    cont=1;
  159.    for (k=1;k<5;k++)
  160.    {
  161.        if ( x+k <= dim_plus && y+k > 0 && matriz[x][y]==matriz[x+k][y-k])
  162.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  163.        else
  164.            break;
  165.    }
  166.    for (k=1;k<5;k++)
  167.    {
  168.        if ( x+k > 0 && y+k <= dim_plus && matriz[x][y]==matriz[x-k][y+k])
  169.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  170.        else
  171.            break;
  172.    }
  173.    cont=1;
  174.    for (k=1;k<5;k++)
  175.    {
  176.        if ( x+k <= dim_plus && matriz[x][y]==matriz[x+k][y])
  177.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  178.        else
  179.            break;
  180.    }
  181.     cont=1;
  182.     for (k=1;k<5;k++)
  183.    {
  184.        if ( y+k <= dim_plus && matriz[x][y]==matriz[x][y+k])
  185.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  186.        else
  187.            break;
  188.    }
  189.    for (k=1;k<5;k++)
  190.    {
  191.        if (y+k > 0 && matriz[x][y]==matriz[x][y-k] )
  192.            contador (&cont, matriz,jugador,dim_plus,  color_juego);
  193.        else
  194.            break;
  195.    }
  196. }
  197. /**************  FUNCION LIBERAR MEMORIA  **************/
  198. void liberar_mem_matriz( char** matriz, int dim_plus )
  199. {
  200.   int i;
  201.   for( i = 0; i < dim_plus; ++i )
  202.      free( matriz[i] );
  203.   free( matriz );
  204. }
  205. /**************  FUNCION CONTADOR   **************/
  206. void contador(int* cont,char** matriz,int jugador, int dim_plus, int color_juego)
  207. {
  208.    int gana_empata=1;
  209.    *cont=+*cont+1;
  210.    if (*cont==4)
  211.    {
  212.        imprimir( matriz, dim_plus+1, color_juego);
  213.        ganador (matriz,jugador,dim_plus,  color_juego,gana_empata);
  214.    }
  215. }
  216. /**************  FUNCION GANADOR   **************/
  217. void ganador (char** matriz,int jugador, int dim_plus, int color_juego,int gana_empata)
  218. {
  219.    if (gana_empata==1)
  220.        printf ("Ganó el JUGADOR %d\n",jugador);
  221.    else if (gana_empata==0)
  222.        puts("EMPATE");
  223.    else
  224.        puts("¡ERROR!");
  225.    puts ("Hasta lueguito.");
  226.    salir( matriz, dim_plus );
  227. }
  228. /**************  FUNCION SALIR  **************/
  229. void salir( char** matriz, int dim_plus )
  230. {
  231.    int i;
  232.    for( i = 0; i < dim_plus; ++i )
  233.        free( matriz[i] );
  234.    free( matriz );
  235.    system ("pause");
  236.    exit (0);
  237. }
  238. /**************  FIN  **************/
  239.  

Próximamente habrán más novedades/variantes del /los juegos, tanto del Conecta-4 como del 4 en línea.

Por supuesto que serán bienvenidas las críticasy/o sugerencias.

Ya adelanto que la intención es que tenga color y que se pueda elegir entre seguir jugando o salir. Detallitos que espero hagan más sugerente el/los jueguitos.

Y sí, ya sé que lo he "complicado" con tanta función pero de eso iba el "envite" deKaL3o . ;)


Saluditos!.
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 11 Junio 2013, 19:57 pm
Me podrian decir porque entra en bucle cuando elijo un caracter? Que es lo que tengo que modificar?

Muchas gracias


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 11 Junio 2013, 23:31 pm
Me podrían decir porque entra en bucle cuando elijo un caracter? Que es lo que tengo que modificar?


Ya sabía que tarde o temprano te darías cuanta por ti mismo. Se debe a que el caracter, no utilizado porque el scanf no lo reconoce, ya que el espera un int, se queda en el bufer y en la próxima llamada al scanf éste toma automáticamente el valor del carcater que quedo en el bufer  y y así sucesivamente  entrando por ello en un bucle.

Fíjate e los detalles de mi código:

Código
  1. do
  2.    {
  3.        scanf ("%d",&dim);
  4.        if (dim<4 || dim>10 )
  5.        {
  6.            printf("\n\n\t\tOpción no valida.\n\n\t\tIngresa la dimensión (4-10): ");
  7.            fflush (stdout);
  8.        }
  9.  
  10.        while (getchar()!='\n'); /*<==limpio el buffer e impido entrar en un bucle*/
  11.    }while (dim<4 || dim>10);

Eso en los scanf de tipos numéricos, no hace falta cuando son de tipo char.


Saluditos! .... ..(http://st.forocoches.com/foro/images/smilies/dancer2.gif)


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: mathias_vg en 12 Junio 2013, 15:05 pm
Gracias leosansan, ahora, te pregunto, hay alguna manera de hacerlo sin tener que utilizar la funcion getchar? ya que no la dimos en clase y no se si la puedo utilizar.
algo como transformar el caracter de entrada en numero y asi que me marque el error?

Saludos


Título: Re: Juego 4 en linea. Ayuda!!!
Publicado por: leosansan en 12 Junio 2013, 16:08 pm
Gracias leosansan, ahora, te pregunto, hay alguna manera de hacerlo sin tener que utilizar la funcion getchar? ya que no la dimos en clase y no se si la puedo utilizar.
algo como transformar el caracter de entrada en numero y así que me marque el error?


Si sólo fuera un caracter podrías hacer uso de atoi, y aún así habría que añadir la condición de >0 y <15, pero como ves el "15" no es un caracter sino una cadena, con lo que no valdría el uso de dicha función y, en principio lo que se me ocurre a bote proto, sería  usar una función como "strol". Pero se me hace difícil entender que no uses getchar, que es una función muy usada de la librería stdio y, a cambio, te metas con funciones de la librería string que conllevan más cosas para lograr el objetivo.

Usa getchar.

Es más, en varios compiladores -e.j. Dev-C++- es una función que se aprende al tiempo que el uso de main o printf, pues si no la ponen al final del código el programa se ejecuta y se cierra de un golpe y, en ese caso, se usa getchar "como freno" para "ver" la consola antes de que ésta se cierre.



Saluditos!.
     (http://st.forocoches.com/foro/images/smilies/aaaaa.gif)