From ababde553b1059a530084df7ea8b323430bf2dd0 Mon Sep 17 00:00:00 2001 From: Matin-Ardestani Date: Tue, 12 May 2026 22:30:53 +0330 Subject: [PATCH] implement Enemy classes --- .../main/java/org/project/entity/Entity.java | 9 +--- .../org/project/entity/enemies/Dragon.java | 44 +++++++++++++++++++ .../org/project/entity/enemies/Enemy.java | 42 +++++++++++++----- .../org/project/entity/enemies/Goblin.java | 39 ++++++++++++++++ .../org/project/entity/enemies/Skeleton.java | 40 +++++++++++++++-- .../org/project/entity/enemies/Vampire.java | 40 +++++++++++++++++ 6 files changed, 192 insertions(+), 22 deletions(-) create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java create mode 100644 Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java diff --git a/Java-Knight/src/main/java/org/project/entity/Entity.java b/Java-Knight/src/main/java/org/project/entity/Entity.java index 2a060f9..88e1844 100644 --- a/Java-Knight/src/main/java/org/project/entity/Entity.java +++ b/Java-Knight/src/main/java/org/project/entity/Entity.java @@ -1,21 +1,16 @@ package org.project.entity; public interface Entity { - void attack(Entity target); + void defend(); void heal(int health); - void fillMana(int mana); +// void fillMana(int mana); void takeDamage(int damage); - int getMaxHP(); - int getMaxMP(); - /* - TODO: ADD OTHER REQUIRED AND BONUS METHODS - */ } diff --git a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java new file mode 100644 index 0000000..cce3fac --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -0,0 +1,44 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Dagger; +import org.project.item.weapons.Flame; +import org.project.item.weapons.Weapon; + +public class Dragon extends Enemy{ + + private static int maxHP = 220; + private int hp = maxHP; + + public Dragon(){ + Weapon DragonWeapon = new Flame(); + super(maxHP, DragonWeapon); + } + + @Override + public void attack(Entity target) { + target.takeDamage(28); + } + + @Override + public void SpecialAbility(Entity target) { + target.takeDamage(weapon.getDamage()); + } + + @Override + public void heal(int health) { + hp += health; + if (hp > maxHP) { + hp = maxHP; + } + } + + public int getMaxHP() { + return maxHP; + } + + public String getName(){ + return "Dragon"; + } + +} \ No newline at end of file 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 e019acb..3906a72 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 @@ -1,17 +1,17 @@ package org.project.entity.enemies; +import org.project.entity.Entity; import org.project.item.weapons.Weapon; -// TODO: UPDATE IMPLEMENTATION -public abstract class Enemy { +public abstract class Enemy implements Entity { Weapon weapon; - private int hp; - private int mp; + protected int hp; + private boolean defending = false; + protected boolean lifeStealing = false; + private boolean stunned = false; - public Enemy(int hp, int mp, Weapon weapon) { + public Enemy(int hp, Weapon weapon) { this.hp = hp; - this.mp = mp; - this.weapon = weapon; } @@ -20,15 +20,35 @@ public abstract class Enemy { hp -= damage; } - public int getHp() { - return hp; + public void attack(Entity target) { + target.takeDamage(weapon.getDamage()); } - public int getMp() { - return mp; + public abstract void SpecialAbility(Entity target); + + @Override + public void defend() { + defending = true; + } + + + public int getHp() { + return hp; } public Weapon getWeapon() { return weapon; } + + public boolean isDefending() { + return defending; + } + + public boolean isLifeStealing() { + return lifeStealing; + } + + public boolean isStunned() { + return stunned; + } } 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 new file mode 100644 index 0000000..8ac8a53 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,39 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Dagger; +import org.project.item.weapons.Weapon; + +public class Goblin extends Enemy{ + + private static int maxHP = 65; + private int hp = maxHP; + private int criticalHit_damage = 20; + + public Goblin(){ + Weapon goblinWeapon = new Dagger(); + super(maxHP, goblinWeapon); + } + + @Override + public void SpecialAbility(Entity target) { + target.takeDamage(criticalHit_damage); + } + + @Override + public void heal(int health) { + hp += health; + if (hp > maxHP) { + hp = maxHP; + } + } + + public int getMaxHP() { + return maxHP; + } + + public String getName(){ + return "Goblin"; + } + +} \ No newline at end of file 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 8a6a555..e27398e 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,6 +1,38 @@ package org.project.entity.enemies; -// TODO: UPDATE IMPLEMENTATION -public class Skeleton { - // TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR -} +import org.project.entity.Entity; +import org.project.item.weapons.BoneClub; +import org.project.item.weapons.Weapon; + +public class Skeleton extends Enemy{ + + private static int maxHP = 80; + private int hp = maxHP; + + public Skeleton(){ + Weapon SkeletonWeapon = new BoneClub(); + super(maxHP, SkeletonWeapon); + } + + @Override + public void SpecialAbility(Entity target) { + hp = maxHP/2; // revive + } + + @Override + public void heal(int health) { + hp += health; + if (hp > maxHP) { + hp = maxHP; + } + } + + public int getMaxHP() { + return maxHP; + } + + public String getName(){ + return "Skeleton"; + } + +} \ No newline at end of file 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 new file mode 100644 index 0000000..fa905b5 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,40 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Bite; +import org.project.item.weapons.Weapon; + +public class Vampire extends Enemy{ + + private static int maxHP = 95; + private int hp = maxHP; + + public Vampire(){ + Weapon VampireWeapon = new Bite(); + super(maxHP, VampireWeapon); + } + + @Override + public void SpecialAbility(Entity target) { + lifeStealing = true; + target.takeDamage((8/10)*(weapon.getDamage())); + hp += (int)((2/10)*(weapon.getDamage())); + } + + @Override + public void heal(int health) { + hp += health; + if (hp > maxHP) { + hp = maxHP; + } + } + + public int getMaxHP() { + return maxHP; + } + + public String getName(){ + return "Vampire"; + } + +} \ No newline at end of file