Autor Tema: Lenguaje JAVA usar Operadores booleanos para simular vida en un juego misiles  (Leído 2549 veces)

keylatmnt24

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 3
    • Ver Perfil
Buenos días, tengo una consulta sobre como realizar un codigo booleano en base al siguiente:

Código: [Seleccionar]
package fuerzas.rebeldes;

public class XWing {

private String nombre;

private int misiles = 6;
private int disparos = 0;

public XWing() {

}

public XWing(String nombre) {
this.nombre = nombre;
}

/**
* @return boolean
*/
public boolean disparar_misil() {
if (misiles > 0) {
System.out.println(this.nombre + "...: L A N Z A N D O   M I S I L  # :" + misiles);
misiles = misiles - 1;
return true;
} else {
System.out.println(this.nombre + "**** WARNING : NO HAY MISILES ****");
return false;
}
}

/**
* @param rafaga
*/
public void disparar_canon(boolean rafaga) {
if (rafaga) {
for (int i = 0; i < 20; i++) {
System.out.println(this.nombre + " RAFAGA laser shot !!!");
disparos = disparos + 1;
}
} else {
System.out.println(this.nombre + " laser shot !!!");
disparos = disparos + 1;
}

System.out.println(this.nombre + " *** INFO para el piloto : van " + disparos + " disparos ***");
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

}
Me estan pidiendo modificar  la   clase   XWing.java   para   agregar   un   atributo   boolean   que   indique   si   el   X -Wing   está  aun   en   misión   o   ha   sido destruido   por   las   fuerzas   imperiales.  Has   un   programa   main   que   pueda   trabajar   con   este   atributo   antes   de   efectuar   cualquier  acción   de   disparo. 

Me dieron una sugerencia : Utilizar Random
Código: [Seleccionar]
Random randomGenerator = new Random();
int destruir = randomGenerator.nextInt(12);
« Última modificación: 02 de Septiembre 2018, 11:40 por Mario R. Rancel »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 988
    • Ver Perfil
Re:Lenguaje JAVA - Operadores booleanos
« Respuesta #1 en: 02 de Septiembre 2018, 02:16 »
Hola.
Lo primero indicar que esta sección es para presentarse y/o hacer sugerencias para el foro, no para plantear dudas. Luego un moderador lo moverá a la sección correspondiente.

Sobre lo que planteas.
Supongo que lo que piden es hacer que, de manera aleatoria, se decida si el X-Wing ha sido destruido o no.
De modo que si ha sido destruido, ya no podrá disparar misiles cuando se lo ordenemos.

Así que  habría que añadirle a la clase un atributo booleano. Podemos llamarlo destruido y se iniciaría con valor "falso".
Citar
   private String nombre;
   private int misiles = 6;
   private int disparos = 0;
   private boolean destruido = false;

Luego habría que añadir un método donde usando el random que proponían, decidiremos si la nave sufre una destruccion o no.
Este método sería privado, porque es una función interna de esta clase. En principio, no queremos que otras clases puedan llamar a este método.
El código que te proponian genera numeros aleatorios entre 0 y 11.
Ahora podemos decidir a nuestro antojo cómo decidir cuando será destruida la nave.
Yo por ejemplo he decidido que si se genera un 0, un 5 o un 11... la nave será destruida.
Pero podríamos decidir otra forma, por ejemplo destruir solo si el número generado es un numero par, o cualquier cosa que se nos ocurra.
Citar
   /**
    * Método interno que decide si el XWing sufre una destrucción o no.
    * En caso de ser destruido, ya no podrá seguir disparando.
    */

   private void decidirDestruccion() {
      Random randomGenerator = new Random();
      int destruir = randomGenerator.nextInt(12);
      //Decidimos que el X-Wing será destruido si obtenemos: 0, 5 ó 11
      if (destruir == 0 || destruir == 5 || destruir == 11)
         destruido = true;
   }

Bien, ahora ya tenemos COMO decidir si la nave se destruye o no.
Ahora hay que establecer el CUANDO vamos a tomar esta decisión.
Puesto que no se indica nada en el enunciado, a mi se me ocurre que podemos hacerlo cada vez que el X-Wing recibe orden de disparar, es decir, cuando se invoque el método disparar_misil().
Este método lo vamos a modificar, lo primero que hará es consultar el atributo destruido, de modo que si tiene valor "verdadero", es decir, la nave está destruida, entonces no disparará e informará con un mensaje.
Si no, es decir, la nave aún está "viva", entonces sí disparará (si es que le quedan misiles). Y tras el disparo (o intento de disparo), será CUANDO decidiremos si va a sufrir una destrucción llamando a nuestro método privado.
Marco en rojo los cambios:
Citar
   public boolean disparar_misil() {
      if (destruido)
      {
         System.out.println("El X-Wing " + nombre + " ha sido destruido y no puede disparar");
         return false;
      }

      else
      {
         if (misiles > 0) {
            System.out.println(this.nombre + "...: L A N Z A N D O   M I S I L  # :" + misiles);
            misiles = misiles - 1;
            //Tras cada accion de ataque, echamos a suertes si el X-Wing  sufre una destrucción.
            decidirDestruccion();

            return true;
         } else {
            System.out.println(this.nombre + "**** WARNING : NO HAY MISILES ****");
            decidirDestruccion();
            return false;
         }
      }
   }

Así que finalmente, esta podría ser la clase XWing finalizada:
Código: [Seleccionar]
import java.util.Random;

public class XWing {

private String nombre;
private int misiles = 6;
private int disparos = 0;
private boolean destruido = false;

public XWing() {

}

public XWing(String nombre) {
this.nombre = nombre;
}

/**
* Método interno que decide si el XWing sufre una destrucción o no.
* En caso de ser destruido, ya no podrá seguir disparando.
*/
private void decidirDestruccion() {
Random randomGenerator = new Random();
int destruir = randomGenerator.nextInt(12);
//Decidimos que el X-Wing será destruido si obtenemos: 0, 5 ó 11
if (destruir == 0 || destruir == 5 || destruir == 11)
destruido = true;
}

/**
* @return boolean
*/
public boolean disparar_misil() {
if (destruido)
{
System.out.println("El X-Wing " + nombre + " ha sido destruido y no puede disparar");
return false;
}
else
{
if (misiles > 0) {
System.out.println(this.nombre + "...: L A N Z A N D O   M I S I L  # :" + misiles);
misiles = misiles - 1;
//Tras cada accion de ataque, echamos a suertes si el X-Wing  sufre una destrucción.
decidirDestruccion();
return true;
} else {
System.out.println(this.nombre + "**** WARNING : NO HAY MISILES ****");
decidirDestruccion();
return false;
}
}
}

/**
* @param rafaga
*/
public void disparar_canon(boolean rafaga) {
if (rafaga) {
for (int i = 0; i < 20; i++) {
System.out.println(this.nombre + " RAFAGA laser shot !!!");
disparos = disparos + 1;
}
} else {
System.out.println(this.nombre + " laser shot !!!");
disparos = disparos + 1;
}

System.out.println(this.nombre + " *** INFO para el piloto : van " + disparos + " disparos ***");
}

public String getNombre() {
return nombre;
}

public void setNombre(String nombre) {
this.nombre = nombre;
}

}


Ahora nos piden un main donde poner en práctica esta función.
Yo propongo aquí una clase supersencilla. Básicamente creamos un objeto XWing y ponemos un menú con dos opciones: disparar y terminar programa.
Tras cada accion de disparo, se decidirá si el Xwing es destruido tal y como hemos programado en su clase.
Así que en algún momento indeterminado, pediremos disparar pero ya no será posible porque la nave habrá sido destruida.

Código: [Seleccionar]
import java.util.Scanner;

public class Test {

public static void main(String[] args) {

XWing xW = new XWing("Falcon");
Scanner teclado = new Scanner(System.in);
int opcion = 0;
do {
System.out.println("\n\n1 - Disparar");
System.out.println("9 - Terminar programa");
System.out.println("Elija opcion: ");
opcion = teclado.nextInt();
switch (opcion) {
case 1:
xW.disparar_misil();
break;
case 9:
System.out.println("\n\nFIN DE PROGRAMA");
break;
default:
System.out.println("Opcion invalida");
}
}while(opcion != 9);
teclado.close();

}

}

NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".