diff --git a/Java-Knight/src/main/java/org/project/Main.java b/Java-Knight/src/main/java/org/project/Main.java index 16bd9f8..aeb9ca5 100644 --- a/Java-Knight/src/main/java/org/project/Main.java +++ b/Java-Knight/src/main/java/org/project/Main.java @@ -20,15 +20,15 @@ import java.util.Scanner; public class Main { public static void main(String[] args) { - Weapon wp = new Sword(12, 5); + Weapon wp = new Sword(12, 15); ArrayList players = new ArrayList<>(); - players.add(new Assassin("Pia", 100, 100, wp, new KnightArmor(0, 1))); - players.add(new Knight("Khan", 100, 100, wp, new KnightArmor(50, 1))); - players.add(new Wizard("Daalou", 100, 100, wp, new KnightArmor(50, 1))); + players.add(new Assassin("Pia", 100, 100, wp, new KnightArmor(8, 1))); + players.add(new Knight("Khan", 100, 120, wp, new KnightArmor(12, 1))); + players.add(new Wizard("Daalou", 100, 90, wp, new KnightArmor(15, 1))); ArrayList enemies = new ArrayList<>(); - enemies.add(new Goblin(100, 100, wp)); - enemies.add(new Skeleton(50, 100, wp)); - enemies.add(new Vampire(90, 110, wp)); + enemies.add(new Goblin(80, 100, wp)); + enemies.add(new Skeleton(70, 100, wp)); + enemies.add(new Vampire(90, 90, wp)); ArrayList locations = new ArrayList<>(); locations.add(new Location("Jungle", enemies)); locations.add(new Location("China", new ArrayList<>(enemies.subList(0, 2)))); @@ -128,16 +128,26 @@ public class Main { System.out.println("choose your action:\n1.light attack 2.heavy attack 3.defend 4.heal 5.special ability"); choice = sc.nextInt(); switch (choice) { - case 1: player.lightAttack(enemy); - break; - case 2: player.heavyAttack(enemy); - break; - case 3: player.defend(); - break; - case 4: player.heal(10); - break; - case 5: player.specialAbility(enemy); - break; + case 1: + player.lightAttack(enemy); + break; + case 2: + player.heavyAttack(enemy); + if (player.isSuccessful()) break; + else {turn = 0; continue;} + case 3: + player.defend(); + if (player.isSuccessful()) break; + else {turn = 0; continue;} + case 4: + player.heal(10); + if (player.isSuccessful()) break; + else {turn = 0; continue;} + + case 5: + player.specialAbility(enemy); + if (player.isSuccessful()) break; + else {turn = 0; continue;} default: System.out.println("invalid choice"); } @@ -149,15 +159,30 @@ public class Main { } if (turn == 1) { System.out.println("-".repeat(30)); + if (player instanceof Assassin) { + if (player.getUsingSpecialAbility()){ + player.setUsingSpecialAbility(false); + turn = 0; + System.out.println(enemy.getClass().getSimpleName() + " skipped it's turn!"); + continue; + } + } System.out.println(enemy.getClass().getSimpleName() + "'s turn: "); turn = 0; choice = new Random().nextInt(3); switch (choice) { - case 0: enemy.attack(player); - break; - case 1: enemy.defend(); - break; - case 2: enemy.heal(10); + case 0: + enemy.attack(player); + if (player.isSuccessful()) break; + else {turn = 1; continue;} + case 1: + enemy.defend(); + if (player.isSuccessful()) break; + else {turn = 0; continue;} + case 2: + enemy.heal(10); + if (player.isSuccessful()) break; + else {turn = 0; continue;} } } System.out.println("[" + player.getClass().getSimpleName() + " - " + player.getHP() + "/" + player.getMaxHP() 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 2af6bd8..399463b 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 @@ -17,6 +17,7 @@ public abstract class Enemy implements Entity { private double attackMultiplier = 1; private boolean hasKey = false; private static boolean keyFound = false; + private boolean successful = true; public Enemy(int hp, int mp, Weapon weapon) { this.hp = hp; @@ -24,30 +25,13 @@ public abstract class Enemy implements Entity { this.mp = mp; this.maxMP = mp; this.weapon = weapon; - if (!keyFound) { - hasKey = Math.random() < .2; - } -// if (hasKey) { -// keyFound = true; -// } - } - //implement this in Main - private boolean checkTargetAbility(Player target) { - if (target instanceof Knight) { - boolean check = target.getUsingSpecialAbility(); - return check; - } - return false; + if (!keyFound) { hasKey = Math.random() < .2;} } @Override public void attack(Entity target) { if (getMP() >= weapon.getManaCost()) { System.out.println(this.getClass().getSimpleName() + ": attacking " + target.getClass().getSimpleName()); - if (checkTargetAbility((Player) target)) { - System.out.println("target is using special ability"); - return; - } double damage = getAttackMultiplier() * weapon.getDamage(); if (target.isDefending()) { target.takeDamage((int) (damage * (1 - target.getDefendRate()))); @@ -58,6 +42,7 @@ public abstract class Enemy implements Entity { setMP(getMP() - weapon.getManaCost()); } else System.out.println("not enough mana"); + setSuccessful(false); } @Override @@ -68,6 +53,7 @@ public abstract class Enemy implements Entity { @Override public void heal(int health) { + System.out.println(this.getClass().getSimpleName() + " is healing " + health + " HPs"); setHP(getHP() + health); } @@ -75,10 +61,14 @@ public abstract class Enemy implements Entity { public void takeDamage(int damage) { if (isDefending()) { setHP(getHP() - (int) ((1 - getDefendRate())) * damage); + System.out.println(this.getClass().getSimpleName() + " took " + (int) ((1 - getDefendRate())) * damage + " damages!"); } - setHP(getHP() - damage); - if (getHP() <= 0) { - setHP(0); + else { + System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!"); + setHP(getHP() - damage); + if (getHP() <= 0) { + setHP(0); + } } } @@ -169,5 +159,13 @@ public abstract class Enemy implements Entity { } return false; } + + public void setSuccessful (boolean successful) { + this.successful = successful; + } + + public boolean isSuccessful() { + return successful; + } } 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 index 6f3471d..5e00e92 100644 --- a/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java +++ b/Java-Knight/src/main/java/org/project/entity/enemies/Goblin.java @@ -11,30 +11,32 @@ public class Goblin extends Enemy{ @Override public void attack(Entity target) { - setAttackMultiplier(2); + setAttackMultiplier(1.8); super.attack(target); setAttackMultiplier(1); } @Override public void defend() { - if (getMP() >= 5) { + if (getMP() >= 20) { super.defend(); - setMP(getMP() - 5); + setMP(getMP() - 20); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void heal(int health) { - if (getMP() >= 6) { + if (getMP() >= 15) { super.heal(health); - setMP(getMP() - 6); + setMP(getMP() - 15); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } } 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 42082fe..9573b41 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 @@ -20,23 +20,25 @@ public class Skeleton extends Enemy{ @Override public void defend() { - if (getMP() >= 3) { + if (getMP() >= 8) { super.defend(); - setMP(getMP() - 3); + setMP(getMP() - 8); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void heal(int health) { - if (getMP() >= 6) { + if (getMP() >= 18) { super.heal(health); - setMP(getMP() - 6); + setMP(getMP() - 18); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } 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 969e1af..f490a7f 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 @@ -26,23 +26,25 @@ public class Vampire extends Enemy{ @Override public void defend() { - if (getMP() >= 3) { + if (getMP() >= 15) { super.defend(); - setMP(getMP() - 3); + setMP(getMP() - 15); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void heal(int health) { - if (getMP() >= 6) { + if (getMP() >= 12) { super.heal(health); - setMP(getMP() - 6); + setMP(getMP() - 12); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } } 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 616d290..16b7bad 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 @@ -22,54 +22,58 @@ public class Assassin extends Player { public void heavyAttack(Entity target) { super.heavyAttack(target); if (getUsingSpecialAbility()) { - setAttackMultiplier(3); + setAttackMultiplier(1.8); attack(target); setAttackMultiplier(1); setUsingSpecialAbility(false); } else if (getMP() >= weapon.getManaCost()) { - setAttackMultiplier(2.5); + setAttackMultiplier(1.4); attack(target); setAttackMultiplier(1); setMP(getMP() - weapon.getManaCost()); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void defend() { - if (getMP() >= 4) { + if (getMP() >= 12) { super.defend(); - setMP(getMP() - 4); + setMP(getMP() - 12); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void specialAbility(Entity target) { - if (getMP() >= 20) { + if (getMP() >= 25) { setUsingSpecialAbility(true); - System.out.println("your next heavy-attack will be free!"); - setMP(getMP() - 20); + System.out.println("Assasin using SpecialAbility"); + setMP(getMP() - 25); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void heal(int health) { - if (getMP() >= 5) { + if (getMP() >= 12) { super.heal(health); - setMP(getMP() - 5); + setMP(getMP() - 12); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } 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 895ebbf..8132b0a 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 @@ -22,49 +22,53 @@ public class Knight extends Player { public void heavyAttack(Entity target) { super.heavyAttack(target); if (getMP() >= weapon.getManaCost()) { - setAttackMultiplier(1.8); + setAttackMultiplier(1.5); attack(target); setAttackMultiplier(1); setMP(getMP() - weapon.getManaCost()); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void defend() { - if (getMP() >= 4) { + if (getMP() >= 16) { super.defend(); - setMP(getMP() - 4); + setMP(getMP() - 16); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void specialAbility(Entity target) { - if (getMP() >= 20) { + if (getMP() >= 30) { setUsingSpecialAbility(true); setAttackMultiplier(2); attack(target); setAttackMultiplier(1); - setMP(getMP() - 20); + setMP(getMP() - 30); } else { System.out.println("Not enough MP"); + setUsingSpecialAbility(false); } } @Override public void heal(int health) { - if (getMP() >= 5) { + if (getMP() >= 10) { super.heal(health); - setMP(getMP() - 5); + setMP(getMP() - 10); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } 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 37b4ff7..4915369 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 @@ -22,6 +22,7 @@ public abstract class Player implements Entity, combatOptions { private boolean hasGoblinKey = false; private boolean hasSkeletonKey = false; private boolean hasVampireKey = false; + private boolean successful = true; public Player(String name, int hp, int mp, Weapon weapon, Armor armor) { this.name = name; @@ -70,16 +71,19 @@ public abstract class Player implements Entity, combatOptions { int finalDamage = armor.getDefense() - damage; if (finalDamage < 0) { + System.out.println(this.getClass().getSimpleName() + " took " + -finalDamage + " damages!"); setHP(getHP() + finalDamage); armor.setDefense(0); } else { + System.out.println(this.getClass().getSimpleName() + " took " + damage + " damages!"); armor.setDefense(finalDamage); } } @Override public void heal(int health) { + System.out.println(this.getClass().getSimpleName() + " is healing " + health + " HPs"); setHP(getHP() + health); } @@ -185,4 +189,12 @@ public abstract class Player implements Entity, combatOptions { else { hasVampireKey = true; } } + public void setSuccessful (boolean successful) { + this.successful = successful; + } + + public boolean isSuccessful() { + return successful; + } + } 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 4cc6469..40bda0f 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 @@ -21,31 +21,33 @@ public class Wizard extends Player{ public void heavyAttack(Entity target) { super.heavyAttack(target); if (getMP() >= weapon.getManaCost()) { - setAttackMultiplier(1.6); + setAttackMultiplier(1.3); attack(target); setAttackMultiplier(1); setMP(getMP() - weapon.getManaCost()); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void defend() { - if (getMP() >= 4) { + if (getMP() >= 15) { super.defend(); - setMP(getMP() - 4); + setMP(getMP() - 15); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void specialAbility(Entity target) { if (getMP() >= 20) { - setAttackMultiplier(2); + setAttackMultiplier(1.6); attack(target); setAttackMultiplier(1); setMP(getMP() - 20); @@ -53,17 +55,19 @@ public class Wizard extends Player{ } else { System.out.println("Not enough MP"); + setSuccessful(false); } } @Override public void heal(int health) { - if (getMP() >= 5) { + if (getMP() >= 10) { super.heal(health); - setMP(getMP() - 5); + setMP(getMP() - 10); } else { System.out.println("Not enough MP"); + setSuccessful(false); } } } diff --git a/Java-Knight/target/classes/org/project/Main.class b/Java-Knight/target/classes/org/project/Main.class index 807cb27..1432a2f 100644 Binary files a/Java-Knight/target/classes/org/project/Main.class and b/Java-Knight/target/classes/org/project/Main.class differ diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class index c689751..0f52871 100644 Binary files a/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class and b/Java-Knight/target/classes/org/project/entity/enemies/Enemy.class differ diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class index b53b481..59d013d 100644 Binary files a/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class and b/Java-Knight/target/classes/org/project/entity/enemies/Goblin.class differ diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class index 0c217f3..86f4fe5 100644 Binary files a/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class and b/Java-Knight/target/classes/org/project/entity/enemies/Skeleton.class differ diff --git a/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class index ff6ec61..0d98e39 100644 Binary files a/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class and b/Java-Knight/target/classes/org/project/entity/enemies/Vampire.class differ diff --git a/Java-Knight/target/classes/org/project/entity/players/Assassin.class b/Java-Knight/target/classes/org/project/entity/players/Assassin.class index f72bf92..0e8687d 100644 Binary files a/Java-Knight/target/classes/org/project/entity/players/Assassin.class and b/Java-Knight/target/classes/org/project/entity/players/Assassin.class differ diff --git a/Java-Knight/target/classes/org/project/entity/players/Knight.class b/Java-Knight/target/classes/org/project/entity/players/Knight.class index 6c84e15..e22d5fc 100644 Binary files a/Java-Knight/target/classes/org/project/entity/players/Knight.class and b/Java-Knight/target/classes/org/project/entity/players/Knight.class differ diff --git a/Java-Knight/target/classes/org/project/entity/players/Player.class b/Java-Knight/target/classes/org/project/entity/players/Player.class index c2f96e2..0a6c610 100644 Binary files a/Java-Knight/target/classes/org/project/entity/players/Player.class and b/Java-Knight/target/classes/org/project/entity/players/Player.class differ diff --git a/Java-Knight/target/classes/org/project/entity/players/Wizard.class b/Java-Knight/target/classes/org/project/entity/players/Wizard.class index b022891..8487e46 100644 Binary files a/Java-Knight/target/classes/org/project/entity/players/Wizard.class and b/Java-Knight/target/classes/org/project/entity/players/Wizard.class differ