Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: SirLancelot53 en 23 Enero 2014, 22:48 pm



Título: Juego de laberinto en c++
Publicado por: SirLancelot53 en 23 Enero 2014, 22:48 pm
Hola, tengo que hacer el juego de un laberinto en c++ usando una matriz en un archivo de texto, hasta ahora he podido cargar la matriz y delimitarla (es con caracteres especiales en donde " ? " son las barreras, 0 el inicio, @ la llegada, < el personaje  y - el camino), aun no he podido implementar las funciones que permiten que el personaje gire o se mueva hacia adelante.
Este es el código que llevo:
Código
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4.  
  5. char nombre_archivo (char a[200])
  6. {
  7.    cout <<"Digite el nombre del archivo" << endl;
  8.    cin.getline(a,200);
  9.    return a[200];
  10. }
  11.  
  12. void ver_mundo (char** M, int f, int c)
  13. {
  14.    M[0][0]='>';
  15.    cout<<M[f][c]<<" ";
  16. }
  17.  
  18. void crear_mundo (char**M, int f, int c, istream& a, int i, int j)
  19. {
  20.    for (i=0; i<f+3 ; i++)
  21.    {
  22.      cout<<"?" << " ";
  23.    }
  24.    cout << endl;
  25.   for (i = 0; i < f; i++)
  26.   {
  27.       cout<<"?" << " ";
  28.       for (j = 0; j < c; j++)
  29.       {
  30.            a>>M[i][j];
  31.           ver_mundo(M, i, j);
  32.       }
  33.       cout << "?" << endl;
  34.   }
  35.   for (i=0; i<f+3 ; i++)
  36.    {
  37.      cout<<"?" << " ";
  38.    }
  39.   delete [] M;
  40. }
  41.  
  42. int main()
  43. {
  44.    int i,j,f,c;
  45.    char archivo[200];
  46.    nombre_archivo(archivo);
  47.    ifstream a(archivo);
  48.    a>>f;
  49.    a>>c;
  50.    char **M = new char* [f];
  51.    for (i = 0; i < f; i++)
  52.    {
  53.        M[i] = new char[c];
  54.    }
  55.    crear_mundo (M, f, c, a, i, j);
  56.    return 0;
  57. }
¿Como podria implementar las funciones mencionadas? Agradezco sus sugerencias y su ayuda.


Título: Re: Juego de laberinto en c++
Publicado por: eferion en 30 Enero 2014, 13:28 pm
estás usando C++... no te has planteado la posibilidad de crear un ecosistema de objetos que te facilite el trabajo??

No se, quizás una clase "Laberinto" que almacene la información relativa al laberinto, una clase "Jugador" que represente al insensato que pretenda salir del laberinto...

Además estaría bien usar la clase string para manejar las cadenas de texto y cosas asi.

Otras consideraciones:

* una función de más de 4 argumentos debería ser evitada.
* una función que recibe un argumento de nombre "a" no dice, con perdón, una *****, usa nombres que identifiquen la función de la variable. Es más productivo y además gratis.
* no se si eres consciente de que la función "crear_mundo" elimina el laberinto.
* C++ permite usar contenedores que gestionan bastante bien la memoria... lo mismo te interesa usarlos para almacenar cosas como la matriz del laberinto.

Y luego, en cuanto a cómo moverte... pues no se, necesitas un sistema de coordenadas ( X,Y por ejemplo ) que localice la posición del jugador. Incrementando o decrementando dichos valores consigues que el jugador se mueva... no te olvides de chequear los movimientos para evitar que el jugador atraviese paredes!!!


Título: Re: Juego de laberinto en c++
Publicado por: vangodp en 30 Enero 2014, 13:44 pm
Echa un ojo aqui que te puede dar unas ideas  :rolleyes:
Y prueba hacer con clases como dice eferion:

http://foro.elhacker.net/programacion_cc/ayuda_con_programa_urgente-t404470.0.html (http://foro.elhacker.net/programacion_cc/ayuda_con_programa_urgente-t404470.0.html)


Título: Re: Juego de laberinto en c++
Publicado por: NikNitro! en 30 Enero 2014, 14:47 pm
Recuerda que un juego suele ser un bucle infinito en el cual al principio checkeas si se ha pulsado algo y cuando ocurre, usas el condicional adecuado. Al menos es lo que yo haría en el main.

Como nota decirte que si quisieras algún método para averiguar una posible salida, podrías usar un algoritmo de Backtrack (Vuelta atrás) o, si quisieras todas las posibles, con ramificación y poda. Esto te puede servir para crear un programa que haga laberintos con una única salida o a dar una opción de "ayuda" en la cual vea todos los caminos posibles y vea la siguiente casilla de la que estás que tiene más correspondencias con ellos.

Salud ;)


Título: Re: Juego de laberinto en c++
Publicado por: vangodp en 30 Enero 2014, 15:10 pm
Citar
ramificación y poda
¿¿Puedes dar un ejemplo??Muy interesante el tema.  :huh:
¿Alguna lectura recomendada?

;D


Título: Re: Juego de laberinto en c++
Publicado por: eferion en 30 Enero 2014, 15:33 pm
¿¿Puedes dar un ejemplo??Muy interesante el tema.  :huh:
¿Alguna lectura recomendada?

;D

Deberías empezar por mirar algo de teoría de grafos... así te va a resultar más sencillo comprender e implementar este tipo de algoritmos.

En cuanto a bibliografía... busca en google, aunque ya te digo yo que los mejores portales son los de habla inglesa.


Título: Re: Juego de laberinto en c++
Publicado por: NikNitro! en 30 Enero 2014, 23:11 pm
A mi el libro en español que más me ha gustado ha sido "Fundamentos de Algoritmia" de Bassard. Te lo recomiendo ;)