package com.trifulcas.ejercitos;
abstract public class Enemigo {
private String nombre;
private int fortaleza;
private int danyo;
/**
* @param nombre the nombre to set
*/
protected void setNombre(String nombre) {
this.nombre = nombre;
}
/**
* @param fortaleza the fortaleza to set
*/
protected void setFortaleza(int fortaleza) {
if (fortaleza >= 0) {
this.fortaleza = fortaleza;
}
}
/**
* @param danyo the danyo to set
*/
protected void setDanyo(int danyo) {
if (danyo >= 0) {
this.danyo = danyo;
}
}
/**
* @return the nombre
*/
public String getNombre() {
return nombre;
}
/**
* @return the fortaleza
*/
public int getFortaleza() {
return fortaleza;
}
/**
* @return the danyo
*/
public int getDanyo() {
return danyo;
}
public Enemigo() {
// TODO Auto-generated constructor stub
}
}
package com.trifulcas.ejercitos;
abstract public class Infanteria extends Enemigo {
private int armadura;
/**
* @param armadura the armadura to set
*/
protected void setArmadura(int armadura) {
this.armadura = armadura;
}
public Infanteria() {
// TODO Auto-generated constructor stub
}
abstract public void cargar();
abstract public void retroceder();
}
package com.trifulcas.ejercitos;
public class Soldado extends Infanteria {
public Soldado() {
setNombre("Soldado");
setFortaleza(50);
setDanyo(5);
setArmadura(20);
}
@Override
public void cargar() {
System.out.println("Ataque de soldados "+getDanyo());
}
@Override
public void retroceder() {
System.out.println("¡¡Retirada!!!!");
setFortaleza(getFortaleza()-5);
setDanyo(getDanyo()-1);
}
}
package com.trifulcas.ejercitos;
public class Lancero extends Infanteria {
public Lancero() {
setNombre("Lancero");
setFortaleza(60);
setDanyo(15);
setArmadura(10);
}
@Override
public void cargar() {
System.out.println("Ataque de lanceros "+getDanyo());
}
public void ataqueLanza() {
System.out.println("Ataque con lanza "+getDanyo());
}
@Override
public void retroceder() {
System.out.println("¡¡Retirada!!!!");
// Si usamos el setter para modificar el valor centralizamos
// la modificación y es más fácil controlar las restricciones
setFortaleza(getFortaleza()-4);
setDanyo(getDanyo()-2);
}
}
package com.trifulcas.ejercitos;
public class Capitan extends Infanteria {
public Capitan() {
setNombre("Capitán");
setFortaleza(70);
setDanyo(10);
setArmadura(40);
}
@Override
public void cargar() {
System.out.println("Ataque de capitán "+getDanyo());
}
@Override
public void retroceder() {
System.out.println("¡¡Retirada!!!!");
setFortaleza(getFortaleza()-5);
setDanyo(getDanyo()-2);
}
}
package com.trifulcas.ejercitos;
public class Ejercito {
private Infanteria[] infanteria;
public Ejercito() {
// Me aprovecho del mismo constructor: palabra clave this
// La usamos para llamar a los constructores de la clase
this(10,4,1);
}
public Ejercito(int soldados, int lanceros, int capitanes) {
int total = soldados + lanceros + capitanes;
infanteria = new Infanteria[total];
for (int i = 0; i < soldados; i++) {
infanteria[i] = new Soldado();
}
for (int i = soldados; i < soldados+lanceros; i++) {
infanteria[i] = new Lancero();
}
for (int i = soldados+lanceros; i < total; i++) {
infanteria[i] = new Capitan();
}
}
public int getTotalUnidades() {
return infanteria.length;
}
public int totalDanyo() {
int total = 0;
for (Infanteria unidad : infanteria) {
total += unidad.getDanyo();
}
return total;
}
public void aLaCarga() {
for (Infanteria unidad : infanteria) {
// Si tiene daño ataca, si no no
if (unidad.getDanyo() > 0) {
unidad.cargar();
// Compruebo si unidad es una instancia de Lancero
if (unidad instanceof Lancero) {
// Conversión implícita 'al vuelo'
((Lancero) unidad).ataqueLanza();
// Implícita sin hacerlo al vuelo
// Lancero temp=(Lancero) unidad;
// temp.ataqueLanza();
}
}
}
System.out.println("Total daño: " + totalDanyo());
}
public void retirada() {
for (Infanteria unidad : infanteria) {
unidad.retroceder();
}
}
public Infanteria getUnidad(int i) {
return infanteria[i];
}
public void cargarUnidad(int i) {
infanteria[i].cargar();
}
}
package com.trifulcas.testEjercito;
import java.util.Scanner;
import com.trifulcas.ejercitos.Ejercito;
public class Test {
static Scanner in;
public static void main(String[] args) {
in = new Scanner(System.in);
System.out.println("Bienvenido al simulador. Vamos a crear un ejército");
System.out.println("¿Cuantos soldados quieres?");
int soldados = in.nextInt();
System.out.println("¿Cuantos lanceros quieres?");
int lanceros = in.nextInt();
System.out.println("¿Cuantos capitanes quieres?");
int capitanes = in.nextInt();
Ejercito miEjercito = new Ejercito(soldados, lanceros, capitanes);
System.out.println("Ejercito creado con " + soldados + " soldados " + lanceros + " lanceros y " + capitanes
+ " capitanes");
System.out.println("El daño total es " + miEjercito.totalDanyo());
int respuesta;
do {
respuesta = menu("¿Qué quieres hacer?\r\n" + "1- Atacar\r\n" + "2.- Retirada\r\n" + "0.- Salir");
if (respuesta == 1) {
atacar(miEjercito);
} else if (respuesta == 2) {
retroceder(miEjercito);
} else if (respuesta != 0) {
System.out.println("Los valores válidos son 1,2 y 0");
}
} while (respuesta != 0);
}
public static int menu(String texto) {
System.out.println(texto);
int respuesta = in.nextInt();
return respuesta;
}
public static void atacar(Ejercito miEjercito) {
int respuesta;
do {
respuesta = menu(
"Has decido atacar\r\n" + "1- Con todas las unidades\r\n" + "2.- Con una unidad\r\n" + "0.- Salir");
if (respuesta == 1) {
miEjercito.aLaCarga();
} else if (respuesta == 2) {
System.out.println("¿Con qué unidad quieres atacar (1-" + miEjercito.getTotalUnidades() + ") ?");
int unidad = in.nextInt();
if (unidad >= 1 && unidad <= miEjercito.getTotalUnidades()) {
miEjercito.getUnidad(unidad - 1).cargar();
} else {
System.out.println("Unidad fuera de rango");
}
// Otra manera: miEjercito.cargarUnidad(unidad);)
} else if (respuesta != 0) {
System.out.println("Los valores válidos son 1,2 y 0");
}
} while (respuesta != 0);
}
public static void retroceder(Ejercito miEjercito) {
int respuesta;
do {
respuesta = menu("Has decido retroceder\r\n" + "1- Con todas las unidades\r\n" + "2.- Con una unidad\r\n"
+ "0.- Salir");
if (respuesta == 1) {
miEjercito.retirada();
;
} else if (respuesta == 2) {
System.out.println("¿Con qué unidad quieres retroceder (1-" + miEjercito.getTotalUnidades() + ") ?");
int unidad = in.nextInt();
if (unidad >= 1 && unidad <= miEjercito.getTotalUnidades()) {
miEjercito.getUnidad(unidad-1).retroceder();
} else {
System.out.println("Unidad fuera de rango");
}
} else if (respuesta != 0) {
System.out.println("Los valores válidos son 1,2 y 0");
}
} while (respuesta != 0);
}
}