diff --git a/Java-Knight/src/main/java/org/project/Game.java b/Java-Knight/src/main/java/org/project/Game.java index dcbc704..5bec1af 100644 --- a/Java-Knight/src/main/java/org/project/Game.java +++ b/Java-Knight/src/main/java/org/project/Game.java @@ -169,7 +169,6 @@ public class Game { System.out.println("-".repeat(30)); if (player instanceof Assassin && player.getUsingSpecialAbility()) { - player.setUsingSpecialAbility(false); System.out.println(enemy.getClass().getSimpleName() + " skipped its turn!"); turn = 0; continue; @@ -208,22 +207,20 @@ public class Game { private boolean handlePlayerAction(int choice, Enemy enemy) { switch (choice) { case 1 -> { player.lightAttack(enemy); return true; } - case 2 -> { player.heavyAttack(enemy); if (player.isSuccessfulAction()) return true; } - case 3 -> { player.defend(); if (player.isSuccessfulAction()) return true; } - case 4 -> { player.heal(10); if (player.isSuccessfulAction()) return true; } - case 5 -> { player.specialAbility(enemy); if (player.isSuccessfulAction()) return true; } + case 2 -> { player.heavyAttack(enemy); return player.isSuccessfulAction();} + case 3 -> { player.defend(); return player.isSuccessfulAction(); } + case 4 -> { player.heal(10); return player.isSuccessfulAction(); } + case 5 -> { player.specialAbility(enemy); return player.isSuccessfulAction(); } case 6 -> { player.getFlask().use(player); return true; } default -> { System.out.println("Invalid choice."); return false; } } - System.out.println("Not enough mana! Choose another action (1. Light attack is always free)."); - return false; } private boolean handleEnemyAction(Enemy enemy) { int choice = new Random().nextInt(3); switch (choice) { - case 1 -> { enemy.defend(); if (enemy.isSuccessfulAction()) return true; } - case 2 -> { enemy.heal(10); if (enemy.isSuccessfulAction()) return true; } + case 1 -> { enemy.defend(); return enemy.isSuccessfulAction(); } + case 2 -> { enemy.heal(10); return enemy.isSuccessfulAction(); } } enemy.attack(player); @@ -233,9 +230,9 @@ public class Game { private void printCombatStatus(Enemy enemy) { System.out.println("[" + player.getClass().getSimpleName() + " - " + player.getHP() + "/" + player.getMaxHP() + - " HP | " + player.getMP() + "/" + player.getMaxMP() + "]"); + " HP | " + player.getMP() + "/" + player.getMaxMP() + " MP]"); System.out.println("[" + enemy.getClass().getSimpleName() + " - " + enemy.getHP() + "/" + enemy.getMaxHP() + - " HP | " + enemy.getMP() + "/" + enemy.getMaxMP() + "]"); + " HP | " + enemy.getMP() + "/" + enemy.getMaxMP() + "MP]"); } 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 index 2d70780..c7b2409 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Dragon.java @@ -30,6 +30,7 @@ public class Dragon extends Enemy { } target.takeDamage((int) damage); setMP(getMP() - FIRE_BREATH_MP_COST); + return; } if (target.isDefending()) { @@ -43,7 +44,7 @@ public class Dragon extends Enemy { @Override public void defend() { System.out.println("Dragon roars and ignores the chance to defend!"); - setSuccessfulAction(false); + setSuccessfulAction(true); } @Override 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 cbdccce..c177c90 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 @@ -48,6 +48,7 @@ public class Skeleton extends Enemy{ if (getHP() <= 0 && !incarnation) { setHP(getMaxHP() / 2); incarnation = true; + System.out.println("The Skeleton shatters... but dark magic pulls its bones back together!"); } } 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 index 66827ce..8be755d 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Vampire.java @@ -16,12 +16,11 @@ public class Vampire extends Enemy{ super.attack(target); double damage = weapon.getDamage() * getAttackMultiplier(); setAttackMultiplier(1); - if (target.isDefending()) { - super.heal( (int) (.3 * (damage * (1 - target.getDefendRate())))); - } - else { - super.heal( (int) (.3 * damage)); - } + int lifeSteal = target.isDefending() + ? (int)(.3 * (damage * (1 - target.getDefendRate()))) + : (int)(.3 * damage); + System.out.println("Vampire drains " + lifeSteal + " HP from " + target.getClass().getSimpleName() + "!"); + setHP(getHP() + lifeSteal); } @Override 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 0624d4a..9a5d3e2 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 @@ -27,8 +27,8 @@ public class Assassin extends Player { @Override public void heavyAttack(Entity target) { - super.heavyAttack(target); if (getUsingSpecialAbility()) { + System.out.println("Assassin strikes from the shadows with lethal precision! (1.8x)"); setAttackMultiplier(1.8); attack(target); setAttackMultiplier(1); @@ -36,6 +36,7 @@ public class Assassin extends Player { } else if (getMP() >= weapon.getManaCost()) { + System.out.println("Assassin delivers a heavy blow! (1.4x)"); setAttackMultiplier(1.4); attack(target); setAttackMultiplier(1); @@ -63,7 +64,7 @@ public class Assassin extends Player { public void specialAbility(Entity target) { if (getMP() >= 25) { setUsingSpecialAbility(true); - System.out.println("Assasin using SpecialAbility"); + System.out.println("Assassin melts into the shadows... next heavy attack will be devastating!"); setMP(getMP() - 25); } else { @@ -87,7 +88,7 @@ public class Assassin extends Player { @Override public void takeDamage(int damage) { if (getUsingSpecialAbility()) { - System.out.println("player using special ability"); + System.out.println("Assassin vanishes into the shadows — attack missed!"); } else { damage = ((AssassinArmor) (getArmor())).reduceDamage(damage, this); super.takeDamage(damage); 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 8ae4141..ce36785 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 @@ -27,7 +27,6 @@ public class Knight extends Player { @Override public void heavyAttack(Entity target) { - super.heavyAttack(target); if (getMP() >= weapon.getManaCost()) { setAttackMultiplier(1.5); attack(target); @@ -57,6 +56,7 @@ public class Knight extends Player { if (getMP() >= 30) { setUsingSpecialAbility(true); setAttackMultiplier(2); + System.out.println("Knight channels all strength into a devastating strike! (2x)"); attack(target); setAttackMultiplier(1); setMP(getMP() - 30); @@ -84,6 +84,7 @@ public class Knight extends Player { super.takeDamage(damage); if (!getArmor().checkBrake()) { int reflected = ((KnightArmor) armor).getReflectedDamage(damage); + System.out.println("Knight's armor reflects " + reflected + " damage back at " + attacker.getClass().getSimpleName() + "!"); attacker.takeDamage(reflected); } } 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 149c265..75f4d40 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 @@ -44,6 +44,8 @@ public abstract class Player implements Entity, CombatOptions { public void attack(Entity target) { setSuccessfulAction(true); double damage = getAttackMultiplier() * weapon.getDamage(); + System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName() + + " for " + damage + " damages!"); if (target.isDefending()) { target.takeDamage( (int) (damage * (1 - target.getDefendRate()))); target.setDefending(false); @@ -59,9 +61,7 @@ public abstract class Player implements Entity, CombatOptions { } @Override - public void heavyAttack(Entity target) { - System.out.println(this.getClass().getSimpleName() + " heavy attacking"); - } + public abstract void heavyAttack(Entity target); @Override public void defend(){ @@ -79,12 +79,13 @@ public abstract class Player implements Entity, CombatOptions { int finalDamage = armor.getDefense() - damage; if (finalDamage < 0) { - System.out.println(this.getClass().getSimpleName() + " took " + -finalDamage + " damages!"); + System.out.println(getClass().getSimpleName() + " took " + -finalDamage + " damage! (armor absorbed " + armor.getDefense() + ")"); setHP(getHP() + finalDamage); armor.setDefense(0); + System.out.println("Your armor has been destroyed!"); } else { - System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!"); + System.out.println(getClass().getSimpleName() + " took 0 damage! (fully absorbed by armor, " + finalDamage + " durability remaining)"); armor.setDefense(finalDamage); } } 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 95d2629..90e7e55 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 @@ -27,7 +27,6 @@ public class Wizard extends Player{ @Override public void heavyAttack(Entity target) { - super.heavyAttack(target); if (getMP() >= weapon.getManaCost()) { setAttackMultiplier(1.3); attack(target); @@ -56,10 +55,12 @@ public class Wizard extends Player{ public void specialAbility(Entity target) { if (getMP() >= 20) { setAttackMultiplier(1.6); + System.out.println("Wizard channels arcane energy — empowered shot fired! (1.6x)"); attack(target); setAttackMultiplier(1); setMP(getMP() - 20); setHP(getHP() + 10); + System.out.println("Wizard absorbs residual magic — restored 10 HP!"); } else { System.out.println("Not enough MP"); @@ -83,6 +84,8 @@ public class Wizard extends Player{ public void takeDamage(int damage) { if (!getArmor().checkBrake()) { int finalDamage = ((WizardArmor) armor).absorbDamage(damage, getMP()); + int absorbed = damage - finalDamage; + if (absorbed > 0) System.out.println("Wizard's mana field absorbs " + absorbed + " damage!"); super.takeDamage(finalDamage); } else { diff --git a/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java b/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java index c4fa1fe..5ed211a 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/AssassinArmor.java @@ -19,6 +19,8 @@ public class AssassinArmor extends Armor { public int reduceDamage(int damage, Player player) { if (isLowHP(player)) { + + System.out.println("Assassin's survival instincts kick in — damage halved!"); return damage / 2; } return damage; diff --git a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java index c4cd4a2..658221f 100644 --- a/Java-Knight/src/main/java/org/project/item/consumables/Flask.java +++ b/Java-Knight/src/main/java/org/project/item/consumables/Flask.java @@ -1,6 +1,7 @@ package org.project.item.consumables; import org.project.entity.Entity; +import org.project.entity.players.Player; public class Flask extends Consumable { private int healAmount; @@ -22,8 +23,10 @@ public class Flask extends Consumable { System.out.println(target.getClass().getSimpleName() + " restored " + healAmount + " MP!"); } else { - target.heal(healAmount); + target.setHP(target.getHP() + healAmount); + System.out.println(target.getClass().getSimpleName() + " healed " + healAmount + " HP!"); } consume(); + System.out.println("(" + getQuantity() + " charges remaining)"); } } \ No newline at end of file