Java - CPU juego Hundir la Flota

   
Vista:
Imágen de perfil de María de Alejandría

CPU juego Hundir la Flota

Publicado por María de Alejandría (12 intervenciones) el 31/05/2017 14:52:13
Saludos

Tengo una serie de códigos para configurar la CPU del juego Hundir La Flota programado en Java en función de la dificultad seleccionada por el jugador.

La cuestión es que aún no tengo lo necesario para probar si funcionan o no y me gustaría saber si los códigos son correctos o he de modificarlos:


Nivel Fácil: La CPU dispara a casillas aleatorias

public void seleccionarCasillaFacil(){
int x,y;
do{
x=(int) (Math.random()*n);
y=(int) (Math.random()*n);
}while(tabJugador.getCasilla(x, y).isSeleccionada());
tabJugador.getCasilla(x, y).Seleccionar();
}



Nivel Medio

Si la CPU descubre que en una casilla hay parte de un barco dispara a casillas situadas a su alrededor. En caso contrario dispara a una casilla aleatoria como el modo fácil:




public void seleccionarCasillaMedio(){
if(ultimaTocada.getBarco().getEstadoBarco()==EstadoBarco.TOCADO){
int aux=seguirRastro();
switch (aux) {
case 0:
if(!tabJugador.getCasilla(ultimaTocada.getX()+1, ultimaTocada.getY()).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX()+1, ultimaTocada.getY()).Seleccionar();
return;
}
case 1:
if(!tabJugador.getCasilla(ultimaTocada.getX()-1, ultimaTocada.getY()).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX()-1, ultimaTocada.getY()).Seleccionar();
return;
}
case 2:
if(!tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()+1).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()+1).Seleccionar();
return;
}
case 3:
if(!tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()-1).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()-1).Seleccionar();
return;
}
default:
break;
}
if(!elegirVecinaAleatoria()){
casillaVecinaTocada();
seleccionarCasillaMedio();
}
else return;
}
else seleccionarCasillaFacil();
}



Nivel difícil

La CPU dispara a casillas de posiciones pares o impares (se decide de forma aleatoria) con el fin de localizar los barcos de forma rápida. Si localiza uno realizará la misma operación que el nivel medio. Una vez halla disparado a todas las casillas de posiciones pares o impares si aún quedan barcos pequeños que ocupen una sola casilla disparará a las restantes de forma aleatoria:



public void seleccionarCasillaDificil(){
if(ultimaTocada.getBarco().getEstadoBarco()==EstadoBarco.TOCADO){
int aux=seguirRastro();
switch (aux) {
case 0:
if(!tabJugador.getCasilla(ultimaTocada.getX()+1, ultimaTocada.getY()).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX()+1, ultimaTocada.getY()).Seleccionar();
return;
}
case 1:
if(!tabJugador.getCasilla(ultimaTocada.getX()-1, ultimaTocada.getY()).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX()-1, ultimaTocada.getY()).Seleccionar();
return;
}
case 2:
if(!tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()+1).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()+1).Seleccionar();
return;
}
case 3:
if(!tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()-1).isSeleccionada()){
tabJugador.getCasilla(ultimaTocada.getX(), ultimaTocada.getY()-1).Seleccionar();
return;
}
default:
break;
}
if(!elegirVecinaAleatoria()){
casillaVecinaTocada();
seleccionarCasillaMedio();
}
else return;
}
else seleccionarCasillaDificil();
}


/**
* elige una casilla tocada vecina aleatoria
*/
private void casillaVecinaTocada(){
Casilla[] aux=ultimaTocada.getBarco().getCasillas();
if(getRandomBoolean())
for(int i=0;i<aux.length;i++){
if(aux[i].isSeleccionada() && aux[i]!=ultimaTocada)ultimaTocada=aux[i];
}
else{
for(int i=aux.length-1;i>=0;i--){
if(aux[i].isSeleccionada() && aux[i]!=ultimaTocada)ultimaTocada=aux[i];
}
}
}



Dejo también las variables declaradas por si es necesario:



private Tablero tabJugador;
private Tablero tabEnemigo;
private int n;
private int numSubmarino;
private int numPortaviones;
private int numAcorazado;
private int numDestructor;
private boolean turnoJugador;
private Dificultad dificultad;//Dificultad es otra clase
private int rondas;
private int numRonda;
private final int N_TAB=10;
private final int N_POR=1;
private final int N_SUB=4;
private final int N_ACZ=3;
private final int N_DES=2;
private Casilla ultimaTocada;
private String nombre;
private boolean jugando;


rondas=N_TAB*N_TAB;
tabJugador=new Tablero(N_TAB,true);
tabEnemigo=new Tablero(N_TAB,false);
numSubmarino=N_SUB;
numPortaviones=N_POR;
numAcorazado=N_ACZ;
numDestructor=N_DES;




Clase dificultad


package hundirlaflota;

public enum Dificultad {
FACIL,MEDIO,DIFICIL
}



Gracias de antemano y perdón por las molestias
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
Revisar política de publicidad