This commit is contained in:
2026-05-11 12:04:39 +03:30
parent 01b8c225d9
commit 24175b68bf
3 changed files with 24 additions and 33 deletions
+18 -20
View File
@@ -18,7 +18,7 @@ public class Game {
private final ArrayList<Location> locations; private final ArrayList<Location> locations;
private final Scanner sc; private final Scanner sc;
private Player player; private Player player;
private final ArrayList<Class<? extends Enemy>> collectedKeyTypes = new ArrayList<>(); private final List<String> collectedKeyTypes = new ArrayList<>();
public Game() { public Game() {
sc = new Scanner(System.in); sc = new Scanner(System.in);
@@ -72,7 +72,7 @@ public class Game {
private boolean canChallengeDragon() { private boolean canChallengeDragon() {
for (Enemy enemy : regularEnemies) { for (Enemy enemy : regularEnemies) {
if (!collectedKeyTypes.contains(enemy.getClass())) return false; if (!player.hasKey(enemy)) return false;
} }
return true; return true;
} }
@@ -103,19 +103,14 @@ public class Game {
private void displayKeys() { private void displayKeys() {
System.out.println("=".repeat(30)); System.out.println("=".repeat(30));
System.out.print("Keys collected: "); System.out.print("Keys collected: ");
List<String> collected = new ArrayList<>();
List<String> missing = new ArrayList<>();
for (Enemy enemy : regularEnemies) { for (Enemy enemy : regularEnemies) {
if (collectedKeyTypes.contains(enemy.getClass())) collected.add(enemy.getClass().getSimpleName()); if (player.hasKey(enemy) && !collectedKeyTypes.contains(enemy.getClass().getSimpleName()))
else missing.add(enemy.getClass().getSimpleName()); collectedKeyTypes.add(enemy.getClass().getSimpleName());
} }
if (collected.isEmpty()) { if (collectedKeyTypes.isEmpty()) {
System.out.println("none"); System.out.println("none");
} else { } else {
System.out.println(String.join(", ", collected)); System.out.println(String.join(", ", collectedKeyTypes));
}
if (!missing.isEmpty()) {
System.out.println("Still needed: " + String.join(", ", missing));
} }
System.out.println("=".repeat(30)); System.out.println("=".repeat(30));
} }
@@ -142,8 +137,17 @@ public class Game {
private Enemy chooseEnemy(Location location) { private Enemy chooseEnemy(Location location) {
int index = new Random().nextInt(location.getEnemies().size()); int index = new Random().nextInt(location.getEnemies().size());
Enemy enemy = location.getEnemies().get(index); 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()); System.out.println("The enemy is: " + enemy.getClass().getSimpleName());
return enemy; return enemy;
} }
@@ -191,15 +195,9 @@ public class Game {
player.setHP(player.getMaxHP()); player.setHP(player.getMaxHP());
player.setMP(player.getMaxMP()); player.setMP(player.getMaxMP());
if (!(enemy instanceof Dragon)) { if (!(enemy instanceof Dragon) && enemy.dropKey()) {
Class<? extends Enemy> type = enemy.getClass();
if (!collectedKeyTypes.contains(type)) {
collectedKeyTypes.add(type);
System.out.println(enemy.getClass().getSimpleName() + "'s key dropped!"); System.out.println(enemy.getClass().getSimpleName() + "'s key dropped!");
player.achieveKey(enemy); player.achieveKey(enemy);
} else {
System.out.println("You already have " + enemy.getClass().getSimpleName() + "'s key.");
}
} }
} }
} }
@@ -30,22 +30,15 @@ public abstract class Enemy implements Entity {
@Override @Override
public void attack(Entity target) { public void attack(Entity target) {
setSuccessfulAction(true); setSuccessfulAction(true);
if (getMP() >= weapon.getManaCost()) { System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName());
System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName()); double damage = getAttackMultiplier() * weapon.getDamage();
double damage = getAttackMultiplier() * weapon.getDamage(); if (((Sword)(weapon)).charge()) damage *= 1.4;
if(((Sword)(weapon)).charge()) damage *= 1.4; if (target.isDefending()) {
if (target.isDefending()) {
target.takeDamage((int) (damage * (1 - target.getDefendRate())),this); target.takeDamage((int) (damage * (1 - target.getDefendRate())),this);
target.setDefending(false); target.setDefending(false);
} else { }else {
target.takeDamage((int) damage,this); target.takeDamage((int) damage,this);
} }
setMP(getMP() - weapon.getManaCost());
}
else {
System.out.println("Not Enough MP for Attack");
setSuccessfulAction(false);
}
} }
@Override @Override
@@ -8,7 +8,7 @@ public class WizardArmor extends Armor {
public int absorbDamage(int damage, int mp) { 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); return Math.max(0, damage - reduction);
} }