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); } }