|
Indice | Temas Recientes | Quién Está en LÃnea | Lista de Usuarios | Mi Perfil | Búsqueda | Ayuda |
![]() |
mvnForum » Listar todos los foros » Foro: Curso PLJ » Tema: Problemas con el laberinto |
Total de mensajes en este tema: 3 |
[Eliminar este Tema]
[Mover este Tema] [AÅadir a Mis Favoritos] [AÅadir un aviso a este tema] [Publicar nuevo tema] |
Autor |
|
![]() Extranjero
|
Buenas, aun estoy liado con el laberinto y ya creo que le he dedicamos muchas horas a este programa, pero es que esto de leer o coger la lógica de un prog. hecho por otro es mas dificil de lo que me pensaba, bueno os explico mi problema, ya en la clase vista he añadido al robot y la clase vista me enseña el robot '-', pero ahora me voy a mover al robot y lo hago de la siguiente manera: package modulo1.sesion5; public class Controlador { EstadoJuego estado; public Controlador(EstadoJuego estado) { this.estado = estado; } public void pasoEjecucion(int comando) { Jugador jugador, enemigo; Laberinto lab; Posicion posJugador, posEnemigo, posAux; if (comando == JuegoLaberinto.SALIR) { estado.finJuego = true; estado.ganador = false; return; } jugador = estado.jugador; lab = estado.laberinto; enemigo = estado.enemigo; // Añadido por mi // realizo el movimiento del jugador posJugador = jugador.getPos(); posAux =new Posicion(posJugador.fila, posJugador.columna); posAux.mueve(comando); if (!lab.ocupado(posAux)) { posJugador.mueve(comando); // MOVIMIENTO DEL ROBOT // Obtenemos pos. actual del robot. posEnemigo = enemigo.getPos(); Posicion posAuxRobot = new Posicion (posEnemigo.fila,posJugador.columna); if (lab.ocupadoDireccion (posAuxRobot.fila,posAuxRobot.columna,JuegoLaberinto.ARRIBA)) comando = JuegoLaberinto.ARRIBA; else if (lab.ocupadoDireccion(posAuxRobot.fila,posAuxRobot.columna,JuegoLaberinto.ABAJO)) comando = JuegoLaberinto.ABAJO; else if (lab.ocupadoDireccion(posAuxRobot.fila,posAuxRobot.columna,JuegoLaberinto.DERECHA)) comando = JuegoLaberinto.DERECHA; else if (lab.ocupadoDireccion(posAuxRobot.fila,posAuxRobot.columna, JuegoLaberinto.IZQUIERDA)) comando = JuegoLaberinto.IZQUIERDA; posAuxRobot.mueve(comando); } // El jugador ha salido del laberinto if (posJugador.columna == 0 || posJugador.columna == lab.getColumnas() - 1 || posJugador.fila == 0 || posJugador.fila == lab.getFilas() - 1) { estado.finJuego = true; estado.ganador = true; estado.perdedor = false; } } public boolean finJuego() { return estado.finJuego; } } Que lo que hago es, despues de que mueva el jugador, cojo la posición del robot, y compruebo si las posiciones de arriba, abajo, derecha e izq. estan libres y cuando una de esas posiciones esten libres pues llamo al método mueve para mover al robot, pero siempre me lo dibuja en el mismo sitio, por favor necesito una orientación para haber si me quito de encima ya el laberinto ya que todos los dias le pego un repaso y no doy con el. gracias. |
||
|
![]() Miembro
|
Bueno, te comento un par de cosas que, a bote pronto, veo que están mal en el código. En primer lugar, dices que compruebas si la celdilla está libre, pero el código que escribes es: if (lab.ocupadoDireccion (posAuxRobot.fila,posAuxRobot.columna,JuegoLaberinto.ARRIBA)) comando = JuegoLaberinto.ARRIBA; parece que haces al revés y que escoges el comando ARRIBA cuando la celdilla está ocupada. En segundo lugar, para mover el robot haces posAuxRobot.mueve(comando); y eso no es correcto, ya que posAuxRobot no es el objeto que contiene el robot. El objeto que debes mover es posEnemigo. Espero que ahora ya no te cueste terminarlo. Un saludo, Domingo. |
||
|
![]() Extranjero
|
Bueno ya llevo casi cuatro horas esta tarde, haciendo mil y una pruebas y el robot me aperece y se mueve pero aleatoriamente desaparece ocupando zonas que no tiene que ocupar, es como si el metodo ocupado de la clase laberinto no me estuviera devolviendo bien el valor, package modulo1.sesion5; public class Controlador { EstadoJuego estado; public Controlador(EstadoJuego estado) { this.estado = estado; } public void pasoEjecucion(int comando) { Jugador jugador, enemigo; Laberinto lab; Posicion posJugador, posEnemigo, posAux; if (comando == JuegoLaberinto.SALIR) { estado.finJuego = true; estado.ganador = false; return; } jugador = estado.jugador; lab = estado.laberinto; enemigo = estado.enemigo; // Añadido por mi // realizo el movimiento del jugador posJugador = jugador.getPos(); posAux = new Posicion(posJugador.fila, posJugador.columna); posAux.mueve(comando); if (!lab.ocupado(posAux)) posJugador.mueve(comando); // Realizamos el mov. del robot posEnemigo = enemigo.getPos(); // Obtenemos pos. actual del robot. Posicion posAuxRobot = new Posicion(posEnemigo.fila, posJugador.columna); if (!lab.ocupado(posAuxRobot.fila+1, posAuxRobot.columna)) comando = JuegoLaberinto.ABAJO; else if (!lab.ocupado(posAuxRobot.fila-1, posAuxRobot.columna)) comando = JuegoLaberinto.ARRIBA; else if (!lab.ocupado(posAuxRobot.fila, posAuxRobot.columna+1)) comando = JuegoLaberinto.DERECHA; else if (!lab.ocupado(posAuxRobot.fila, posAuxRobot.columna-1)) comando = JuegoLaberinto.IZQUIERDA; if (!lab.ocupado(posAuxRobot)) posEnemigo.mueve(comando); // El jugador ha salido del laberinto if (posJugador.columna == 0 || posJugador.columna == lab.getColumnas() - 1 || posJugador.fila == 0 || posJugador.fila == lab.getFilas() - 1) { estado.finJuego = true; estado.ganador = true; estado.perdedor = false; } if (posEnemigo.columna == 0 || posEnemigo.columna == lab.getColumnas() - 1 || posEnemigo.fila == 0 || posEnemigo.fila == lab.getFilas() - 1) { estado.finJuego = true; estado.ganador = false; estado.perdedor = true; } } public boolean finJuego() { return estado.finJuego; } Ya por hoy lo voy a dejar porque estoy un poquito desquiciado, indicame si lo puedo entregar ya asà y dime donde está el error porque estoy de los nervios, gracias y un saludo. |
||
|
[Versión imprimible] [Publicar nuevo tema] |