From 92e5c2575f12615eefeae64d6f4338dd33a30a58 Mon Sep 17 00:00:00 2001 From: Zahra Gharagozloo Mazlaghan Date: Sun, 10 May 2026 19:48:55 +0330 Subject: [PATCH] The Enemy subclasses completed. --- .../org/project/entity/enemies/Enemy.java | 2 + .../org/project/entity/enemies/Goblin.java | 32 +++++++++++++- .../org/project/entity/enemies/Skeleton.java | 18 +++++++- .../org/project/entity/enemies/Vampire.java | 42 ++++++++++++++++++- .../java/org/project/item/weapons/Rapier.java | 6 +-- 5 files changed, 91 insertions(+), 9 deletions(-) diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index c163c29..feaf10e 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java @@ -22,6 +22,8 @@ public abstract class Enemy implements Entity { this.weapon = weapon; } + public abstract void attack(Entity target); + @Override public void takeDamage(int damage) { hp -= damage; diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java index 326b7b3..053e3f0 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -1,11 +1,39 @@ package org.project.entity.enemies; +import org.project.entity.Entity; import org.project.item.weapons.BoneDagger; import org.project.item.weapons.ToothedHook; +import java.util.Random; + public class Goblin extends Enemy { + private Random random; + public Goblin() { - super("Goblin", 30, 30, new ToothedHook()); + super("Goblin", 30, 20, new ToothedHook()); + } + + @Override + public void attack(Entity target) { + int damage = 10; + boolean isCritical = false; + + //Checking Critical Chance + int chance = random.nextInt(100); + if (chance > 30) { //Critical Chance = 70% + damage *= 2; + isCritical = true; + } + + target.takeDamage(damage); + + if (isCritical) { + System.out.println("💣 Goblin used CRITICAL STRIKE! "); + System.out.println("💥 Goblin dealt " + damage + " damage to " + getName(target) + "!"); + } else { + System.out.println("👹 Goblin attacked " + getName(target) + "!"); + System.out.println("💥 Goblin dealt " + damage + " damage to " + getName(target) + "!"); + } } @Override @@ -15,6 +43,6 @@ public class Goblin extends Enemy { @Override public int getMaxMP() { - return 30; + return 20; } } diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java index d3af5db..943aac2 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Skeleton.java @@ -1,5 +1,6 @@ package org.project.entity.enemies; +import org.project.entity.Entity; import org.project.item.weapons.BoneDagger; public class Skeleton extends Enemy { @@ -9,6 +10,17 @@ public class Skeleton extends Enemy { super("Skeleton", 40, 25, new BoneDagger()); } + @Override + public void attack(Entity target) { + int damage = 10; + + target.takeDamage(damage); + + System.out.println("💀 Skeleton attacked " + getName(target) + "!"); + System.out.println("💥 Skeleton dealt " + damage + " damage to " + + getName(target) + "!"); + } + @Override public void takeDamage(int damage) { int newHp = getHp() - damage; @@ -20,14 +32,16 @@ public class Skeleton extends Enemy { hasResurrected = true; System.out.println("💀 Skeleton has been defeated..."); - System.out.println("☠️ But Skeleton rises again! Resurrected with " + resurrectedHp + " HP!"); + System.out.println("☠️ But Skeleton rises again! Resurrected with " + + resurrectedHp + " HP!"); return; } setHp(newHp); if (getHp() < 0) setHp(0); - System.out.println("💥 Skeleton took " + damage + " damage! HP: " + getHp() + "/" + getMaxHP()); + System.out.println("💥 Skeleton took " + damage + " damage! HP: " + + getHp() + "/" + getMaxHP()); if (getHp() <= 0) { System.out.println("☠️ Skeleton has been destroyed for good!"); diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java index 966c4b5..df2054a 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -1,4 +1,44 @@ package org.project.entity.enemies; -public class Vampire { +import org.project.entity.Entity; +import org.project.item.weapons.ToothedHook; + +public class Vampire extends Enemy { + public Vampire() { + super("Vampire", 50, 40, new ToothedHook()); + } + + @Override + public void attack(Entity target) { + int damage = 12; + + target.takeDamage(damage); + + //Adding to Vampire HP + int healAmount = damage * 30 / 100; + int newHp = getHp() + healAmount; + if (newHp > getMaxHP()) { + newHp = getMaxHP(); + } + setHp(newHp); + + System.out.println("🦇 Vampire attacks " + getName(target) + "!"); + System.out.println("💥 Dealt " + damage + " damage!"); + System.out.println("🩸 Life steal: Vampire drains " + healAmount + " HP and regenerates!"); + System.out.println("💚 Vampire HP: " + getHp() + "/" + getMaxHP()); + + if (getHp() == getMaxHP()) { + System.out.println("🦇 Vampire is fully satiated!"); + } + } + + @Override + public int getMaxHP() { + return 50; + } + + @Override + public int getMaxMP() { + return 40; + } } diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java b/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java index 2292b41..a9a5880 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Rapier.java @@ -4,9 +4,7 @@ import org.project.item.Item; //The vampire's weapon public class Rapier extends Weapon implements Item { - int abilityCharge; - - public Rapier(int damage, int manaCost) { - super(damage, manaCost); + public Rapier() { + super(20, 10); } } \ No newline at end of file