Autor Tema: Juego 2048 en C, algoritmo para que pierda (lenguajeC)  (Leído 4244 veces)

DAMICAL

  • Sin experiencia
  • *
  • Mensajes: 1
    • Ver Perfil
Juego 2048 en C, algoritmo para que pierda (lenguajeC)
« en: 06 de Junio 2016, 21:24 »
tengo el codigo completo en C, del juego 2048, no logro hacer que pierda, es decir, que termine cuando no queden mas movimientos ni celdas vacias!! Necesito ayuda, alguna sugerencia, algo! He estado horas con esto y no logro que me quede, gracias!!!1

Código

 
Código: [Seleccionar]
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #define N 4
     
     
    void imp_tablero ();
    void random_m ();
    //Funciones Movimientos
    void MOV_ARRIBA1 ();
    void MOV_ABAJO1 ();
    void MOV_IZQ1 ();
    void MOV_DER1 ();
    void MOV_ARRIBA2 ();
    void MOV_ABAJO2();
    void MOV_DER2();
    void MOV_IZQ2();
    void lugares_ARRIBA();
    void inicio_juego(); // Imprime tablero, muestra puntaje e indica movimiento.
    void movimiento(); // Generar movimiento
    void opciones(); //Pregunta al usuario si quiere continuar jugando.
    void verificar_mov();
    void perder();
    int tablero[N][N] = {0};
    int aux, aux1=1,aux2=0,aux3=0,aux4=0,aux5=0;
    int a,b,ab,mov,no_mov1=0, no_mov2=0,no_mov3=0,no_mov4=0,no_mov5=0,no_mov6=0,no_mov7=0,no_mov8=0;
    int b1=0, juego=0;
     int cambio_num=0;
    int M=N-2, puntaje;
    char decision;
            int main()
            {
    printf ("--------------------------------------------------\n");;
    printf ("**2222222222**0000000000**444****444**8888888888**\n");;
    printf ("**2222222222**0000000000**444****444**8888888888**\n");;
    printf ("*********222**000****000**444****444**888****888**\n");;
    printf ("**2222222222**000****000**4444444444**8888888888**\n");;
    printf ("**2222222222**000****000**4444444444**8888888888**\n");;
    printf ("**222*********000****000*********444**888****888**\n");;
    printf ("**2222222222**0000000000*********444**8888888888**\n");;
    printf ("**2222222222**0000000000*********444**8888888888**\n");;
    printf ("--------------------------------------------------\n\n\n");;
     
     
     
                time_t t;
                srand((unsigned) time(&t));
    for(a=0;a<3;a++)
                {
                    random_m();
                }
    while (juego==0){
                inicio_juego();
        imp_tablero();
    movimiento();
    }
    opciones ();
     
        return 0;
     
            }
    void imp_tablero()
    {
        int a,b,c=0,i,j;
    char borde = '|', piso= '_';
    printf("\n");
    for(a=0;a<N;a++)
        {
            for(b=0;b<N;b++)
            {
     
                printf("%c\t%d\t%c",borde, tablero[a][b], borde);
            }
    printf ("\n");
    aux1=1;
        }
     
    //Indica movimiento realizado.
    if (mov==1)
    printf("\nMovimiento hacia arriba\n");
    if (mov==2)
    printf ("\nMovimiento hacia abajo\n");
    if (mov==3)
    printf ("\nMovimiento hacia la izquierda\n");
    if (mov==4)
    printf ("\nMovimiento hacia la derecha\n");
     
     
    for (i=0; i<N; i++){
    for (j=0; j<N; j++){
    puntaje= tablero[i][j]+c;
    c=puntaje;
    if (tablero[i][j]==2048){
    printf ("\nFELICITACIONES, HAS GANADO EL JUEGO!\n");
    juego=1;}
     
    }
    }
     
    printf("\nPUNTAJE: %d\n", puntaje);
    }
    void random_m()
    {
     int h,g;
    do  {
        b1=0;
        h= rand()% N;
        g= rand()% N;
        if(tablero[g][h]==0){    // Alternar para que aparezca '2' y '4'
    if (cambio_num==0)
            {
    tablero[g][h] = 2;
    cambio_num=1;
    b1 = 1;
    }
    else {
    tablero[g][h] = 4;
    cambio_num=0;
    b1 = 1;
    }
    }
     } while (b1==0);
    }
    void MOV_ARRIBA1()
        {
            do{
                    ab=0;
                    for(a=1;a<N;a++)
                        {
                        for(b=0;b<N;b++)
                        {
                            if(tablero[a-1][b]==0&&tablero[a][b]!=0)
                            {
                                tablero[a-1][b]=tablero[a][b];
                                tablero[a][b]=0;
                                ab=1;
    aux2=0;
    aux4=0;
     
    }
    else {aux2++;
    if (aux2==12){
    no_mov3=1;
    b1=1;
     
    }
    else aux2=0;
     
     
    }
    }
                    }
     
                }while (ab==1);
    mov=1;
     
     
        }
        void MOV_ABAJO1()
        {
            do{
                ab=0;
                for(a=M;a>=0;a--)
                {
                    for(b=0;b<N;b++)
                    {
                        if(tablero[a+1][b]==0&&tablero[a][b]!=0)
                        {
                            tablero[a+1][b]=tablero[a][b];
                            tablero[a][b]=0;
                            ab=1;
    aux2=0;
                        }
     
    else {
    aux2++;
    if (aux2==2){
    no_mov5=1;
    b1=1;
    }
    else aux2=0;
    }
    }
                    }
                }while(ab==1);
    mov=2;
        }
        void MOV_IZQ1()
        {
            do
            {
                ab=0;
                for (a=0;a<N;a++)
                {
                    for (b=1;b<N;b++)
                    {
                        if(tablero[a][b-1]==0&&tablero[a][b]!=0)
                        {
                            tablero[a][b-1]=tablero[a][b];
                            tablero[a][b]=0;
                            ab=1;
    aux2=0;
                        }
    else {aux2++;
    if (aux2==2){
    no_mov7=1;
    b1=1;
    }
    else aux2=0;
    }
                    }
                }
            }while (ab==1);
    mov=3;
        }
        void MOV_DER1()
            {
                do{
                    ab=0;
                     for (a=0;a<N;a++)
                    {
                        for (b=M;b>=0;b--)
                        {
     
                        if(tablero[a][b+1]==0&&tablero[a][b]!=0)
                        {
                            tablero[a][b+1]=tablero[a][b];
                            tablero[a][b]=0;
                            ab=1;
    aux2=0;
                        }
    else {aux2++;
    if (aux2==2){
    no_mov1=1;
    b1=1;
    }
    else aux2=0;
    }
                    }
                }
            }while (ab==1);
    mov=4;
        }
    void MOV_ARRIBA2()
            {
            for (a=1;a<N;a++)
                    {
                        for (b=0;b<N;b++)
                        {
                            if (tablero[a-1][b]==tablero[a][b])
                            {
                                tablero[a-1][b]+=tablero[a][b];
    tablero[a][b]=0;
    no_mov4=0;
    aux3=0;
    }
    else {
    aux3++;
    if (aux3==12)
    no_mov4=1;
                        }
    }           
    }
        }
            void MOV_ABAJO2()
            {
     
            for (a=M;a>=0;a--)
                    {
                        for (b=0;b<N;b++)
                        {
                            if (tablero[a+1][b]==tablero[a][b])
                            {
                                tablero[a+1][b]+=tablero[a][b];
                                tablero[a][b]=0;
    aux3=0;
    }
    else {
    aux3=1;
    no_mov6=1;
                        }
                    }
            }
    }
           void MOV_DER2 ()
            {
     
                for (a=0;a<N;a++)
                    {
                        for (b=M;b>=0;b--)
                        {
                        if(tablero[a][b+1]==tablero[a][b])
                        {
                            tablero[a][b+1]+=tablero[a][b];
                            tablero[a][b]=0;
    aux3=0;
                        }
    else {
    aux3=1;
    no_mov2=1;
    }
     
                    }
                }
            }
            void MOV_IZQ2()
            {
     
                for(a=0;a<N;a++)
                {
                    for(b=1;b<N;b++)
                    {
                        if(tablero[a][b-1]==tablero[a][b])
                        {
                            tablero[a][b-1]+=tablero[a][b];
                            tablero[a][b]=0;
    aux3=0;
    }
    else {
    aux3=1;
    no_mov8=1;
    }
                }
            }
    }
     
            void inicio_juego()
            {
                printf("Utilice:\nW para arriba\nS para abajo\nD para derecha \nA para izquierda \n\n\n\n");
                printf ("TABLERO DE JUEGO\n\n\n");;
            }
            void movimiento()
            {
     
                int i,h,g,a;
                int band=0;
    char t1;
                time_t t;
     
                do
                {
     
    printf ("\n     ^\n");
    printf ("     W\n");
        printf (" <A     D>\n");
    printf ("     S    \n");
    printf ("\n     v\n\n");
     
     
    printf ("----> ");
     
     
                char aux[1];
    scanf ("%s", &aux);
    printf ("\n\n");
    t1=aux[0];
     
     
     
                    switch(t1)
                    {
                    case 'w': case 'W':
     
    MOV_ARRIBA1 ();
                        MOV_ARRIBA2();
                        MOV_ARRIBA1 ();
    random_m();
     
     
    break;
     
                    case 's': case 'S':
                        MOV_ABAJO1();
                        MOV_ABAJO2();
                        MOV_ABAJO1();
    random_m();
     
                        break;
     
                    case 'a': case 'A':
                        MOV_IZQ1();
                        MOV_IZQ2();
                        MOV_IZQ1();
    random_m();
     
                        break;
     
                    case 'd': case 'D':
                        MOV_DER1;
                        MOV_DER2();
                        MOV_DER1();
    random_m();
     
     
                        break;
     
                    default:
                        {
                         printf("\n\n\n\tTECLA ERRONEA\n\n");
     
                            break;
                        }
                    }
     
    imp_tablero();
     
     
    }
     
     
            while(aux1==1);
     
    verificar_mov();
        printf("TERMINO EL JUEGO");
     
    }
    void opciones()
    {
    char decision;
     
    printf("Desea seguir jugando?\nS = Si\nN = No\n-------> ");
    scanf ("%c", &decision);
    if (decision=='s'||decision=='S')
    juego=0;
    else
    printf ("GRACIAS POR JUGAR! HASTA LA PRÓXIMA..");
    }
     
     
    void verificar_mov()
    {
    if (no_mov1==1&&no_mov2==1){
    printf ("\nNO PUEDE MOVERSE A LA DERECHA\n");
    aux2=0;
    aux3=0;
    aux4=0;
    no_mov1=0;
    no_mov2=0;
    b1=0;
    }
     
    if (no_mov3==1&&no_mov4==1){
    printf ("\nNO PUEDE MOVERSE HACIA ARRIBA\n");
    aux2=0;
    aux3=0;
    aux4=0;
    no_mov3=0;
    no_mov4=0;
    b1=0;
    }
    if (no_mov5==1&&no_mov6==1){
    printf ("\nNO PUEDE MOVERSE HACIA ABAJO\n");
    aux2=0;
    aux3=0;
    no_mov5=0;
    no_mov6=0;
    b1=0;
    }
    if (no_mov7==1&&no_mov8==1){
    printf ("\nNO PUEDE MOVERSE A LA IZQUIERDA\n");
    aux2=0;
    aux3=0;
    no_mov7=0;
    no_mov8=0;
    b1=0;
    }
    }
     
     
     
« Última modificación: 06 de Junio 2016, 21:51 por Alex Rodríguez »

César Krall

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2078
  • No vales por lo que dices, sino por lo que haces
    • Ver Perfil
    • aprenderaprogramar.com
Re:Juego 2048 en C, algoritmo para que pierda (lenguajeC)
« Respuesta #1 en: 15 de Junio 2016, 22:19 »
Hola! ¿Puedes explicar en qué consiste el juego? Hablas de movimientos y de que todas las celdas estén vacías ¿no puedes llamar a una función que compruebe en cada movimiento si se alcanza el estado de "todas las celdas están vacías"?
Responsable de departamento de producción aprenderaprogramar.com

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".