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;
}
public abstract void attack(Entity target);
@Override
public void takeDamage(int damage) {
hp -= damage;
@@ -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;
}
}
@@ -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!");
@@ -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;
}
}
@@ -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);
}
}