From 24175b68bf61ef53fd709669818257b17c05b297 Mon Sep 17 00:00:00 2001 From: HadiSharifi Date: Mon, 11 May 2026 12:04:39 +0330 Subject: [PATCH] fix bugs --- .../src/main/java/org/project/Game.java | 38 +++++++++---------- .../org/project/entity/enemies/Enemy.java | 17 +++------ .../org/project/item/armors/WizardArmor.java | 2 +- 3 files changed, 24 insertions(+), 33 deletions(-) diff --git a/Java-Knight/src/main/java/org/project/Game.java b/Java-Knight/src/main/java/org/project/Game.java index 5bec1af..cfb05c0 100644 --- a/Java-Knight/src/main/java/org/project/Game.java +++ b/Java-Knight/src/main/java/org/project/Game.java @@ -18,7 +18,7 @@ public class Game { private final ArrayList locations; private final Scanner sc; private Player player; - private final ArrayList> collectedKeyTypes = new ArrayList<>(); + private final List collectedKeyTypes = new ArrayList<>(); public Game() { sc = new Scanner(System.in); @@ -72,7 +72,7 @@ public class Game { private boolean canChallengeDragon() { for (Enemy enemy : regularEnemies) { - if (!collectedKeyTypes.contains(enemy.getClass())) return false; + if (!player.hasKey(enemy)) return false; } return true; } @@ -103,19 +103,14 @@ public class Game { private void displayKeys() { System.out.println("=".repeat(30)); System.out.print("Keys collected: "); - List collected = new ArrayList<>(); - List missing = new ArrayList<>(); for (Enemy enemy : regularEnemies) { - if (collectedKeyTypes.contains(enemy.getClass())) collected.add(enemy.getClass().getSimpleName()); - else missing.add(enemy.getClass().getSimpleName()); + if (player.hasKey(enemy) && !collectedKeyTypes.contains(enemy.getClass().getSimpleName())) + collectedKeyTypes.add(enemy.getClass().getSimpleName()); } - if (collected.isEmpty()) { + if (collectedKeyTypes.isEmpty()) { System.out.println("none"); } else { - System.out.println(String.join(", ", collected)); - } - if (!missing.isEmpty()) { - System.out.println("Still needed: " + String.join(", ", missing)); + System.out.println(String.join(", ", collectedKeyTypes)); } System.out.println("=".repeat(30)); } @@ -142,8 +137,17 @@ public class Game { private Enemy chooseEnemy(Location location) { int index = new Random().nextInt(location.getEnemies().size()); Enemy enemy = location.getEnemies().get(index); - enemy.setHP(enemy.getMaxHP()); - enemy.setMP(enemy.getMaxMP()); + + if (enemy instanceof Vampire) { + enemy = new Vampire(); + } + if (enemy instanceof Goblin) { + enemy = new Goblin(); + } + if (enemy instanceof Skeleton) { + enemy = new Skeleton(); + } + System.out.println("The enemy is: " + enemy.getClass().getSimpleName()); return enemy; } @@ -191,15 +195,9 @@ public class Game { player.setHP(player.getMaxHP()); player.setMP(player.getMaxMP()); - if (!(enemy instanceof Dragon)) { - Class type = enemy.getClass(); - if (!collectedKeyTypes.contains(type)) { - collectedKeyTypes.add(type); + if (!(enemy instanceof Dragon) && enemy.dropKey()) { System.out.println(enemy.getClass().getSimpleName() + "'s key dropped!"); player.achieveKey(enemy); - } else { - System.out.println("You already have " + enemy.getClass().getSimpleName() + "'s key."); - } } } } 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 b4dd914..352d996 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 @@ -30,22 +30,15 @@ public abstract class Enemy implements Entity { @Override public void attack(Entity target) { setSuccessfulAction(true); - if (getMP() >= weapon.getManaCost()) { - System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName()); - double damage = getAttackMultiplier() * weapon.getDamage(); - if(((Sword)(weapon)).charge()) damage *= 1.4; - if (target.isDefending()) { + System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName()); + double damage = getAttackMultiplier() * weapon.getDamage(); + if (((Sword)(weapon)).charge()) damage *= 1.4; + if (target.isDefending()) { target.takeDamage((int) (damage * (1 - target.getDefendRate())),this); target.setDefending(false); - } else { + }else { target.takeDamage((int) damage,this); } - setMP(getMP() - weapon.getManaCost()); - } - else { - System.out.println("Not Enough MP for Attack"); - setSuccessfulAction(false); - } } @Override diff --git a/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java b/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java index 4a0f3c5..f3d176b 100644 --- a/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java +++ b/Java-Knight/src/main/java/org/project/item/armors/WizardArmor.java @@ -8,7 +8,7 @@ public class WizardArmor extends Armor { public int absorbDamage(int damage, int mp) { - int reduction = mp / 10; // every 10 MP absorbs 1 damage + int reduction = mp / 10; return Math.max(0, damage - reduction); }