The Enemy subclasses completed.

This commit is contained in:
2026-05-10 19:48:55 +03:30
parent c1073ecbc7
commit 92e5c2575f
5 changed files with 91 additions and 9 deletions
@@ -22,6 +22,8 @@ public abstract class Enemy implements Entity {
this.weapon = weapon; this.weapon = weapon;
} }
public abstract void attack(Entity target);
@Override @Override
public void takeDamage(int damage) { public void takeDamage(int damage) {
hp -= damage; hp -= damage;
@@ -1,11 +1,39 @@
package org.project.entity.enemies; package org.project.entity.enemies;
import org.project.entity.Entity;
import org.project.item.weapons.BoneDagger; import org.project.item.weapons.BoneDagger;
import org.project.item.weapons.ToothedHook; import org.project.item.weapons.ToothedHook;
import java.util.Random;
public class Goblin extends Enemy { public class Goblin extends Enemy {
private Random random;
public Goblin() { 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 @Override
@@ -15,6 +43,6 @@ public class Goblin extends Enemy {
@Override @Override
public int getMaxMP() { public int getMaxMP() {
return 30; return 20;
} }
} }
@@ -1,5 +1,6 @@
package org.project.entity.enemies; package org.project.entity.enemies;
import org.project.entity.Entity;
import org.project.item.weapons.BoneDagger; import org.project.item.weapons.BoneDagger;
public class Skeleton extends Enemy { public class Skeleton extends Enemy {
@@ -9,6 +10,17 @@ public class Skeleton extends Enemy {
super("Skeleton", 40, 25, new BoneDagger()); 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 @Override
public void takeDamage(int damage) { public void takeDamage(int damage) {
int newHp = getHp() - damage; int newHp = getHp() - damage;
@@ -20,14 +32,16 @@ public class Skeleton extends Enemy {
hasResurrected = true; hasResurrected = true;
System.out.println("💀 Skeleton has been defeated..."); 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; return;
} }
setHp(newHp); setHp(newHp);
if (getHp() < 0) setHp(0); 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) { if (getHp() <= 0) {
System.out.println("☠️ Skeleton has been destroyed for good!"); System.out.println("☠️ Skeleton has been destroyed for good!");
@@ -1,4 +1,44 @@
package org.project.entity.enemies; 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;
}
} }
@@ -4,9 +4,7 @@ import org.project.item.Item;
//The vampire's weapon //The vampire's weapon
public class Rapier extends Weapon implements Item { public class Rapier extends Weapon implements Item {
int abilityCharge; public Rapier() {
super(20, 10);
public Rapier(int damage, int manaCost) {
super(damage, manaCost);
} }
} }