mvnForum Homepage Bienvenido domingo  |  Terminar sesión   
  Búsqueda  
  Indice |  Temas Recientes |  Quién Está en Línea |  Lista de Usuarios |  Mi Perfil |  Búsqueda |  Ayuda


Ir a »
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
Tema Anterior Este tema ha sido visto 54 veces y tiene 2 respuestas Tema Siguiente
Femenino vcc1
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 11
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Aun sigo con los problemas del laberinto Responder a este mensaje
Responder citando
[Eliminar este Tema]

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.
[Jul 28, 2004 10:48:34 AM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Femenino asa
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 1
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   Re: Aun sigo con los problemas del laberinto Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Te comento un par de fallos que veo en tu código, por lo que no te funciona:
 

Posicion posAuxRobot = new Posicion(posEnemigo.fila, posJugador.columna);

- Aquí estás cogiendo la columna del jugador, no la del robot.

 

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 último if no te haría falta, ya que en él estarías (si en el constructor anterior utilizases bien los parámetros) comprobando la posición actual del robot, ya que no varías posAuxRobot en ningún momento.

- Tal vez el código te quedaría más claro si utilizases el movimiento aleatorio, este código no es exactamente el que he utilizado, pero creo que funcionará:

posEnemigo = enemigo.getPos();
int cmdEnemigo = 0;
do {
cmdEnemigo = (int) (Math.random() * 4);
posAux = new Posicion(posEnemigo.fila, posEnemigo.columna);
posAux.mueve(cmdEnemigo);
} while(lab.ocupado(posAux)) ;

posEnemigo.mueve(cmdEnemigo);

- Espero que te sirva de algo.
[Jul 28, 2004 6:37:07 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
Femenino vcc1
Extranjero



Ingresó: Jul 1, 2004
Mensajes: 11
Estado: Desconectados

Adjuntar archivo   Editar este mensaje   smile   Re: Aun sigo con los problemas del laberinto Responder a este mensaje
Responder citando
[Eliminar este mensaje]

Gracias compañero porque estaba ya desquiciado, el problema era esta linea de codigo:

Posicion posAuxRobot = new Posicion(posEnemigo.fila, posJugador.columna);

Lo he probado y ahora me va de tu forma y de la mia, por fin lo he podido entregar bien hecho.

Me has hecho un gran favor, muchas gracias.
[Jul 28, 2004 8:28:32 PM] Print Post Reportar mensaje ofensivo  Ir al inicio 
[Versión imprimible] [Publicar nuevo tema]