diff --git a/Java-Knight/src/main/java/org/project/item/armors/Armor.java b/Java-Knight/src/main/java/org/project/item/armors/Armor.java index 7ca8774..d635a3b 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/Armor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/Armor.java @@ -1,31 +1,77 @@ -package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public abstract class Armor { +package org.project.item.armors; +public class Armor { + + public enum ArmorType { + LIGHT, + MEDIUM, + HEAVY + } + + + private String name; + private ArmorType type; + private int defense; private int maxDefense; + private int durability; private int maxDurability; - private boolean isBroke; + private boolean isBroken; - public Armor(int defense, int durability) { - this.defense = defense; - this.durability = durability; + // Constructor + public Armor(String name, ArmorType type, int maxDefense, int maxDurability) { + this.name = name; + this.type = type; + this.maxDefense = maxDefense; + this.defense = maxDefense; + this.maxDurability = maxDurability; + this.durability = maxDurability; + this.isBroken = false; } - public void checkBreak() { + + public int reduceDamage(int damage) { + + if (isBroken) { + return damage; + } + + int reducedDamage = damage - defense; + + if (reducedDamage < 0) { + reducedDamage = 0; + } + + reduceDurability(1); + + return reducedDamage; + } + + public void reduceDurability(int amount) { + durability -= amount; + if (durability <= 0) { - isBroke = true; - defense = 0; + durability = 0; + breakArmor(); } } - // TODO: (BONUS) UPDATE THE REPAIR METHOD - public void repair() { - isBroke = false; - defense = maxDefense; - durability = maxDurability; + // شکستن زره + private void breakArmor() { + isBroken = true; + defense = 0; + } + + // ===== Getters ===== + + public String getName() { + return name; + } + + public ArmorType getType() { + return type; } public int getDefense() { @@ -36,7 +82,19 @@ public abstract class Armor { return durability; } - public boolean isBroke() { - return isBroke; + public int getMaxDurability() { + return maxDurability; + } + + public boolean isBroken() { + return isBroken; + } + + @Override + public String toString() { + return name + " | Type: " + type + + " | Defense: " + defense + + " | Durability: " + durability + "/" + maxDurability + + (isBroken ? " (BROKEN)" : ""); } } diff --git a/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java b/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java new file mode 100644 index 0000000..a1becf9 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class AssassinArmor extends Armor { + + private static final String NAME = "wizard Robe"; + private static final ArmorType ARMOR_TYPE = ArmorType.HEAVY; + private static final int MAX_DEFENSE = 35; + private static final int MAX_DURABILITY = 60; + + public AssassinArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/DragonArmor.java b/Java-Knight/src/main/java/org/project/item/armors/DragonArmor.java new file mode 100644 index 0000000..698d47e --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/DragonArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class DragonArmor extends Armor { + + private static final String NAME = "Dragon scale armor"; + private static final ArmorType ARMOR_TYPE = ArmorType.HEAVY; + private static final int MAX_DEFENSE = 40; + private static final int MAX_DURABILITY = 60; + + public DragonArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/GoblinArmor.java b/Java-Knight/src/main/java/org/project/item/armors/GoblinArmor.java new file mode 100644 index 0000000..dbee287 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/GoblinArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class GoblinArmor extends Armor { + + private static final String NAME = "goblin Robe"; + private static final ArmorType ARMOR_TYPE = ArmorType.LIGHT; + private static final int MAX_DEFENSE = 5; + private static final int MAX_DURABILITY = 15; + + public GoblinArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java index eb59a46..2c4f47b 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/KnightArmor.java @@ -1,6 +1,17 @@ package org.project.item.armors; -// TODO: UPDATE IMPLEMENTATION -public class KnightArmor { - // TODO: DESIGN ARMOR'S ATTRIBUTES IMPLEMENT THE CONSTRUCTOR -} \ No newline at end of file +public class KnightArmor extends Armor { + + private static final String NAME = "knight armor"; + private static final ArmorType ARMOR_TYPE = ArmorType.HEAVY; + private static final int MAX_DEFENSE = 35; + private static final int MAX_DURABILITY = 60; + + public KnightArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/SkeletonArmor.java b/Java-Knight/src/main/java/org/project/item/armors/SkeletonArmor.java new file mode 100644 index 0000000..8c5db09 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/SkeletonArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class SkeletonArmor extends Armor { + + private static final String NAME = "skeleton armor"; + private static final ArmorType ARMOR_TYPE = ArmorType.LIGHT; + private static final int MAX_DEFENSE = 15; + private static final int MAX_DURABILITY = 20; + + public SkeletonArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/VampireArmor.java b/Java-Knight/src/main/java/org/project/item/armors/VampireArmor.java new file mode 100644 index 0000000..d5a840a --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/VampireArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class VampireArmor extends Armor { + + private static final String NAME = "vampire armor"; + private static final ArmorType ARMOR_TYPE = ArmorType.MEDIUM; + private static final int MAX_DEFENSE = 16; + private static final int MAX_DURABILITY = 30; + + public VampireArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +} diff --git a/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java b/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java new file mode 100644 index 0000000..4724811 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java @@ -0,0 +1,17 @@ +package org.project.item.armors; + +public class WizardArmor extends Armor { + + private static final String NAME = "wizard Robe"; + private static final ArmorType ARMOR_TYPE = ArmorType.MEDIUM; + private static final int MAX_DEFENSE = 20; + private static final int MAX_DURABILITY = 20; + + public WizardArmor() { + super(NAME, + ARMOR_TYPE, + MAX_DEFENSE, + MAX_DURABILITY + ); + } +}