update enemies project

This commit is contained in:
2026-05-05 09:20:36 +03:30
parent b16f3a45a8
commit 3ea2250388
6 changed files with 253 additions and 24 deletions
@@ -9,32 +9,18 @@ import org.project.item.weapons.Weapon;
public abstract class Enemy implements Entity { public abstract class Enemy implements Entity {
Weapon weapon; Weapon weapon;
private int hp; private int hp;
private int maxHP;
private int mp; private int mp;
private int maxMP;
private boolean defending = false;
private double defendRate;
public Enemy(int hp, int mp, Weapon weapon) { public Enemy(int hp, int mp, Weapon weapon) {
this.hp = hp; this.hp = hp;
this.mp = mp; this.mp = mp;
this.weapon = weapon; this.weapon = weapon;
} }
//implement this in Main
@Override
public void takeDamage(int damage) {
hp -= damage;
}
public int getHp() {
return hp;
}
public int getMp() {
return mp;
}
public Weapon getWeapon() {
return weapon;
}
private boolean checkTargetAbility(Player target) { private boolean checkTargetAbility(Player target) {
if (target instanceof Knight) { if (target instanceof Knight) {
boolean check = target.getUsingSpecialAbility(); boolean check = target.getUsingSpecialAbility();
@@ -42,5 +28,101 @@ public abstract class Enemy implements Entity {
} }
return false; 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;
}
} }
@@ -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");
}
}
}
@@ -1,6 +1,56 @@
package org.project.entity.enemies; package org.project.entity.enemies;
// TODO: UPDATE IMPLEMENTATION
public class Skeleton { import org.project.entity.Entity;
// TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR 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);
}
}
} }
@@ -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");
}
}
}
@@ -30,7 +30,7 @@ public abstract class Player implements Entity, combatOptions {
public void attack(Entity target, double multiplier) { public void attack(Entity target, double multiplier) {
double damage = multiplier * weapon.getDamage(); double damage = multiplier * weapon.getDamage();
if (target.isDefending()) { if (target.isDefending()) {
target.takeDamage( (int) (damage * (1 - getDefendRate()))); target.takeDamage( (int) (damage * (1 - target.getDefendRate())));
target.setDefending(false); target.setDefending(false);
} }
else { else {
@@ -20,7 +20,7 @@ public class Sword {
public void uniqueAbility(ArrayList<Entity> targets) { public void uniqueAbility(ArrayList<Entity> targets) {
abilityCharge += 2; abilityCharge += 2;
for (Entity target : targets) { for (Entity target : targets) {
target.takeDamage(getDamage()); target.takeDamage(1);
} }
} }
} }