Rutas
/
Java
Java
/
Ejercicios
/
Magos y guerreros
Magos y guerreros

Magos y guerreros

Ejercicio de aprendizaje

Introducción

Herencia

La herencia es un concepto fundamental de la POO (programación orientada a objetos). Representa una relación ES-UN. Significa en programación exactamente lo mismo que en el lenguaje común: heredar características del padre (en programación, esas características suelen ser funciones y variables).

Considera una clase, Animal, como se muestra a continuación:

//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, con 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 sobrescribe un método de su superclase. No es estrictamente necesaria, pero es una buena práctica usarla.

Ahora, siempre que hagamos lo siguiente:

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

Nota: se inicializa la clase Animal con Lion. La salida tendrá este aspecto:

Lion here!!

Según la POO, existen muchos tipos de herencia, pero Java solo admite algunos de ellos (multinivel y jerárquica). Para leer más sobre el tema, consulta esto.

Instrucciones

En este ejercicio juegas a un juego de rol en el que distintos tipos de luchadores pueden combatir entre sí. El juego tiene reglas distintas para cada tipo de luchador. Nos vamos a centrar en dos tipos concretos: los magos y los 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 con antelación.
  • Un mago es vulnerable a menos que haya preparado un hechizo con antelación.
  • Un mago inflige 12 puntos de daño si ha preparado un hechizo con antelación.
  • Un mago inflige 3 puntos de daño si no ha preparado un hechizo con antelación.

1. Crea la clase Warrior

Crea una nueva clase 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() devuelva siempre 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 infligido por 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 nueva clase 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 cuando no lo hayan preparado

Actualiza la clase Wizard para añadir 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 se haya preparado un hechizo.

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 infligido por 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 pestaña nueva
Java Exercism

¿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.