Java - juego Hundir la flota

 
Vista:
sin imagen de perfil

juego Hundir la flota

Publicado por Dalall (1 intervención) el 27/08/2014 23:29:03
Hola!!
Necesito ayuda con el metodo disparar del ordenador, el ordenador debe de disparar de forma inteligente, es decir una vez que alcanza un barco probara la casilla superior,luego la casilla derecha luego abajo y por ultimo a la derecha.
El problema es que no se donde esta el error...me dispara hacia arriba y ya esta...se para y entra en un bucle...me estoy volviendo loca :(
os dejo el codigo a ver si podeis hecharme una mano, muchas gracias
public Coordenada especificarDisparo()
{

int estado=0;
int turnoD=0;
//Coordenada disparo=null;
boolean ocupada=false;
Random randomGenerator= new Random();
int cX=0;
int cY=0;
int cj=0;
int cc=0;

if (resultadoDisparoFinal==null)
{
ultimoMovimiento=MovimientoDisparo.ALEATORIO;
//disparo=disparar(MovimientoDisparo.ALEATORIO);
do
{
cX=randomGenerator.nextInt(ancho_tablero);
cY=randomGenerator.nextInt(alto_tablero);
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while(ocupada);
disparo=new Coordenada(cX,cY);


}
else
{

if ((resultadoDisparoFinal==ResultadoDisparo.AGUA)&&(estado==0))

{ do
{
cX=randomGenerator.nextInt(ancho_tablero);
cY=randomGenerator.nextInt(alto_tablero);
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while(ocupada);
disparo=new Coordenada(cX,cY);
}
else
{ if (resultadoDisparoFinal==ResultadoDisparo.HUNDIDO)
{ do
{
cX=randomGenerator.nextInt(ancho_tablero);
cY=randomGenerator.nextInt(alto_tablero);
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while(ocupada);
disparo=new Coordenada(cX,cY);
}

else
{

if( (resultadoDisparoFinal==ResultadoDisparo.TOCADO)|| (estado==1))
{
//disparar hacia arriba hasta que el resultado sea agua, o si no se puede
//disparar arriba disparamos hacia la derecha y si tampoco se puede,
//se dispara abajo, esto ocurre en el caso de que el barco este situado en la
//parte superior derecha, coordenada (9,9)tocado
ultimoDisparoTocado=disparoFinal;
estado =1;
// disparar arriba
//ARRIBA:
if((turnoD==0)&&(resultadoDisparoFinal==ResultadoDisparo.AGUA))
{
turnoD=1;}//derecha
else
{ if((turnoD==1)&&(resultadoDisparoFinal==ResultadoDisparo.AGUA))
{
turnoD=2;//abajo
}
else
{
if((turnoD==2)&&(resultadoDisparoFinal==ResultadoDisparo.AGUA))
{
turnoD=3;//izquierda
};



if ((turnoD==0)&&(resultadoDisparoFinal==ResultadoDisparo.TOCADO))
{//arriba
cY=ultimoDisparoTocado.getY();
do
{
cX=ultimoDisparoTocado.getX();
cY=cY-1;
if(cY>=0)
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while ((cY>=0) && (ocupada));
if(cY<0)
{
turnoD=1;
}
else{

disparo= new Coordenada(cX,cY);
};
}

else{
if ((turnoD==1)&&(resultadoDisparoFinal==ResultadoDisparo.TOCADO))
{//DERECHA:
cX=ultimoDisparoTocado.getX();
do
{
cX=cX+1;
cY=ultimoDisparoTocado.getY();
if (cX<ancho_tablero)
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while((cX<ancho_tablero) && (ocupada));
if(cX>=ancho_tablero)
turnoD=2;
else{
disparo=new Coordenada(cX,cY);
};
}
else
{//abajo
if ((turnoD==2)&&(resultadoDisparoFinal==ResultadoDisparo.TOCADO))
{ cY=ultimoDisparoTocado.getY();
do
{
cX=ultimoDisparoTocado.getX();
cY=cY+1;
if(cY<ancho_tablero)
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));
}
while((cY<alto_tablero) && (ocupada));
if(cY>=alto_tablero)
turnoD=3;
else{
disparo=new Coordenada(cX,cY);
};
}
else
{//izquierda
if ((turnoD==3)&&(resultadoDisparoFinal==ResultadoDisparo.TOCADO))
cX=ultimoDisparoTocado.getX();
do
{
cX=cX-1;
cY=ultimoDisparoTocado.getY();
if(cX>=0)
ocupada = (!(tableroOrd[cX][cY]==Posiciones.SIN_DISPARAR));

}
while ((cX>=0) && (ocupada));
if(cX<0)
estado=0;
else
{
disparo=new Coordenada(cX,cY);
};
} }} }} } }}}

cj=disparo.getX();
cc=disparo.getX();
System.out.println("mov "+ultimoMovimiento);
System.out.println(" x "+cj+"y "+cc );
disparoFinal=disparo;
return disparo;


}
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
sin imagen de perfil

juego Hundir la flota

Publicado por Pedro (81 intervenciones) el 30/08/2014 13:25:40
Prueba a imprimir por la consola las variables que están en la condición del bucle infinito para así poder localizar el motivo.

Si puedes indicar que bucle se hace infinito sería de gran 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