juego de cuatro en linea en lenguaje C

Iniciado por gwennnnnn26, 22 Noviembre 2016, 18:26 PM

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

gwennnnnn26

Hola! oigan tengo que hacer un código en lenguaje c pero no tengo idea de como hacerlo me confundo a la hora de escribirlo y no se si si agarre porque no tengo donde ejecutarlo y no se si esta bien o mal, no les pido que me den el codigo pero si que si me pueden orientar a como va a a ir el codigo porque de verdad no se que hacer estoy perdida.

me pidieron que deba tener estas características:




1- debe de ser un tablero de 10 x 10 casillas (ese es uno de mis principales prblemas no se como hacer el tablero)
2-o sea yo no voy a jugarlo si no que mi programa sera el arbitro

El programa puede ser ejecutado de varias maneras:
1. ./cuatro –h : el programa deberá desplegar una ayuda
sobre cómo ejecutar y usar el juego. Terminando de
desplegar la ayuda no hará nada más y terminará la
ejecución.
2. ./cuatro : Al comenzar el programa de esta manera,
debe aparecer en pantalla el nombre de las personas
que lo elaboraron. Se deberá esperar a que se presione
un enter para continuar. Posteriormente debe
desplegarse en pantalla un mensaje que explique
brevemente el objetivo y reglas del juego, y se deberá
esperar nuevamente a que se presione un enter para
comenzar a jugar. El programa deberá validar que las
entradas de los jugadores sean válidas e introducidas
con un formato correcto. El jugador deberá especificar
la columna en la que desea tirar su ficha.
El programa deberá validar que esa columna exista, que
no esté llena, y si algún jugador ganó.
En cualquier momento se puede elegir, en vez de la
columna a tirar, la letra 'S'. Esto servirá para guardar
en un archivo de texto, la historia del juego. El nombre
del archivo se generará automáticamente y estará
formado por la fecha y la hora con el formato:
ddmmaa_hhmm.jgo

Para esto, se deberá haber llevado, en una lista
dinámica, la secuencia de tiros realizados, mismos que
serán guardados en el archivo.
El nombre del archivo deberá ser mostrado a los
jugadores para confirmar que quedó grabado y
enseñarles el nombre.
También se podrá introducir, en vez de una columna de
tiro, una 'T' de terminar, con lo que se deberá terminar
la ejecución del juego.

3. ./cuatro –r ddmmaa_hhmm.jgo : al ejecutarlo de esta
manera se deberá notificar a los jugadores que se
recuperará el juego con ese nombre, buscará el archivo,
en caso de no existir notificará y terminará la ejecución.
En caso de existir cargará la historia del archivo en una
lista dinámica y mostrará a los jugadores tirada por
tirada del juego guardado. Una vez que termine deberá
indicar de quien es turno y el juego podrá ser
reanudado entonces. Para mostrar cada jugada, el
jugador deberá presionar la letra 'p' (próxima) para ir
de jugada en jugada. En cualquiera de ellas se podrá
presionar la letra 'c'; esto significará que el juego será
continuado a partir de esa jugada, debiendo descartar el
resto de jugadas guardadas.

engel lex

CitarHola! oigan

es un foro, leemos no te escuchamos

Citara la hora de escribirlo y no se si si agarre porque no tengo donde ejecutarlo

muy malo, dificultosamente la gente puede programar sin probar algo a su nivel y que funcione

Citarno les pido que me den el codigo pero si que si me pueden orientar a como va a a ir el codigo

que llevas hecho? en que tienes tu duda? te digo algo de antemano, poca gente se va a detener a leer más que

Citar1- debe de ser un tablero de 10 x 10 casillas (ese es uno de mis principales prblemas no se como hacer el tablero)
2-o sea yo no voy a jugarlo si no que mi programa sera el arbitro

así que te recomiendo bajarte un compilador para probar, hacer el codigo y hacer preguntas puntuales cuando te de errores o no sepas como avanzar
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

palacio29

Para el tablero podes crear una matriz usando arreglos bidimensionales.
Pero como dijo el de arriba, te recomiendo pensarlo mucho y que empieces a hacerlo y consultar dudas puntuales o mostrar lo que tenes hecho.
1) Escribi toda la logica en un papel borrador
2) Escribi en un borrador como lo harias en lenguaje c
3) Empeza a programarlo usando algun compilador, yo uso el codeblocks.

gwennnnnn26

#3
Que malos son chicos luego luego se enojan pero ok los entiendo. bien estuve muy desesperada buscando referencias con otros codigos y metiendole y sacandole a lo que sengun yo entiendo a la hora de correnlo dice que todo esta cutre y que tiene errores a los cules no entiendo porque la mayoria estan en ingles, le he tratado de mover pero no queda. de todas maneras les paso mi codigo y diganme que opinan por favor

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
void main()
{
int getMatriz( int [10] filas, int [10] columnas);
int getArray(int [10]);
printTablero (int matriz, int [10] filas, int [10] columnas);
void IniciarContador (int *array, int n, int vi);
}
int main(int argc, char* argv) //*El parámetro argv contiene un puntero a cada uno de los argumentos (strings) de la línea de ordenes de la llamada al programa*//
//*El parámetro argc contiene el número de argumentos en la línea de ordenes de
la llamada al programa*//
{
  printf("¡¡¡Bienvenido a 4 en linea!!!\n");
}    
   
   do
{
       switch ()
       {
           case 1:
               filas=10;
               columnas=10;
               jug=2;
               break;
}
           default:
               printf("Valor no valido\n");
               scanf("%d", &opt);
               break;
       }
   }while (opt < 1 || opt > 2 || jug < 2 || jug > 4 );
   
   
   A=getMatriz(filas, columnas);
   contador=getArray(columnas);
   IniciarContador(contador, columnas, filas-1);
   
   printTablero(A, filas, columnas);
   
   juego(A, contador, filas, columnas, jug);
   
       
}

int **getMatriz( int filas, int columnas)
{
   int **var;
   int i;
   
   var=(int**) calloc (filas, sizeof(int*));
   for( i=0; i<filas; i++)
       var[i]=(int*) calloc (columnas, sizeof(int));
   return(var);
}

int *getArray(int n)
{
   return ((int*) (n, sizeof(int)));
}

{
   int i;
   for(i=0; i<n; i++)}

void printTablero(int **matriz, int filas, int columnas)
{
   int i, j;
   
   for (i=0; i<columnas; i++)
       printf("%4d", i);
   printf("\n ");
   
   for (i=0; i< filas; i++)
   {
       printf("|");
       for (j=0; j<columnas; j++)
       {
           switch (matriz[i][j])
           {
               caso 1://*Letra que le toca a cada jugador en este caso la letra X le toca al jugador 1*//
                   printf(" X ");
                   break;
               caso 2://*Letra que le toca a cada jugador en este caso la letra O le toca al jugador 2*//
                   printf(" O ");
                   break;  
}

void IniciarContador(int *array, int n, int vi)
{
   int i;
   for (i=0; i<n; i++)
       array[i]=vi;
   
}

int SumaArray (int *array, int n)
{
   int i, suma=0;
   for (i=0; i<n; i++)
       suma=suma+array[i];
   return(suma);
}

int CompFilas (int **A, int fila, int columnas, int turno)
{
   int i, i2, tmp, res=0;
   for (i=0; i< columnas-10; i++)
   {
       tmp=0;
       for (i2=i; i2<i+4; i2++)
           if (A[fila][i2]==turno)
               tmp++;
       if (tmp==4)
       res=turno;
   }
       return (res);
}

int CompCols (int **A, int filas, int columna, int turno)
{
   int i, i2, tmp, res=0;
   for (i=filas-1; i>3; i--)
   {
       tmp=0;
       for (i2=i; i2>i-4; i2--)
           if (A[i2][columna]==turno)
               tmp++;
       if (tmp==4)
           res=turno;
   }
       return (res);
}


int CompDiagPrim(int **A, int filas, int columnas, int turno)
{
   int i, j, n, tmp, res=0;
   for(i=filas-1; i>2; i--)
   {
       for(j=3; j<columnas; j++)
       {
           tmp=0;
           for(n=0; n<4; n++)
               if(A[i-n][j-n]==turno)
                   tmp++;
           if (tmp==4)
               res=turno;
           
       }
   }
   return(res);
}

int CompDiagSec(int **A, int filas, int columnas, int turno)
{
   int i, j, n, tmp, res=0;
   for(i=filas-1; i>2; i--)
   {
       for(j=0; j<columnas-3; j++)
       {
           tmp=0;
           for(n=0; n<4; n++)
               if(A[i-n][j+n]==turno)
                   tmp++;
           if (tmp==4)
               res=turno;
           
       }
   }
   return(res);
}
   

void juego(int **A, int *contador, int filas, int columnas, int jug)
{
   int , turno=1, sumacont, ganador=0;
   sumacont=SumaArray(contador, columnas);
   
   while(sumacont != -columnas && ganador == 0)
   {
    printf("Turno del jugador %d: \t", turno);
    scanf("%d", &);
    if <0 ||  >= columnas || contador[i] == -1)
    printf("Dato erróneo, por favor ingresa otro dato .\n");
    else
    {
        A[contador]=turno;
        ganador=CompFilas(A,contador,columnas,turno);  
        if (ganador==0)
            ganador=CompCols(A, filas, turno);
        if (ganador==0)
            ganador=CompDiagSec(A, filas, columnas, turno);
        if (ganador==0)
            ganador=CompDiagPrim(A, filas, columnas, turno);
        contador;
    }
   
    printTablero(A, filas, columnas);
    if (ganador!=0)
          printf("\n\n¡Gana el jugador %d!\n");
    if (turno==jug)
        turno=1;
    else
        turno++;
   
    sumacont=SumaArray(contador, columnas);
   }
}




Mod: Los códigos deben ir en etiquetas GeSHi

engel lex

Citary que tiene errores a los cules no entiendo porque la mayoria estan en ingles

no importa que estén en inglés y son importantes si quieres ayuda, a que dice... bueno, donde está el error y cual es... sin eso es dificil proceder...

por otro lado el codigo desde el primer vistazo es un desastre....

Código (cpp) [Seleccionar]
void main() //<- maint siempre debe ser int
{
int getMatriz( int [10] filas, int [10] columnas);//<- las funcinoes no se declaran en main, menos los prototipos
int getArray(int [10]); //<- mismo que arriba
printTablero (int matriz, int [10] filas, int [10] columnas); //<- todas las funciones deben tener tipo
void IniciarContador (int *array, int n, int vi);
}
//el codigo solo puede tener un main y si empiezas el comentario con // entonces el /* no se toma en cuenta
int main(int argc, char* argv) //*El parámetro argv contiene un puntero a cada uno de los argumentos (strings) de la línea de ordenes de la llamada al programa*//
//*El parámetro argc contiene el número de argumentos en la línea de ordenes de
la llamada al programa*//



y no veo más porque realmente no se que esperar de abajo (en las primeras 10 lineas 4 están mal)... recomiendo antes de irte de cabeza a hacer todo el programa mal en cada paso, hacer un tutorial basico de C y aprender lo esencial
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

jvm1994

#5
Veo en el código estructuras mal anidadas.

A tal punto de que logré ver algo así.


do{
        switch:
       {
       --
       --
       --
       }
       default:
       --
       --
     }



void printTablero(int **matriz, int filas, int columnas)
{
    int i, j;

    for (i=0; i<columnas; i++)
        printf("%4d", i);
    printf("\n ");

    for (i=0; i< filas; i++)
    {
        printf("|");
        for (j=0; j<columnas; j++)
        {
            switch (matriz[i][j])
            {
                caso 1://*Letra que le toca a cada jugador en este caso la letra X le toca al jugador 1*//
                    printf(" X ");
                    break;
                caso 2://*Letra que le toca a cada jugador en este caso la letra O le toca al jugador 2*//
                    printf(" O ");
                    break;   
}

Y ni hablemos de las tabulaciones, odio responder para hacer una crítica, es muy importante entender que un código se escribe una vez y se puede llegar a leer miles y miles de veces, por lo que si estas interesada en ser buena programadora, sería interesante que aprendas a respetar los standares de estilo que tiene C.

Es importante comentar, respetar tabulaciones y anidar correctamente.
"La posibilidad de crear tu mundo."

int main()
{
eMundo * Own = world_new();
if(Own != NULL)
{
    world_create(Own);
}

return 0;
}