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 a358719..7976ea1 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,6 +1,7 @@ package org.project.entity.enemies; import org.project.entity.Entity; +import org.project.item.weapons.Sword; import org.project.item.weapons.Weapon; public abstract class Enemy implements Entity { @@ -9,11 +10,15 @@ public abstract class Enemy implements Entity { private int mp; private boolean isStunned = false; private int stunTurns = 0; + private String name; + private final int defendCost = 6; + private boolean isDefending = false; + private final int healCost = 12; - public Enemy(int hp, int mp, Weapon weapon) { + public Enemy(String name, int hp, int mp, Weapon weapon) { + this.name = name; this.hp = hp; this.mp = mp; - this.weapon = weapon; } @@ -39,6 +44,28 @@ public abstract class Enemy implements Entity { } } + @Override + public void fillMana(int mana) { + int oldMana = mp; + mp += mana; + + mp += mana; + if (mp > getMaxMP()) { + mp = getMaxMP(); + } + } + + @Override + public void defend() { + //checking mana + + //reducing mana + mp -= defendCost; + + //activating defense mode + isDefending = true; + } + public boolean isStunned() { return isStunned; } @@ -54,4 +81,17 @@ public abstract class Enemy implements Entity { public Weapon getWeapon() { return weapon; } + + public String getName(Entity target) { + if (target instanceof Skeleton) { + return "Skeleton"; + } + else if (target instanceof Goblin) { + return "Goblin"; + } + else if (target instanceof Vampire) { + return "Vampire"; + } + return "Dragon"; + } } 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..a11e517 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -0,0 +1,4 @@ +package org.project.entity.enemies; + +public class Goblin { +} 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..b01438f 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,11 @@ package org.project.entity.enemies; +import org.project.item.weapons.BoneDagger; + // TODO: UPDATE IMPLEMENTATION -public class Skeleton { +public class Skeleton extends Enemy { // TODO: DESIGN ENEMY AND IMPLEMENT THE CONSTRUCTOR + public Skeleton() { + super("Skeleton", 40, 25, new BoneDagger()); + } } 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..966c4b5 --- /dev/null +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -0,0 +1,4 @@ +package org.project.entity.enemies; + +public class Vampire { +} diff --git a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java index 9cf24fd..472bce5 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Assassin.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Assassin.java @@ -4,8 +4,86 @@ import org.project.entity.Entity; import org.project.item.armors.Armor; import org.project.item.weapons.Weapon; -public class Assassin extends Player implements Entity { +public class Assassin extends Player implements Entity, ICombatActions { public Assassin(String name, Weapon weapon, Armor armor) { super(name, 45, 60, weapon, armor); } -} + + @Override + public void specialAbility(Entity target) { + //Checking if the mana is enough of not + if (getMp() < 15) { + System.out.println("❌ Not enough mana for Devastating Spell!"); + return; + } + + //Consuming mana + setMp(getMp()-15); + + setInvisible(true); + setNextAttackCritical(true); + + System.out.println("💜 " + getName() + " turns INVISIBLE!"); + System.out.println("⚡ Next attack will be CRITICAL (2x damage)!"); + System.out.println("🛡️ Will dodge the next incoming attack completely!"); + System.out.println("💙 Mana left: " + getMp()); + } + + public void lightAttack(Entity target) { + int damage = 10; + + //Critical Action (if enabled) + if (isNextAttackCritical()) { + damage *= 2; + System.out.println("⚡ CRITICAL HIT! Damage doubled to " + damage + "!"); + setNextAttackCritical(false); + } + + target.takeDamage(damage); + System.out.println("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); + } + + @Override + public void heavyAttack(Entity target) { + if (getMp() < 8) { + System.out.println("❌ Not enough mana for Heavy Attack!"); + return; + } + setMp(getMp() - 8); + int damage = 20; + + //Critical Action (if enabled) + if (isNextAttackCritical()) { + damage *= 2; + System.out.println("⚡ CRITICAL HIT! Damage doubled to " + damage + "!"); + setNextAttackCritical(false); + } + + target.takeDamage(damage); + System.out.println("💥 " + getName() + " used Heavy Attack! Dealt " + damage + " damage."); + } + + @Override + public void defend() { + if (getMp() < 6) { + System.out.println("❌ Not enough mana to defend!"); + return; + } + setMp(getMp() - 6); + setDefending(true); + System.out.println("🛡️ " + getName() + " is defending! Next attack will be halved."); + } + + @Override + public void heal() { + if (getMp() < 12) { + System.out.println("❌ Not enough mana to heal!"); + return; + } + setMp(getMp() - 12); + int healAmount = 20; + setHp(getHp() + healAmount); + if (getHp() > getMaxHP()) setHp(getMaxHP()); + System.out.println("💚 " + getName() + " healed " + healAmount + " HP!"); + } +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java index 33df297..ca94831 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java +++ b/Java-Knight/src/main/java/org/project/entity/players/ICombatActions.java @@ -15,4 +15,4 @@ public interface ICombatActions { void heal(); void specialAbility(Entity target); -} +} \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/entity/players/Knight.java b/Java-Knight/src/main/java/org/project/entity/players/Knight.java index e118559..98f470f 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Knight.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Knight.java @@ -19,7 +19,7 @@ public class Knight extends Player implements ICombatActions { public void specialAbility(Entity target) { //Checking if the mana is enough of not if (getMp() < 15) { - System.out.println("Mana is not enough for Shield Bash!"); + System.out.println("❌ Mana is not enough for Shield Bash!"); return; } 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 1c969d5..05340fe 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 @@ -18,6 +18,8 @@ public abstract class Player implements Entity { private final int defendCost = 6; private boolean isDefending = false; private final int healCost = 12; + private boolean isInvisible = false; + private boolean nextAttackCritical = false; public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { this.name = name; @@ -144,6 +146,14 @@ public abstract class Player implements Entity { return isDefending; } + public boolean isInvisible() { return isInvisible; } + + public boolean isNextAttackCritical() { return nextAttackCritical; } + + public void setInvisible(boolean invisible) { this.isInvisible = invisible; } + + public void setNextAttackCritical(boolean critical) { this.nextAttackCritical = critical; } + public void setHp(int hp) { this.hp = hp; } diff --git a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java index 62c2a9c..e97c60a 100644 --- a/Java-Knight/src/main/java/org/project/entity/players/Wizard.java +++ b/Java-Knight/src/main/java/org/project/entity/players/Wizard.java @@ -2,10 +2,79 @@ package org.project.entity.players; import org.project.entity.Entity; import org.project.item.armors.Armor; +import org.project.item.weapons.Sword; +import org.project.item.weapons.Wand; import org.project.item.weapons.Weapon; -public class Wizard extends Player implements Entity { +public class Wizard extends Player implements Entity,ICombatActions { public Wizard (String name, Weapon weapon, Armor armor) { - super(name, 60, 45, weapon, armor); + super(name, 60, 45, new Wand(), armor); + } + + @Override + public void specialAbility(Entity target) { + //Checking if the mana is enough of not + if (getMp() < 15) { + System.out.println("❌ Not enough mana for Devastating Spell!"); + return; + } + + //Consuming mana + setMp(getMp()-15); + + target.takeDamage(30); + System.out.println("🔮 " + target.getName() + " took " + + 30 + " damage from Devastating Spell!"); + + int newHp = getHp() + 10; + if (newHp > getMaxHP()) newHp = getMaxHP(); + setHp(newHp); + + System.out.println("💚 " + getName() + " healed " + 10 + " HP! (Now: " + + getHp() + "/" + getMaxHP() + ")"); + System.out.println("🔮 " + getName() + " casts DEVASTATING SPELL!"); + System.out.println("💙 Mana left: " + getMp()); + } + + public void lightAttack(Entity target) { + int damage = 10; + target.takeDamage(damage); + System.out.println("⚔️ " + getName() + " used Light Attack! Dealt " + damage + " damage."); + } + + @Override + public void heavyAttack(Entity target) { + if (getMp() < 8) { + System.out.println("❌ Not enough mana for Heavy Attack!"); + return; + } + setMp(getMp() - 8); + int damage = 20; + target.takeDamage(damage); + System.out.println("💥 " + getName() + " used Heavy Attack! Dealt " + damage + " damage."); + } + + @Override + public void defend() { + if (getMp() < 6) { + System.out.println("❌ Not enough mana to defend!"); + return; + } + setMp(getMp() - 6); + setDefending(true); + System.out.println("🛡️ " + getName() + " is defending! Next attack will be halved."); + } + + @Override + public void heal() { + if (getMp() < 12) { + System.out.println("❌ Not enough mana to heal!"); + return; + } + setMp(getMp() - 12); + int healAmount = 20; + setHp(getHp() + healAmount); + if (getHp() > getMaxHP()) setHp(getMaxHP()); + System.out.println("💚 " + getName() + " healed " + healAmount + " HP!"); } } diff --git a/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java b/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java index 90894f1..ea41415 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/BoneDagger.java @@ -6,7 +6,7 @@ import org.project.item.Item; public class BoneDagger extends Weapon implements Item { int abilityCharge; - public BoneDagger(int damage, int manaCost) { - super(damage, manaCost); + public BoneDagger() { + super(10, 5); } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java index 599c53a..8596d78 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Dagger.java @@ -6,7 +6,7 @@ import org.project.item.Item; public class Dagger extends Weapon implements Item { int abilityCharge; - public Dagger(int damage, int manaCost) { - super(damage, manaCost); + public Dagger() { + super(15, 10); } } \ No newline at end of file diff --git a/Java-Knight/src/main/java/org/project/item/weapons/Wand.java b/Java-Knight/src/main/java/org/project/item/weapons/Wand.java index 9374203..317deec 100644 --- a/Java-Knight/src/main/java/org/project/item/weapons/Wand.java +++ b/Java-Knight/src/main/java/org/project/item/weapons/Wand.java @@ -6,7 +6,7 @@ import org.project.item.Item; public class Wand extends Weapon implements Item { int abilityCharge; - public Wand(int damage, int manaCost) { - super(damage, manaCost); + public Wand() { + super(12, 6); } } \ No newline at end of file