Java - Ayuda con laberinto sencillo en Java

 
Vista:

Ayuda con laberinto sencillo en Java

Publicado por Meneth (1 intervención) el 22/02/2020 13:13:49
Hola, me gustaría saber si alguien puede ayudarme con esto.
Tengo que hacer un ejercicio que consiste en un laberinto sencillo basado en la vecindad de las matrices.
He conseguido que el "personaje" (que consiste en el caracter ©) resuelva el laberinto, pero no consigo hacer que no avance cuando haya una pared por medio.
Dejo aquí el laberinto, y el movimiento que hace por ejemplo al moverse hacia arriba:

La matriz del laberinto:

1
2
3
4
5
6
7
char[][] laberinto={
    {'|','-','-','-','-','-','-'},
    {'|',' ','|',' ',' ',' ','|'},
    {'|','©','|',' ','|',' ','|'},
    {'|',' ',' ',' ','|',' ',' '},
    {'|','-','-','-','-','-','-'},
};

El método que guarda la posicion del jugador:

[url]public int[] posJugador(char[][] laberinto, int[] posicion_jugador){

for(int i=0;i<laberinto.length;i++){
for(int j=0;j<laberinto[0].length;j++){
if(laberinto[i][j]=='©'){
posicion_jugador[0]=i;
posicion_jugador[1]=j;
}
}
}
return posicion_jugador;
}[/url]


Y el método que hace que el jugador se mueva hacia arriba:

1
2
3
4
5
6
7
8
9
10
11
12
13
public int[] moverArriba(char[][] laberinto,int[] posicion_jugador){
 
    for(int i=0;i<laberinto.length;i++){
        for(int j=0;j<laberinto[0].length;j++){
            if(i==posicion_jugador[0] && j==posicion_jugador[1] && laberinto[i][j]=='©'){
                laberinto[i][j]=' ';
                laberinto[i-1][j]='©';
                }
            }
        }
 
   return posicion_jugador;
}

El problema es que cuando encuentra una pared en cualquier dirección, el jugador sigue avanzando hasta que llega al límite de la matriz y da un error en el el programa, no sé como arreglar eso y que el jugador se quede en su sitio en lugar de seguir avanzando.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con laberinto sencillo en Java

Publicado por Rodrigo (623 intervenciones) el 22/02/2020 16:08:31
Si moverArriba ya recibe la posicion, no.es necesario recorrer la matriz para comprobar que en esa posicion esta el caracter del jugador.
Para mover arriba basta hacer 2 comprobaciones:
- que no has llegado al limite aun
- que arriba del jugador no hay una pared

Ademas, si piensas retornar la posicion del jugador, hay que actualizarla.

1
2
3
4
5
6
7
8
9
10
public int[] moverArriba(char[][] laberinto,int[] posicion_jugador){
  int i = posicion_jugador[0];
  int j = posicion_jugador[1];
  if( i > 0 && laberinto[ i - 1 ][ j ] == ' ' ) {
      // modificar laberinto[i-1][j] y laberinto[i][j]
      // modificar posicion[0]
  }
 
  return posicion
}

En la funcion que descubre donde esta el jugador, podrias salir de la funcion inmediatamente despues de encontrarlo, en vez de seguir iterando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con laberinto sencillo en Java

Publicado por juanma (2 intervenciones) el 21/02/2022 13:23:45
Podrias pasarme el codigo de ese projecto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Ayuda con laberinto sencillo en Java

Publicado por Juanma (2 intervenciones) el 25/02/2022 01:14:53
Te puedo pedir el codigo de este projecto de laberinto? me seria de mucha ayuda
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar