Juego 4 en linea. Ayuda!!!

Iniciado por mathias_vg, 3 Junio 2013, 16:47 PM

0 Miembros y 2 Visitantes están viendo este tema.

mathias_vg

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

leosansan

Cita de: 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

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! .... ..

mathias_vg

Ok, espero tu respuesta. muchas gracias por tu tiempo leosansan. Saludos!

leosansan

Cita de: mathias_vg en  5 Junio 2013, 16:05 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! .... ..

mathias_vg

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

mathias_vg

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!!!

#include <stdio.h>
#include <iostream.h>
int main()
{
   
    char d;
    printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
    printf("       Nueva partida (S/N)");
    scanf("%c",&d);
    int n=0,i=0,j=0,dim=0,resto=0;
    printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
    scanf (" \n%d",&dim);
    char matriz[dim][dim];
    do
    {
        for (i=1;i<=dim;i++)
        {
            for (j=1;j<=dim;j++)
            {
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                    printf("%c ",'.');
                else
                    printf ("%c ",'X');
            }
            printf("\n");
        }
        while (resto<=(dim*dim))
        {
        if ((resto%2)==0)
        {
        printf("\nJuega JUGADOR 1: ");
        scanf (" %d",&n);
            matriz[dim][n]='O';
            printf ("%c\n",matriz[dim][n]);
            for (i=1;i<=dim;i++)
        {
            for (j=1;j<=dim;j++)
            {
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                    printf("%c ",'.');
                else
                    if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
printf ("%c ",'O');
else
printf ("%c ",'X');
            }
            printf("\n");
        }
        }
        else
        {
        printf("\nJuega JUGADOR 2: ");
            scanf (" %d",&n);
            matriz[dim][n]='X';
            printf ("%c\n",matriz[dim][n]);
            for (i=1;i<=dim;i++)
        {
            for (j=1;j<=dim;j++)
            {
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                    printf("%c ",'.');
                else
                if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
printf ("%c ",'O');
else
printf ("%c ",'X');
                   
            }
            printf("\n");
        }
        }
        resto++;
        }
       
     }while (1);
    return 0;
    system("PAUSE");
}


leosansan

#16
Cita de: 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!!!


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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main()
{

   char d;
   printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
   printf("       Nueva partida (S/N)");
   scanf("%c",&d);   /*<==esto asi no sirve. Tienes que hacer un do-while*/
   /*para si es "s" jugar y si no salir*/
   int n=0,i=0,j=0,dim=0,resto=0,/*<<<<<esto es nuevo>>>>>*/jugador=1;
   printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
   scanf ("%d",&dim);
   char matriz[dim][dim];
   do
   {
       for (i=1;i<=dim;i++)
       {
           for (j=1;j<=dim;j++)
           {
               if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                   printf("%c ",'.');
               else
                   printf ("%c ",'X');
           }
           printf("\n");
       }
       while (resto<=(dim*dim))
       {
        /*if ((resto%2)==0)*/
        if (jugador==1)/*el codigo es mas eficiente porque se
               ahorra dim*dim divisiones y calculo de restos*/
       {
        jugador++;
        printf("\nJuega JUGADOR 1: ");
        scanf (" %d",&n);
           matriz[dim][n]='O';
           printf ("%c\n",matriz[dim][n]);
           for (i=1;i<=dim;i++)
       {
           for (j=1;j<=dim;j++)
           {
               /*<==aqui tienes que revisar los if porque si la posicion*/
           /* esta ocupada por X o por O , entonces es matriz[dim-1][n]='O';
           es decir, sube, Tal como lo tienes los valores que repiten posicion
           borran a los anteriores y no sales nunca de la ultima linea*/
               if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                   printf("%c ",'.');
               else
                   if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
printf ("%c ",'O');
else
printf ("%c ",'X');
           }
           printf("\n");
       }
       }

       else
       {
           jugador=1;
        printf("\nJuega JUGADOR 2: ");
           scanf (" %d",&n);
           matriz[dim][n]='X';
           printf ("%c\n",matriz[dim][n]);
           for (i=1;i<=dim;i++)
       {
           for (j=1;j<=dim;j++)
           {
               /*<==IDEM se superponen tal como esta*/
               if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                   printf("%c ",'.');
               else
               if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
printf ("%c ",'O');
else
printf ("%c ",'X');

           }
           printf("\n");
       }
       }

       resto++;
       }

    }while (1);
   return 0;
   system("PAUSE");
}


Saluditos! .... ..

mathias_vg

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

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

mathias_vg

#include <stdio.h>
#include <stdlib.h>
int main()
{
   
    char d;
    bool termino = false;
    int n=0,i=0,j=0,dim1=0,dim2=0,resto=1,contador=1;
    printf("\n\n\n     JUEGO CUATRO EN LINEA\n\n\n\n\n\n\n");
    printf("       Nueva partida (S/N)  ");
    scanf("%c",&d);
    printf("\n");
    printf("       JUGADOR 1  \n");
    printf("       JUGADOR 2    ");
    switch (d)
    {
        case 'N':case 'n':
        termino = true;
        break;
         default: printf("\n\nError");
        break;
        case 'S': case's':
    printf("\n\n\n\nIngresa la dimension del tablero de juego:\n\n");
    scanf (" \n%d",&dim2);
    dim1 = dim2;
    char matriz[dim1][dim2];
    do
    {
        for (i=1;i<=dim1;i++)
        {
            for (j=1;j<=dim2;j++)
            {
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                {
                    printf("%c ",'.');
                }
                else
                {
                    printf ("%c ",'X');
                }
            }
            printf("\n");
        }
        while (resto<=(dim2*dim2))
        {
        if ((resto%2)==0)
        {
        printf("\nJuega JUGADOR 1: ");
        scanf (" %d",&n);
            matriz[dim1][n]='O';
            printf ("%c\n",matriz[dim1][n]);
            for (i=1;i<=dim1;i++)
            {
            for (j=1;j<=dim2;j++)
            {
                  if ((matriz[i][j]=='X') || (matriz[i][j]=='O'))
                {
                   matriz[dim1-1][n]='O';   /* corregir */
                }
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                {
                    printf("%c ",'.');
                }
                else
                {
                    if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
                    {
printf ("%c ",'O');
                    }
else
{
         printf ("%c ",'X');
                    }
                }
            }
            printf("\n");
        }
    }
        else
        {
        printf("\nJuega JUGADOR 2: ");
            scanf (" %d",&n);
            matriz[dim1][n]='X';
            printf ("%c\n",matriz[dim1][n]);
            for (i=1;i<=dim1;i++)
        {
            for (j=1;j<=dim2;j++)
            {
                 if ((matriz[i][j]=='X') || (matriz[i][j]=='O'))
                {
                   matriz[dim1-1][n]='X';   /* corregir */
                }
                if ((matriz[i][j]!='X') && (matriz[i][j]!='O'))
                {
                    printf("%c ",'.');
                }
                else
                {
                if ((matriz[i][j]!='X') && (matriz[i][j]!='.'))
                {
printf ("%c ",'O');
                }
else
{
     printf ("%c ",'X');
                    }
                }
                   
            }
            printf("\n");
        }
        }
        resto++;
        }
        printf("EMPATE\n\n");
        system("PAUSE");
     }while (1);
    return 0;
    break;
       
    }
    while (!termino);
}


leosansan

#19
Cita de: 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.


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 (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
int main()
{

   char d;
   printf("\n\n\n     JUEGO CONECTA CUATRO\n\n\n\n\n\n\n");
   do
   {
       printf("       Nueva partida (S/N): ");
       scanf("%c",&d);
       if (d=='n' || d=='N')
       {
           puts ("Hasta lueguito.");
           return 1;
       }
       if (d!='s' && d!='S')
           puts ("Elija: s / n ");
   }while (d!='s' && d!='S');

   int n=0,i=0,j=0,dim=0,resto=0,k=0,jugador=1;
   printf("\n\n\n\nIngresa la dimension del tablero de juego(5-10):\n\n");
   do
   {
       scanf (" \n%d",&dim);
       if (dim<5 || dim>10)
           puts("Opcion no valida.\nIngresa la dimension (5-10)");
   }while (dim<5 || dim>10);

   char matriz[dim+1][dim+1];
   system ("cls");
   do
   {
       for (i=1;i<=dim;i++)
       {
           for (j=1;j<=dim;j++)
           {
               matriz[i][j]='.';
                   printf("%c ",matriz[i][j]);
           }
           printf("\n");
       }
       while (resto<=(dim*dim))
       {
           if (jugador==1)
           {
               jugador++;
               do
               {
                   //
                   printf("\nJuega JUGADOR 1: ");
                   scanf ("%d",&n);
                   if (n<1 || n>5)
                       puts ("Posicion no valida.\nEntre un nuevo valor.");
               }while(n<1 || n>5);
               for (k=dim;k>=1;k--)/*<==este for es mejorable*/
               {
                       if (matriz[k][n]!='.')
                           continue;
                       else
                       {
                           matriz[k][n]='O';
                           break;
                       }
               }
               printf("\n");
               for (i=1;i<=dim;i++)
               {
                   for (j=1;j<=dim;j++)
                   {
                       printf ("%c ",matriz[i][j]);
                   }
                   printf("\n");
               }
           }
           else
           {
               jugador=1;
               do
               {
                   printf("\nJuega JUGADOR 2: ");
                   scanf ("%d",&n);
                   if (n<1 || n>5)
                       puts ("Posicion no valida.\nEntre un nuevo valor.");
               }while(n<1 || n>5);
               for (k=dim;k>=1;k--)
               {
                       if (matriz[k][n]!='.')
                           continue;
                       else
                       {
                           matriz[k][n]='X';
                           break;
                       }
               }
               system ("cls");printf("\n");
               for (i=1;i<=dim;i++)
               {
                   for (j=1;j<=dim;j++)
                   {
                       printf ("%c ",matriz[i][j]);
                   }
                   printf("\n");
               }
           }

       resto++;
       }
    }while (1);
   return 0;
   system("PAUSE");
}


Saluditos! .... ..