From 3ea225038812fa8317f790a3307ea8af9011a409 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Tue, 5 May 2026 09:20:36 +0330 Subject: [PATCH] update enemies project --- .../org/project/entity/enemies/Enemy.java | 120 +++++++++++++++--- .../org/project/entity/enemies/Goblin.java | 44 +++++++ .../org/project/entity/enemies/Skeleton.java | 56 +++++++- .../org/project/entity/enemies/Vampire.java | 53 ++++++++ .../org/project/entity/players/Player.java | 2 +- .../java/org/project/item/weapons/Sword.java | 2 +- 6 files changed, 253 insertions(+), 24 deletions(-) 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/enemies/Enemy.java b/Java-Knight/src/main/java/org/project/entity/enemies/Enemy.java index 9bffd02..a082591 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 @@ -9,32 +9,18 @@ import org.project.item.weapons.Weapon; public abstract class Enemy implements Entity { Weapon weapon; private int hp; + private int maxHP; private int mp; + private int maxMP; + private boolean defending = false; + private double defendRate; public Enemy(int hp, int mp, Weapon weapon) { this.hp = hp; this.mp = mp; - this.weapon = weapon; } - - @Override - public void takeDamage(int damage) { - hp -= damage; - } - - public int getHp() { - return hp; - } - - public int getMp() { - return mp; - } - - public Weapon getWeapon() { - return weapon; - } - + //implement this in Main private boolean checkTargetAbility(Player target) { if (target instanceof Knight) { boolean check = target.getUsingSpecialAbility(); @@ -42,5 +28,101 @@ public abstract class Enemy implements Entity { } return false; } + + @Override + public void attack(Entity target, double multiplier) { + if (checkTargetAbility((Player) target)){ + System.out.println("target is using special ability"); + return; + } + double damage = multiplier * weapon.getDamage(); + if (target.isDefending()) { + target.takeDamage( (int) (damage * (1 - target.getDefendRate()))); + target.setDefending(false); + } + else { + target.takeDamage((int) damage); + } + } + + @Override + public void defend(){ + setDefending(true); + }; + + @Override + public void heal(int health) { + setHP(getHP() + health); + } + + @Override + public void takeDamage(int damage) { + setHP(getHP() - damage); + } + + @Override + public int getHP() { + return hp; + } + + @Override + public void setHP(int hp) { + this.hp = hp; + } + + @Override + public int getMaxHP() { + return maxHP; + } + + @Override + public void setMaxHP(int maxHP) { + this.maxHP = maxHP; + } + + @Override + public int getMP() { + return mp; + } + + @Override + public void setMP(int mp) { + this.mp = mp; + } + + @Override + public int getMaxMP() { + return maxMP; + } + + @Override + public void setMaxMP(int maxMP) { + this.maxMP = maxMP; + } + + @Override + public boolean isDefending() { + return defending; + } + + @Override + public void setDefending(boolean defending) { + this.defending = defending; + } + + @Override + public double getDefendRate() { + return defendRate; + } + + @Override + public void setDefendRate(double defendRate) { + this.defendRate = defendRate; + } + + @Override + public Weapon getWeapon() { + return weapon; + } } 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..6c17f7b --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,44 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Goblin extends Enemy{ + public Goblin(int hp, int mp, Weapon weapon) { + super(hp,mp,weapon); + setDefendRate(.5); + } + + @Override + public void attack(Entity target, double multiplier) { + if (getMP() > 5) { + super.attack(target,2); + setMP(getMP() - 5); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void defend() { + if (getMP() >= 5) { + super.defend(); + setMP(getMP() - 5); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void heal(int health) { + if (getMP() >= 6) { + super.heal(health); + setMP(getMP() - 6); + } + else { + System.out.println("Not enough MP"); + } + } +} 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..3ed8c8e 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,56 @@ 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.Weapon; + +public class Skeleton extends Enemy{ + + public Skeleton(int hp, int mp, Weapon weapon) { + super(hp,mp,weapon); + setDefendRate(.3); + } + + @Override + public void attack(Entity target, double multiplier) { + if (getMP() > 5) { + super.attack(target,1); + setMP(getMP() - 5); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void defend() { + if (getMP() >= 3) { + super.defend(); + setMP(getMP() - 3); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void heal(int health) { + if (getMP() >= 6) { + super.heal(health); + setMP(getMP() - 6); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void takeDamage(int damage) { + super.takeDamage(damage); + if (getHP() <= 0) { + setHP(getMaxHP() / 2); + } + } + + } 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..3d93030 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,53 @@ +package org.project.entity.enemies; + +import org.project.entity.Entity; +import org.project.item.weapons.Weapon; + +public class Vampire extends Enemy{ + + public Vampire(int hp, int mp, Weapon weapon) { + super(hp,mp,weapon); + setDefendRate(.7); + } + + @Override + public void attack(Entity target, double multiplier) { + if (getMP() > 5) { + super.attack(target,1.5); + setMP(getMP() - 5); + } + else { + System.out.println("Not enough MP"); + } + + double damage = weapon.getDamage() * multiplier; + if (target.isDefending()) { + heal( (int) (.3 * (damage * (1 - target.getDefendRate())))); + } + else { + heal( (int) (.3 * damage)); + } + } + + @Override + public void defend() { + if (getMP() >= 3) { + super.defend(); + setMP(getMP() - 3); + } + else { + System.out.println("Not enough MP"); + } + } + + @Override + public void heal(int health) { + if (getMP() >= 6) { + super.heal(health); + setMP(getMP() - 6); + } + else { + System.out.println("Not enough MP"); + } + } +} diff --git a/Java-Knight/src/main/java/org/project/entity/players/Player.java b/Java-Knight/src/main/java/org/project/entity/players/Player.java index f9d0699..fe45929 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Player.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Player.java @@ -30,7 +30,7 @@ public abstract class Player implements Entity, combatOptions { public void attack(Entity target, double multiplier) { double damage = multiplier * weapon.getDamage(); if (target.isDefending()) { - target.takeDamage( (int) (damage * (1 - getDefendRate()))); + target.takeDamage( (int) (damage * (1 - target.getDefendRate()))); target.setDefending(false); } else { diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java index 96226ee..c3ef325 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Sword.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Sword.java @@ -20,7 +20,7 @@ public class Sword { public void uniqueAbility(ArrayList targets) { abilityCharge += 2; for (Entity target : targets) { - target.takeDamage(getDamage()); + target.takeDamage(1); } } }