elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Curso de javascript por TickTack


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: AYUDA Función Recursiva en: 20 Diciembre 2013, 02:13 am
¿ Esta ese mismo algoritmo en C ? Como debería adaptarlo? No puedo usar clases en esta ocasión..
2  Programación / Programación C/C++ / Re: Ayuda con laberinto en una matriz en: 20 Diciembre 2013, 02:08 am
Sí, la variable Tecla recibe el movimiento que indicas por teclado CON LOS CURSORES.

Ya esta la condición de que no pase a la casilla con valor c
mediante el if por ejemplo de:
Código:
        case 80: // Movimiento hacia abajo
            if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
                ( *Filas )++;
                ( *Puntos ) ++;
                Posicion[F - 1][*Columnas];
            }
            break;
3  Programación / Programación C/C++ / Re: Ayuda con laberinto en una matriz en: 20 Diciembre 2013, 01:56 am
NO estoy seguro pero esto quizás te sirva...
Código:

#define JUGADOR 2
#define N 4
// donde pone N será el valor de las filas y columnas de la matriz

// Mueve el jugador en la matriz
void Mover_Jugador( char Matriz[N][N], char Tecla, int *Filas, int *Columnas ){

    int F, C, Posicion[N][N];

    for( int i = 0; i < N; i++ )
        for( int j = 0; j < N; j++ )
            Posicion[i][j] = Matriz[i][j];

    F = *Filas;
    C = *Columnas;

    switch( Tecla ){

        case 72: // Movimiento hacia arriba
            if( *Filas > 0 && Matriz[*Filas - 1][*Columnas] != 'c' ){
                ( *Filas )--;
                ( *Puntos ) ++;
                Posicion[F + 1][*Columnas];
            }
            break;

        case 80: // Movimiento hacia abajo
            if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != 'c' ){
                ( *Filas )++;
                ( *Puntos ) ++;
                Posicion[F - 1][*Columnas];
            }
            break;

        case 75: // Movimiento hacia la derecha
            if( *Columnas > 0 && Matriz[*Filas][*Columnas - 1] != 'c' ){
                ( *Columnas )--;
                ( *Puntos ) ++;
                Posicion[F][C + 1];
            }
            break;

        case 77: // Movimiento hacia la izquierda
            if( *Columnas < N - 1 && Matriz[*Filas][*Columnas + 1] != 'c' ){
                ( *Columnas )++;
                ( *Puntos ) ++;
                Posicion[F][C - 1];
            }
            break;

        }

        Matriz[*Filas][*Columnas] = JUGADOR; // JUGADOR se mueve de posicion

}

int main( ){

    int Matriz[N][N];  // Tu matriz
    int Tecla; // Tecla que introduces por pantalla

do{

        Tecla = getch( );

        if( Tecla == -32 || Tecla == 0 ) // Mueve el jugador
            Tecla = getch( );

        Mover_Jugador( Matriz, Tecla, &Filas, &Columnas );

    }while(  AQUÍ TU CONDICIÓN PARA EL FINAL DEL BUCLE );
}
4  Programación / Programación C/C++ / Re: Función Recursiva en: 19 Diciembre 2013, 20:54 pm
Da igual el tiempo mientras se resuelva el problema... la putada es que yo y la recursividad no nos entendemos... ¿Alguna sugerencia?
5  Programación / Programación C/C++ / AYUDA Función Recursiva en: 19 Diciembre 2013, 01:21 am
Hola! Bueno, me temo que no tengo más remedio que pedir ayuda en un problema.
Me han pedido que haga una función que resuelva el juego con el máximo de puntos.
Se trata de una versión del juego "snake", la única diferencia es que por donde ha pasado el jugador, no podemos volver a pasar, Adjunto el código.

La función trata de añadir una opción al menú del juego (pulsando ‘r’, por ejemplo) para resolver el panel, esto es, que el programa calcule, dada la situación actual, la secuencia de movimientos del gusano que termine el juego con el
mayor número de puntos posible. :huh: :huh: :huh:


Código:
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <time.h>

#define N 10
#define GALLETA '.'
#define JUGADOR 2
#define OBSTACULO '*'
#define OCUPADO '-'

// Solicita el nivel de dificultad de juego
int Solicitar_Dificultad( ){

    int Dificultad;

    system("cls");

    do{
        printf("Introducir nivel (1-3): ");
        scanf("%d", &Dificultad);
        getchar( );
    }while( Dificultad < 1 || Dificultad > 3 );

    return Dificultad;
}

// Rellena la matriz y posiciona los obstaculos y al jugador
void Inicializar_Juego( char Matriz[N][N], int *Filas, int *Columnas, int *Puntos, int Dificultad ){

    int Obstaculos, i, j;

    *Puntos = 0;
    Obstaculos = Dificultad * N;

    // Se rellen la Matriz con galletas
    for( i = 0; i < N; i++ )
        for( j = 0; j < N; j++ )
            Matriz[i][j] = GALLETA;

    // Se introducen obstaculos
    while( Obstaculos > 0 ){
        i = rand() % N;
        j = rand() % N;
        if( Matriz[i][j] == GALLETA ){
            Matriz[i][j] = OBSTACULO;
            Obstaculos --;
        }
    }

    // Busca una posicion aleatoria para el jugador
    do{
        i = rand() % N;
        j = rand() % N;
    }while( Matriz[i][j] != GALLETA );

    Matriz[i][j] = JUGADOR;
    *Filas = i;
    *Columnas = j;
}

// Esta funcion se encarga de imprimir la matriz
void Imprimir( char Matriz[N][N], int *Puntos ){

    system("cls");

    for( int i = 0; i < N; i++ ){
        for( int j = 0; j < N; j++ )
            printf("%2c", Matriz[i][j]);
        printf("\n");
    }

    printf("\n\nPuntuacion actual: %d\n\nCONTROLES:\n  - Cursores para mover al jugador\ni - Iniciar de nuevo el panel\ns - Salir del programa", *Puntos);
}

// Devuelve 1 si el juego finaliza
int Comprobar_Fin( char Matriz[N][N], int *Filas, int *Columnas ){

    int Fin = 1;

    for( int i = 0; i < N; i++)
        for( int j = 0; j < N; j++)
            if( Matriz[i][j] == JUGADOR )
                Fin = 0;

    // Si se atrapa con 4 obstaculos
    if( ( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
        ( Matriz[(*Filas)][(*Columnas) + 1] != GALLETA ) && ( Matriz[(*Filas)][(*Columnas) - 1] != GALLETA ) ){
        Fin = 1;

    }else{

        // Si se atrapa con la pared de la izquierda
        if( *Columnas == 0 &&
            ( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
            ( Matriz[(*Filas)][(*Columnas) + 1] != GALLETA ) ){
            Fin = 1;

        }else{

            // Si se atrapa con la pared de la derecha
            if( *Columnas == N - 1 &&
                ( Matriz[(*Filas) + 1][*Columnas] != GALLETA ) && ( Matriz[(*Filas) - 1][*Columnas] != GALLETA ) &&
                ( Matriz[(*Filas)][(*Columnas) - 1] != GALLETA ) ){
                Fin = 1;

            }
        }
    }

    return Fin;
}

// Mueve el jugador en la matriz
void Mover_Jugador( char Matriz[N][N], char Tecla, int *Filas, int *Columnas, int *Puntos ){

    int F, C, Posicion[N][N];

    for( int i = 0; i < N; i++ )
        for( int j = 0; j < N; j++ )
            Posicion[i][j] = Matriz[i][j];

    F = *Filas;
    C = *Columnas;

    switch( Tecla ){

        case 72: // Movimiento hacia arriba
            if( *Filas > 0 && Matriz[*Filas - 1][*Columnas] != OBSTACULO ){
                ( *Filas )--;
                ( *Puntos ) ++;
                Posicion[F + 1][*Columnas];
            }
            break;

        case 80: // Movimiento hacia abajo
            if( *Filas < N - 1 && Matriz[*Filas + 1][*Columnas] != OBSTACULO ){
                ( *Filas )++;
                ( *Puntos ) ++;
                Posicion[F - 1][*Columnas];
            }
            break;

        case 75: // Movimiento hacia la derecha
            if( *Columnas > 0 && Matriz[*Filas][*Columnas - 1] != OBSTACULO ){
                ( *Columnas )--;
                ( *Puntos ) ++;
                Posicion[F][C + 1];
            }
            break;

        case 77: // Movimiento hacia la izquierda
            if( *Columnas < N - 1 && Matriz[*Filas][*Columnas + 1] != OBSTACULO ){
                ( *Columnas )++;
                ( *Puntos ) ++;
                Posicion[F][C - 1];
            }
            break;

        }

    // donde antes estaba el jugador ahora esta ocupado
    if( Matriz[F][C] != Posicion[*Filas][*Columnas] )
        Matriz[F][C] = OCUPADO;

    if( Matriz[*Filas][*Columnas] == OCUPADO )
            Matriz[*Filas][*Columnas] = 'X'; // JUGADOR se come a si mismo
    else
        Matriz[*Filas][*Columnas] = JUGADOR; // JUGADOR se mueve de posicion

}

// Inicializa el juego llamando a las anteriores funciones
void Ejecutar_Juego( ){

    char Matriz[N][N], Tecla;
    int Filas, Columnas, Puntos, Nivel;

    srand( time(NULL) );

    Nivel = Solicitar_Dificultad( );
    Inicializar_Juego( Matriz, &Filas, &Columnas, &Puntos, Nivel );
    Imprimir( Matriz, &Puntos );

    do{

        Tecla = getch( );

        if( Tecla == -32 || Tecla == 0 ) // Mueve el jugador
            Tecla = getch( );
        else
            if( Tecla >= 'a' && Tecla <= 'z' ) // Convierte el caracter Tecla a mayuscula
                Tecla -= 32;

        if( Tecla == 'I' )
            Inicializar_Juego( Matriz, &Filas, &Columnas, &Puntos, Nivel );

        Mover_Jugador( Matriz, Tecla, &Filas, &Columnas, &Puntos );
        Imprimir( Matriz, &Puntos );

    }while( Comprobar_Fin( Matriz, &Filas, &Columnas ) == 0 && Tecla != 'S' );

    printf("\n\nTermina el juego con %d puntos\n\n", Puntos);
    system("pause");

}

// Funcion principal
int main( ){

    Ejecutar_Juego( );

    return 0;
}


Gracias por las molestias.
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines