Trilhas
/
Java
Java
/
Exercícios
/
Magos e guerreiros
Magos e guerreiros

Magos e guerreiros

Exercício de aprendizagem

Introdução

Herança

Herança é um conceito central na POO (Programação Orientada a Objetos). Ela representa uma relação É-UM. Na programação, significa literalmente o mesmo que em inglês: herdar características da classe pai (na programação, essas características geralmente são funções e variáveis).

Considere uma classe Animal, como mostrado a seguir:

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

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

}

Animal é uma classe pai, porque as propriedades dessa classe podem ser estendidas a todos os animais em geral.

Considere um animal chamado Lion, com uma classe 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

A anotação Override é usada para indicar que um método em uma subclasse está sobrescrevendo um método da sua superclasse. Ela não é estritamente necessária, mas usá-la é uma boa prática.

Agora, sempre que fizermos:

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

Repare: estamos inicializando a classe Animal com Lion. A saída será assim:

Lion here!!

De acordo com a POO, existem muitos tipos de herança, mas o Java suporta apenas alguns deles (multinível e hierárquica). Para saber mais, leia este artigo.

Instruções

Neste exercício, você está jogando um jogo de RPG em que diferentes tipos de lutadores podem combater uns aos outros. O jogo tem regras diferentes para cada tipo de lutador. Vamos nos concentrar em dois tipos específicos: Magos e Guerreiros.

Para um Guerreiro, as regras são estas:

  • Um Guerreiro nunca é vulnerável.
  • Um Guerreiro causa 6 pontos de dano se o lutador que ele está atacando não for vulnerável.
  • Um Guerreiro causa 10 pontos de dano se o lutador que ele está atacando for vulnerável.

Para um Mago, as regras são estas:

  • Um Mago pode preparar uma magia com antecedência.
  • Um Mago é vulnerável a menos que tenha preparado uma magia com antecedência.
  • Um Mago causa 12 pontos de dano se tiver preparado uma magia com antecedência.
  • Um Mago causa 3 pontos de dano se não tiver preparado uma magia com antecedência.

1. Crie a classe Warrior

Crie uma nova classe chamada Warrior. Essa classe deve herdar da classe Fighter existente.

2. Descreva um Guerreiro

Atualize a classe Warrior para que seu método toString() descreva que tipo de lutador ele é. O método deve retornar a string "Fighter is a Warrior".

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

3. Torne os Guerreiros invulneráveis

Atualize a classe Warrior para que seu método isVulnerable() sempre retorne false.

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

4. Calcule os pontos de dano de um Guerreiro

Atualize a classe Warrior para que seu método getDamagePoints(Fighter) calcule o dano causado por um Guerreiro de acordo com as regras acima.

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

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

5. Crie a classe Wizard

Crie outra nova classe chamada Wizard. Essa classe também deve herdar da classe Fighter existente.

6. Descreva um Mago

Atualize a classe Wizard para que seu método toString() descreva que tipo de lutador ele é. O método deve retornar a string "Fighter is a Wizard".

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

7. Permita que os Magos preparem uma magia e os torne vulneráveis quando não tiverem preparado uma magia

Atualize a classe Wizard para adicionar um método chamado prepareSpell(). A classe deve se lembrar de quando esse método é chamado e garantir que seu método isVulnerable() retorne false apenas quando uma magia estiver preparada.

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

8. Calcule os pontos de dano de um Mago

Atualize a classe Wizard para que seu método getDamagePoints(Fighter) calcule o dano causado por um Mago de acordo com as regras acima.

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

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Editar via GitHub O link abre em uma nova janela ou aba
Java Exercism

Tudo pronto para começar Magos e guerreiros?

Crie sua conta no Exercism para aprender e dominar Java com 26 conceitos158 exercícios e mentoria humana de verdade, tudo de graça.