Помогите написать код в Java согласно условиям задачи

Пытаюсь самостоятельно третий день сильно запутался

У вас есть:

Оружие. Наносит физический урон и дополнительный урон огнем или холодом.

Урон - это объект со свойствами (физический урон\ урон огнем\ урон холодом)

Ваша задача сделать новое оружие - "меч ночи в якутске". Этот меч наносит дополнительный урон холодом (50)

Так же создайте меч "пылающий асфальт", дающий урон огнем 50.

Потом создайте наследников от класса цели - ледяной великан, иммунитет к холоду. И эфрит - иммунитет к огню.

*** (необязательно) Напишите тесты, проверяющие, что получен ожидаемый урон.

1.Weapon

public class Weapon  {
public static void main(String[] args){
    Seting sword_1 = new Seting("Меч ночи в якутске");
    Seting sword_2 = new Seting("Пылающий асфальт");

}







    void hit(Target target) {


    }
}

2.Target

package pro.it.sis.javacourse;

public class Target {
    Target icedamage = new Target(50);
    Target firedamage = new Target(50);
    Target physicdamage = new Target(100);

    public int getPhysicalDamage() {
        return physicalDamage;
    }

    public int getFireDamage() {
        return fireDamage;
    }

    public int getIceDamage() {
        return iceDamage;
    }

    private int physicalDamage;

    private int fireDamage;

    private int iceDamage;


    public Target(int p) {
        physicalDamage = p;
        fireDamage = p;
        iceDamage = p;


    }
}

3.Seting

package pro.it.sis.javacourse;

public class Seting {
    String name;
    int extra_damage;
    String imunitet;
    public Seting(String name){
        this.name = name;
    }
    public void empExtra_damage(int Extra_damage ){
        extra_damage = Extra_damage;
    }
    public void empImunitet(String empImun) {
        imunitet = empImun;
    }

}

Ответы (1 шт):

Автор решения: Denis Kukharenko

Для начала нужно класс под Damage и через конструктор подготовить его принимать параметры различного типа урона хранимые в нем:

public class Damage {

  private int physicalDamage;

  private int fireDamage;

  private int iceDamage;

  Damage (int p, int f, int i) {

    physicalDamage = p;

    fireDamage = f;

    iceDamage = i;
  }

  public int getWeaponPhysicalDamage() {

    return physicalDamage;

  }

  public int getWeaponFireDamage() {

    return fireDamage;

  }

  public int getWeaponIceDamage() {

    return iceDamage;

  }
}

Затем подготовить класс Weapon для придания через конструктор имени и параметров урона и дописать метод hit (метод дописывал позже, чтобы понимать на тот момент как он будет взаимодействовать с целями):

public class Weapon {

  private String name;

  private Damage damage;

  public Weapon (String name, int p, int f,int i){
   this.name = name;
   this.damage = new Damage(p,f,i);

  }


  void hit(Target target) {

    target.setPhysicalDamage(this.damage.getWeaponPhysicalDamage());
    target.setFireDamage(this.damage.getWeaponFireDamage());
    target.setIceDamage(this.damage.getWeaponIceDamage());

  }
}

Теперь подготовим класс Target для наследования добавив геттеры и сеттеры приватных переменных:

public class Target {

    private int physicalDamage;

    private int fireDamage;

    private int iceDamage;


    public void setPhysicalDamage(int p) {
        physicalDamage = p;
    }

    public void setFireDamage(int f) {
        fireDamage = f;
    }

    public void setIceDamage(int i) {
        iceDamage = i;
    }

    public int getPhysicalDamage() {
        return physicalDamage;
    }

    public int getFireDamage() {
        return fireDamage;
    }

    public int getIceDamage() {
        return iceDamage;
    }
}

Создаем классы IceGiant и Ifrit наследующие Target. Добавляем им подобие иммунитета к своим видам урона переопределив методы. Не знаю как должен выражаться иммунитет, так что, я просто сделал так чтобы они не получали нужный тип урона:

public class Ifrit extends Target {

  @Override
  public void setFireDamage(int f) {
    System.out.println("Ифрит игнорирует огненный урон");
  }
}


public class IceGiant extends Target {

  @Override
  public void setIceDamage(int i) {
    System.out.println("Ледяной великан игнорирует ледяной урон");
  }
}

Ну и собственно запустим всё это проверить за работой. Не совсем понял опять же - какие цифры урона должны быть у оружия не считая описанного в задаче так что обоим мечам вписал еще 50 физ. урона. Чтобы было.

class TestWeaponApp {

  public static void main(String[] args) {

     Weapon sword1 = new Weapon("Меч ночи в якутске",50,50,0);
     Weapon sword2 = new Weapon("Пылающий асфальт",50,0,50);

     IceGiant g = new IceGiant();
     Ifrit i = new Ifrit();

     sword1.hit(g);
     System.out.println("Урон по Ледяному гиганту: " +g.getPhysicalDamage() +" 

" + g.getFireDamage() + " " + g.getIceDamage());

     sword1.hit(i);
     System.out.println("Урон по Ифриту: " +i.getPhysicalDamage() + " " + 

i.getFireDamage() + " " + i.getIceDamage());

  }
}

Вот такой вывод получаем:

введите сюда описание изображения

Надеюсь помог. Я сам начинающий в Java и поэтому очевидно что это наверняка далеко не лучшая возможная реализация задачи, но пока это лучшее что могу предложить. Более шарящим зато теперь есть поле для советов.

→ Ссылка