Помогите написать код в 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 шт):
Для начала нужно класс под 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 и поэтому очевидно что это наверняка далеко не лучшая возможная реализация задачи, но пока это лучшее что могу предложить. Более шарящим зато теперь есть поле для советов.
