fix bugs
This commit is contained in:
@@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user