Tracks
/
Java
Java
/
Ejercicios
/
Magos y guerreros
Magos y guerreros

Magos y guerreros

Ejercicio de aprendizaje

Introducción

Herencia

La herencia es un concepto central en la POO (programación orientada a objetos). Representa una relación ES-UN. En programación significa literalmente lo mismo que en inglés: heredar características de un padre (en programación, esas características normalmente son funciones y variables).

Considera una clase Animal, como se muestra:

//Creating an Animal class with bark() as a member function.
public class Animal {

    public void bark() {
        System.out.println("This is an animal");
    }

}

Animal es una clase padre, porque las propiedades que tiene esta clase se pueden extender a todos los animales en general.

Considera un animal llamado Lion, que tiene una clase como esta:

//Lion class is a child class of Animal.
public class Lion extends Animal {

    @Override
    public void bark() {
        System.out.println("Lion here!!");
    }

}
Note

La anotación Override se usa para indicar que un método de una subclase está sobrescribiendo un método de su superclase. No es estrictamente necesaria, pero es una buena práctica usarla.

Ahora, siempre que hacemos esto:

Animal animal = new Lion(); //creating instance of Animal, of type Lion
animal.bark();

Nota: inicializamos la clase Animal con Lion. La salida se verá así:

Lion here!!

Según la POO, hay muchos tipos de herencia, pero Java solo soporta algunos de ellos (multinivel y jerárquica). Para leer más al respecto, consulta este artículo.

Instrucciones

En este ejercicio juegas un juego de rol en el que distintos tipos de luchadores pueden combatir entre sí. El juego tiene reglas diferentes para cada tipo de luchador. Nos vamos a centrar en dos tipos concretos: magos y guerreros.

Para un guerrero, estas son las reglas:

  • Un guerrero nunca es vulnerable.
  • Un guerrero inflige 6 puntos de daño si el luchador al que ataca no es vulnerable.
  • Un guerrero inflige 10 puntos de daño si el luchador al que ataca es vulnerable.

Para un mago, estas son las reglas:

  • Un mago puede preparar un hechizo de antemano.
  • Un mago es vulnerable a menos que haya preparado un hechizo de antemano.
  • Un mago inflige 12 puntos de daño si preparó un hechizo de antemano.
  • Un mago inflige 3 puntos de daño si no preparó un hechizo de antemano.

1. Crea la clase Warrior

Crea una clase nueva llamada Warrior. Esta clase debe heredar de la clase Fighter existente.

2. Describe a un guerrero

Actualiza la clase Warrior para que su método toString() describa qué tipo de luchador es. El método debe devolver el string "Fighter is a Warrior".

Warrior warrior = new Warrior();
warrior.toString();
// => "Fighter is a Warrior"

3. Haz que los guerreros sean invulnerables

Actualiza la clase Warrior para que su método isVulnerable() siempre devuelva false.

Warrior warrior = new Warrior();
warrior.isVulnerable();
// => false

4. Calcula los puntos de daño de un guerrero

Actualiza la clase Warrior para que su método getDamagePoints(Fighter) calcule el daño que inflige un guerrero según las reglas anteriores.

Warrior warrior = new Warrior();
Wizard wizard = new Wizard();

warrior.getDamagePoints(wizard);
// => 10

5. Crea la clase Wizard

Crea otra clase nueva llamada Wizard. Esta clase también debe heredar de la clase Fighter existente.

6. Describe a un mago

Actualiza la clase Wizard para que su método toString() describa qué tipo de luchador es. El método debe devolver el string "Fighter is a Wizard".

Wizard wizard = new Wizard();
wizard.toString();
// => "Fighter is a Wizard"

7. Permite que los magos preparen un hechizo y haz que sean vulnerables si no lo han preparado

Actualiza la clase Wizard para agregar un método llamado prepareSpell(). La clase debe recordar cuándo se llama a este método y asegurarse de que su método isVulnerable() devuelva false solo cuando haya un hechizo preparado.

Wizard wizard = new Wizard();
wizard.prepareSpell();
wizard.isVulnerable();
// => false

8. Calcula los puntos de daño de un mago

Actualiza la clase Wizard para que su método getDamagePoints(Fighter) calcule el daño que inflige un mago según las reglas anteriores.

Wizard wizard = new Wizard();
Warrior warrior = new Warrior();

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
Java Exercism

¿Todo listo para empezar Magos y guerreros?

Regístrate en Exercism para aprender y dominar Java con 26 conceptos158 ejercicios y mentoría humana real, todo gratis.