alguien que me diga el error es el juego de conecta cuatro en codigo c

Iniciado por cisar, 20 Mayo 2013, 02:09 AM

0 Miembros y 1 Visitante están viendo este tema.

cisar

#include <stdio.h>
#include <stdlib.h>

int juego();
int main()
{

   int d, played=0;

    while(d!=2)
    {   system("cls");
      printf("Conecta 4\n------\n");
      printf("1)Jugar\n");
      printf("2)Salir\n\n");
      printf("\tJuegos jugados:%d\n", played);
       scanf("%d", &d);                //pide opción del menú.
       switch(d)
       {   case 1:
              juego();                //llama a la función juego.
              played++;              //el contador de juegos se incrementa.
          break;
          case 2:
          break;
          default:
              printf("\nError.. Solo elige 1 o 2...\n");

          break;
      }
   }
    return 0;

   }

int juego()
{
    int tablero[6][7], i, j, won=0, turno=1, seleccion;
    for(i=0;i<7;i++)
        for(j=0;j<6;j++)
            tablero[j]=0;     //Pone todo vacio
    while(!won)
    {   system("cls");
        for(i=0;i<7;i++)
            printf(" %d\t", i+1);  //imprime la numeración de las columnas
        printf("\n");
        for(i=0;i<6;i++)
        {    for(j=0;j<7;j++)                    //recorre cada espacio del tablero
                if(tablero[j]==0)
                   printf("( )\t");            //imprimiendo la matriz, y segun lo que tenga
                else if(tablero[j]==1)
                   printf("(X)\t");            //pone un espacio, X, o O
                else
                    printf("(O)\t");
            printf("\n");
        }
        if(turno==1)
            printf("\nTurno de X.");
        else
            printf("\nTurno de O.");
        printf("En que columna tiraras?");
        scanf("%d", &seleccion);
        seleccion--;  //porque esta numerado desde el 1, y la compu cuenta desde el 0.
        if(tablero[seleccion][0]!=0)
            printf("\nError columna llena o fuera de rango\n");
        else
        {   for(i=0;i<6;i++)
                if(tablero[seleccion][i+1]!=0||i==5)
                {   tablero[seleccion]=turno;   //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa.
                    i=6;
                }

            for(i=0;i<7;i++)
            {   for(j=0;j<6;j++)
                {   if(tablero[j]==1||tablero[j]==2)
                       {
                            if(tablero[j]==tablero[j+1]&&tablero[j]==tablero[j+2]&&tablero[j]==tablero[j+3])
                                won=1; //checa para la derecha

                            if(tablero[j]==tablero[i+1][j]&&tablero[j]==tablero[i+2][j]&&tablero[j]==tablero[i+3][j])
                                won=1;  //checa para abajo

                            if(tablero[j]==tablero[i+1][j+1]&&tablero[j]==tablero[i+2][j+2]&&tablero[j]==tablero[i+3][j+3])
                                won=1;//diagonal a derecha
                        if(tablero[j]==tablero[i+1][j-1]&&tablero[j]==tablero[i+2][j-2]&&tablero[j]==tablero[i+3][j-3])
                                won=1; //diag izquierda
                    }
                }
            }
            if(won==1)
            {   system("cls");

                for(i=0;i<7;i++)
                    printf(" %d\t", i+1);  //imprime la numeración de las columnas
                printf("\n");
                for(i=0;i<7;i++)
                {
                    for(j=0;j<6;j++)
                        if(tablero[j]==0)
                            printf("( )\t");
                        else if(tablero[j]==1)
                            printf("(X)\t");
                        else
                            printf("(O)\t");
                    printf("\n");
                }
                printf("Bien! gano ");
                if(turno==1)
                    printf("X\n");
                else
                    printf("O\n");
            }
            if(turno==1)
                turno=2;     //cambia los turnos
            else
                turno=1;

        }
    }
    fflush(stdin);
    getchar();

    return juego;
}

amchacon

#1
Usa las etiquetas GESHI

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int juego();
int main()
{

  int d, played=0;

   while(d!=2)
   {   system("cls");
     printf("Conecta 4\n------\n");
     printf("1)Jugar\n");
     printf("2)Salir\n\n");
     printf("\tJuegos jugados:%d\n", played);
      scanf("%d", &d);                //pide opción del menú.
      switch(d)
      {   case 1:
             juego();                //llama a la función juego.
             played++;              //el contador de juegos se incrementa.
         break;
         case 2:
         break;
         default:
             printf("\nError.. Solo elige 1 o 2...\n");

         break;
     }
  }
   return 0;

  }


Por otro lado, deberías decirnos el error. Así acabamos antes (de momento veo que no has inicializado la variable d).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

s00rk

Cuando indicas donde puso la ficha el jugador esta mal
tablero[seleccion]=turno;

Es una matriz no un vector, debes indicarle ambos puntos sobre donde guardaras, igualmente cuando buscas quien gano estas solo indicando un punto y no ambos.

leosansan

#3
Si estaban puestos. Lo que ocurre que al no meter el código entre las etiquetas GeSHi de C++ no salen. Simplemente lo que pongo a continuación es el mismo código entre dichas etiquetas:


Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int juego();
int main()
{

int d=3, played=0;

   while(d!=2)
   {   system("cls");
printf("\tJuegos jugados:%d\n", played);
printf("Conecta 4\n------\n");
printf("1)Jugar\n");
printf("2)Salir\n\n");
   scanf("%d", &d);                //pide opción del menú.
    switch(d)
    {   case 1:
       juego();                //llama a la función juego.
       played++;              //el contador de juegos se incrementa.
   break;
   case 2:
   break;
   default:
       printf("\nError.. Solo elige 1 o 2...\n");

   break;
}
}
   return 0;

}

int juego()
{
   int tablero[6][7], i, j, won=0, turno=1, seleccion;
   for(i=0;i<7;i++)
       for(j=0;j<6;j++)
           tablero[i][j]=0;     //Pone todo vacio
   while(!won)
   {   system("cls");
       for(i=0;i<7;i++)
           printf(" %d\t", i+1);  //imprime la numeración de las columnas
       printf("\n");
       for(i=0;i<6;i++)
       {    for(j=0;j<7;j++)                    //recorre cada espacio del tablero
               if(tablero[j][i]==0)
                  printf("( )\t");            //imprimiendo la matriz, y segun lo que tenga
               else if(tablero[j][i]==1)
                  printf("(X)\t");            //pone un espacio, X, o O
               else
                   printf("(O)\t");
           printf("\n");
       }
       if(turno==1)
           printf("\nTurno de X.");
       else
           printf("\nTurno de O.");
       printf("En que columna tiraras?");
       scanf("%d", &seleccion);
       seleccion--;  //porque esta numerado desde el 1, y la compu cuenta desde el 0.
       if(tablero[seleccion][0]!=0)
           printf("\nError columna llena o fuera de rango\n");
       else
       {   for(i=0;i<6;i++)
               if(tablero[seleccion][i+1]!=0||i==5)
               {   tablero[seleccion][i]=turno;   //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa.
                   i=6;
               }

           for(i=0;i<7;i++)
           {   for(j=0;j<6;j++)
               {   if(tablero[i][j]==1||tablero[i][j]==2)
                      {
                           if(tablero[i][j]==tablero[i][j+1]&&tablero[i][j]==tablero[i][j+2]&&tablero[i][j]==tablero[i][j+3])
                               won=1; //checa para la derecha

                           if(tablero[i][j]==tablero[i+1][j]&&tablero[i][j]==tablero[i+2][j]&&tablero[i][j]==tablero[i+3][j])
                               won=1;  //checa para abajo

                           if(tablero[i][j]==tablero[i+1][j+1]&&tablero[i][j]==tablero[i+2][j+2]&&tablero[i][j]==tablero[i+3][j+3])
                               won=1;//diagonal a derecha
                       if(tablero[i][j]==tablero[i+1][j-1]&&tablero[i][j]==tablero[i+2][j-2]&&tablero[i][j]==tablero[i+3][j-3])
                               won=1; //diag izquierda
                   }
               }
           }
           if(won==1)
           {   system("cls");

               for(i=0;i<7;i++)
                   printf(" %d\t", i+1);  //imprime la numeración de las columnas
               printf("\n");
               for(i=0;i<7;i++)
               {
                   for(j=0;j<6;j++)
                       if(tablero[j][i]==0)
                           printf("( )\t");
                       else if(tablero[j][i]==1)
                           printf("(X)\t");
                       else
                           printf("(O)\t");
                   printf("\n");
               }
               printf("Bien! gano ");
               if(turno==1)
                   printf("X\n");
               else
                   printf("O\n");
           }
           if(turno==1)
               turno=2;     //cambia los turnos
           else
               turno=1;

       }
   }
   fflush(stdin);
   getchar();

   return juego;
}



Saluditos!. .... ..

leosansan

#4
¡¡¡Ya puedes jugar!!!, tan solo tenías mal declaradas las dimensiones de la matriz tablero en los for. Te he incluido una pequeña variante por si entran un caracter no numérico no se quede en un bucle el programa:

Código (cpp) [Seleccionar]


#include <stdio.h>
#include <stdlib.h>

int juego();
int main()
{

int d,played=0,cont=0;
   while(d!=2)
   {   //system("cls");
cont=0;
printf("Conecta 4\n------\n");
printf("1)Jugar\n");
printf("2)Salir\n\n");
printf("\tJuegos jugados:%d\n", played);
   cont=scanf("%d", &d);
   if (cont==0){
           d=3;
           while(getchar()!='\n');
   }

                       //pide opción del menú.
    switch(d)
    {   case 1:
       juego();                //llama a la función juego.
       played++;              //el contador de juegos se incrementa.
   break;
   case 2:
   break;
   default:
       printf("\nError.. Solo elige 1 o 2...\n");

   break;
}
}
   return 0;

}

int juego()
{
   int tablero[6][7], i, j, won=0, turno=1, seleccion;
   for(i=0;i<6;i++)
       for(j=0;j<7;j++)
           tablero[i][j]=0;     //Pone todo vacio
   while(!won)
   {   system("cls");
       for(i=0;i<6;i++)
           printf(" %d\t", i+1);  //imprime la numeración de las columnas
       printf("\n");
       for(i=0;i<6;i++)
       {    for(j=0;j<7;j++)                    //recorre cada espacio del tablero
               if(tablero[j][i]==0)
                  printf("( )\t");            //imprimiendo la matriz, y segun lo que tenga
               else if(tablero[j][i]==1)
                  printf("(X)\t");            //pone un espacio, X, o O
               else
                   printf("(O)\t");
           printf("\n");
       }
       if(turno==1)
           printf("\nTurno de X.");
       else
           printf("\nTurno de O.");
       printf("En que columna tiraras?");
       scanf("%d", &seleccion);
       seleccion--;  //porque esta numerado desde el 1, y la compu cuenta desde el 0.
       if(tablero[seleccion][0]!=0)
           printf("\nError columna llena o fuera de rango\n");
       else
       {   for(i=0;i<6;i++)
               if(tablero[seleccion][i+1]!=0||i==5)
               {   tablero[seleccion][i]=turno;   //si el espacio que sigue esta lleno, o esta en el borde, lo ocupa.
                   i=6;
               }

           for(i=0;i<7;i++)
           {   for(j=0;j<6;j++)
               {   if(tablero[i][j]==1||tablero[i][j]==2)
                      {
                           if(tablero[i][j]==tablero[i][j+1]&&tablero[i][j]==tablero[i][j+2]&&tablero[i][j]==tablero[i][j+3])
                               won=1; //checa para la derecha

                           if(tablero[i][j]==tablero[i+1][j]&&tablero[i][j]==tablero[i+2][j]&&tablero[i][j]==tablero[i+3][j])
                               won=1;  //checa para abajo

                           if(tablero[i][j]==tablero[i+1][j+1]&&tablero[i][j]==tablero[i+2][j+2]&&tablero[i][j]==tablero[i+3][j+3])
                               won=1;//diagonal a derecha
                       if(tablero[i][j]==tablero[i+1][j-1]&&tablero[i][j]==tablero[i+2][j-2]&&tablero[i][j]==tablero[i+3][j-3])
                               won=1; //diag izquierda
                   }
               }
           }
           if(won==1)
           {   system("cls");

               for(i=0;i<7;i++)
                   printf(" %d\t", i+1);  //imprime la numeración de las columnas
               printf("\n");
               for(i=0;i<7;i++)
               {
                   for(j=0;j<6;j++)
                       if(tablero[j][i]==0)
                           printf("( )\t");
                       else if(tablero[j][i]==1)
                           printf("(X)\t");
                       else
                           printf("(O)\t");
                   printf("\n");
               }
               printf("Bien! gano ");
               if(turno==1)
                   printf("X\n");
               else
                   printf("O\n");
           }
           if(turno==1)
               turno=2;     //cambia los turnos
           else
               turno=1;

       }
   }
   fflush(stdin);
   getchar();

   return juego;
}


Ssaluditos!. ... ..

P.D: Sería interesante que desarrollaras una variante donde el "otro" jugador sea "la máquina". LLeva algo de desarrollo de I.A pero vale la pena el intentarlo.

leosansan

#5
Cita de: leosansan en 20 Mayo 2013, 18:25 PM
¡¡¡Ya puedes jugar!!:

   Sólo comentar que en lugar de un tablero "aburrido" como éste:



   podemos tener algo más "vistoso", sin usar librerías adicionales":



   siguiendo lo indicado en

http://foro.elhacker.net/programacion_cc/c-t390579.0.html

   sin más que añadir a lo expuesto en el post que indico encima system("color 70)" ....... ¡y a  jugar con colorines!.


¡Saluditos! .... ..