Kurzusok
/
Java
Java
/
Feladatok
/
Varázslók és harcosok
Varázslók és harcosok

Varázslók és harcosok

Tanulófeladat

Bevezetés

Öröklődés

Az öröklődés az OOP (objektumorientált programozás) egyik központi fogalma. Egy „IS-A” kapcsolatot ír le. A programozásban szó szerint ugyanazt jelenti, mint az angolban: tulajdonságokat örökölsz a szülőtől (a programozásban ezek a tulajdonságok általában függvények és változók).

Tekintsd például az Animal osztályt, ahogy az alábbiakban látható:

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

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

}

Az Animal egy szülőosztály, mert a benne lévő tulajdonságok általánosságban minden állatra kiterjeszthetők.

Tekintsünk egy Lion nevű állatot, amelynek az osztálya így néz ki:

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

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

}
Note

Az Override annotációval jelezheted, hogy az alosztály egy metódusa felülírja a főosztály metódusát. Nem szigorúan kötelező, de ajánlott használni.

Most pedig, amikor ezt írjuk:

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

Megjegyzés: az Animal osztályt Lion értékkel inicializáljuk. A kimenet a következő lesz:

Lion here!!

Az OOP szerint az öröklődésnek több típusa van, de a Java csak néhányat támogat belőlük (a többszintűt és a hierarchikust). Ha többet szeretnél olvasni róla, olvasd el ezt.

Utasítások

Ebben a feladatban egy szerepjátékban játszol, ahol különböző típusú harcosok harcolhatnak egymás ellen. A játéknak minden harcostípusra más szabályai vannak. Két konkrét típusra összpontosítunk: a Wizard és a Warrior típusra.

A Warrior típusra ezek a szabályok érvényesek:

  • A Warrior soha nem sebezhető.
  • A Warrior 6 pont sebzést okoz, ha a harcos, akit megtámad, nem sebezhető.
  • A Warrior 10 pont sebzést okoz, ha a harcos, akit megtámad, sebezhető.

A Wizard típusra ezek a szabályok érvényesek:

  • A Wizard előre elkészíthet egy varázslatot.
  • A Wizard sebezhető, kivéve, ha előre elkészített egy varázslatot.
  • A Wizard 12 pont sebzést okoz, ha előre elkészített egy varázslatot.
  • A Wizard 3 pont sebzést okoz, ha nem készített elő varázslatot.

1. Hozd létre a Warrior osztályt

Hozz létre egy új Warrior nevű osztályt. Ez az osztály a meglévő Fighter osztályból örököljön.

2. A Warrior leírása

Frissítsd a Warrior osztályt úgy, hogy a toString() metódusa leírja, milyen típusú harcosról van szó. A metódusnak a "Fighter is a Warrior" stringet kell visszaadnia.

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

3. Tedd sebezhetetlenné a Warriorokat

Frissítsd a Warrior osztályt úgy, hogy az isVulnerable() metódusa mindig false értéket adjon vissza.

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

4. Számítsd ki a Warrior sebzéspontjait

Frissítsd a Warrior osztályt úgy, hogy a getDamagePoints(Fighter) metódusa a fenti szabályok szerint kiszámítsa a Warrior által okozott sebzést.

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

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

5. Hozd létre a Wizard osztályt

Hozz létre egy másik új Wizard nevű osztályt. Ez az osztály szintén a meglévő Fighter osztályból örököljön.

6. A Wizard leírása

Frissítsd a Wizard osztályt úgy, hogy a toString() metódusa leírja, milyen típusú harcosról van szó. A metódusnak a "Fighter is a Wizard" stringet kell visszaadnia.

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

7. Tedd lehetővé, hogy a Wizardok varázslatot készítsenek elő, és tedd őket sebezhetővé, ha nem készítettek elő varázslatot

Frissítsd a Wizard osztályt úgy, hogy hozzáadj egy prepareSpell() nevű metódust. Az osztálynak emlékeznie kell rá, mikor hívják meg ezt a metódust, és biztosítania kell, hogy az isVulnerable() metódusa csak akkor adjon vissza false értéket, ha egy varázslat elő van készítve.

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

8. Számítsd ki a Wizard sebzéspontjait

Frissítsd a Wizard osztályt úgy, hogy a getDamagePoints(Fighter) metódusa a fenti szabályok szerint kiszámítsa a Wizard által okozott sebzést.

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

wizard.prepareSpell();
wizard.getDamagePoints(warrior);
// => 12
Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
Java Exercism

Készen állsz elkezdeni a(z) Varázslók és harcosok feladatot?

Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) Java nyelvet 26 fogalom158 feladat segítségével, valódi emberi mentorálással, mindez ingyen.