diff --git a/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java b/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java index 4037738..3430fae 100644 --- a/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java +++ b/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java @@ -140,7 +140,10 @@ public class Battle { turnBelongTo.setImageEffect("attack"); if (windowOfBattle.getHitSound() != null) soundManager.playSound(windowOfBattle.getHitSound(), -10.0f); windowOfBattle.writeToOutput(turnBelongTo.getName() + " deals " + turnBelongTo.getLevel() * turnBelongTo.getStrength() + " damage to " + e.getName()+"!"); - if (e.health <= 0) e.getKilled(this); + if (e.health <= 0) { + if (e.getImage()!= null) e.getKilled(this); + else enemies.remove(e); + } turnOrder.add(turnBelongTo); playerAttack = false; @@ -178,7 +181,10 @@ public class Battle { if (windowOfBattle.getHitSound() != null) soundManager.playSound(windowOfBattle.getHitSound(), -10.0f); windowOfBattle.writeToOutput(turnBelongTo.getName() + " deals " + turnBelongTo.getLevel() + " damage to " + e.getName()+"!"); - if (e.health <= 0) e.getKilled(this); + if (e.health <= 0) { + if (e.getImage()!= null) e.getKilled(this); + else heroes.remove(e); + } turnOrder.add(turnBelongTo); delay = 2; diff --git a/src/main/java/ruscz/game/gameOfProd/Battle/BattlePerson.java b/src/main/java/ruscz/game/gameOfProd/Battle/BattlePerson.java index 6ae750d..b603e06 100644 --- a/src/main/java/ruscz/game/gameOfProd/Battle/BattlePerson.java +++ b/src/main/java/ruscz/game/gameOfProd/Battle/BattlePerson.java @@ -48,7 +48,6 @@ public abstract class BattlePerson { } private void effectCoords(String effect) { - System.out.println(effect); if (effect.equals("hover")) { final boolean[] isGoingUp = {true}; effectTimer = new Timer(100, actionEvent -> { @@ -206,7 +205,7 @@ public abstract class BattlePerson { return image; } - public abstract void heal(int heal); + public abstract int heal(int heal); public abstract void attack(BattlePerson enemy); diff --git a/src/main/java/ruscz/game/gameOfProd/Battle/Enemy.java b/src/main/java/ruscz/game/gameOfProd/Battle/Enemy.java index f2d8e91..0cff21f 100644 --- a/src/main/java/ruscz/game/gameOfProd/Battle/Enemy.java +++ b/src/main/java/ruscz/game/gameOfProd/Battle/Enemy.java @@ -18,8 +18,9 @@ public class Enemy extends BattlePerson { } @Override - public void heal(int heal) { + public int heal(int heal) { health += heal; + return heal; } @Override diff --git a/src/main/java/ruscz/game/gameOfProd/Battle/Hero.java b/src/main/java/ruscz/game/gameOfProd/Battle/Hero.java index 751ba56..54372cc 100644 --- a/src/main/java/ruscz/game/gameOfProd/Battle/Hero.java +++ b/src/main/java/ruscz/game/gameOfProd/Battle/Hero.java @@ -20,11 +20,13 @@ public class Hero extends BattlePerson { } @Override - public void heal(int heal) { + public int heal(int heal) { + int h = health; if (health + heal < maxHealth) health += heal; else health = maxHealth; stopEffectTimer(); getHealed(); + return health - h; } @Override diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java index 164bdd2..c0fd8e1 100644 --- a/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java @@ -47,7 +47,7 @@ public class ItemsInventory extends JPanel { for (Component c: items.getComponents()) items.remove(c); - System.out.println(InventoryManager.getInventory()); + items.setLayout(new GridLayout(InventoryManager.getInventory().size(), 1)); for (Item item: InventoryManager.getInventory()){ JPanel jPanel = new JPanel(); @@ -58,27 +58,29 @@ public class ItemsInventory extends JPanel { jPanel.add(itemPanel); jPanel.add(new JLabel(item.getName())); - jPanel.add(new JLabel(String.valueOf(item.getMultiplicity()))); + jPanel.add(new JLabel(" " + item.getMultiplicity() + "x")); jPanel.add(new JLabel(String.valueOf(item.getItemAction()))); + JButton use = windowOfBattle.style(new JButton("Use")); if (item.getItemAction().equals(ItemAction.HEAL)){ - JButton use = windowOfBattle.style(new JButton("Use")); use.addActionListener(e -> { setVisible(false); - windowOfBattle.getBattle().getHeroes().getFirst().heal(100); windowOfBattle.getMenuOfActions().setVisible(false); windowOfBattle.getEnemyDescription().setVisible(false); windowOfBattle.getSituationText().setVisible(true); - windowOfBattle.writeToOutput(windowOfBattle.getBattle().getHeroes().getFirst().getName() + " heals 100 HP"); + windowOfBattle.writeToOutput(windowOfBattle.getBattle().getHeroes().getFirst().getName() + " heals " + + windowOfBattle.getBattle().getHeroes().getFirst().heal(100) + " HP"); InventoryManager.removeItem(item, 1); windowOfBattle.getBattle().addToTurnOrder(windowOfBattle.getBattle().getHeroes().getFirst()); windowOfBattle.getBattle().setTurnBelongTo(null); windowOfBattle.getBattle().setDelay(2); windowOfBattle.getBattle().getTimer().start(); }); - jPanel.add(use); } - + else { + use.setEnabled(false); + } + jPanel.add(use); items.add(jPanel); } diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java index 4545f47..eadf03a 100644 --- a/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java @@ -4,6 +4,7 @@ import ruscz.game.gameOfProd.Windows.WindowOfBattle; import javax.swing.*; import java.awt.*; +import java.util.Random; import static ruscz.game.gameOfProd.Windows.WindowOfBattle.*; @@ -61,7 +62,30 @@ public class MenuOfActions extends JPanel { inventory.setEnabled(false); escape.setEnabled(false); - window.getBattle().endBattle(true); + if (window.isRunAwayPossible()) { + Random r = new Random(); + if (r.nextBoolean()) window.getBattle().endBattle(true); + else { + window.getMenuOfActions().setVisible(false); + window.getEnemyDescription().setVisible(false); + window.getSituationText().setVisible(true); + window.writeToOutput("Runaway was not successful."); + window.getBattle().addToTurnOrder(window.getBattle().getHeroes().getFirst()); + window.getBattle().setTurnBelongTo(null); + window.getBattle().setDelay(2); + window.getBattle().getTimer().start(); + } + } + else { + window.getMenuOfActions().setVisible(false); + window.getEnemyDescription().setVisible(false); + window.getSituationText().setVisible(true); + window.writeToOutput("Runaway is not possible."); + window.getBattle().addToTurnOrder(window.getBattle().getHeroes().getFirst()); + window.getBattle().setTurnBelongTo(null); + window.getBattle().setDelay(2); + window.getBattle().getTimer().start(); + } }); add(attack); diff --git a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java index 84ed22d..45a27b7 100644 --- a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java +++ b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java @@ -70,8 +70,8 @@ public class WindowOfBattle extends JPanel { private String winCutscene; private String loseCutscene; private String name; - private String hitSound; + private boolean isRunAwayPossible; public Battle getBattle() { return battle; @@ -142,7 +142,7 @@ public class WindowOfBattle extends JPanel { enemies.add(enemy); } else if (data[0].equals("")) { -// musicManager = new MusicManager(data[1], Float.parseFloat(data[2])); + musicManager = new MusicManager(data[1], Float.parseFloat(data[2])); } else if (data[0].equals("")) { if (data[1].equals("flicker")) canvas.flicker(Integer.parseInt(data[2])); @@ -157,6 +157,9 @@ public class WindowOfBattle extends JPanel { else if (data[0].equals("")){ hitSound = data[1]; } + else if (data[0].equals("")) { + isRunAwayPossible = Boolean.parseBoolean(data[1]); + } } } catch (FileNotFoundException e) { e.printStackTrace(); @@ -185,7 +188,6 @@ public class WindowOfBattle extends JPanel { } public void writeToOutput(String s) { - System.out.println(s); Font f = new Font(Font.SERIF, Font.BOLD, 20); if (situationText.getComponents().length == 0) { JLabel text = new JLabel(); @@ -235,6 +237,10 @@ public class WindowOfBattle extends JPanel { return hitSound; } + public boolean isRunAwayPossible() { + return isRunAwayPossible; + } + class Canvas extends JPanel { private LinkedList images; private BufferedImage image; diff --git a/src/main/resources/battles/storageroombattle.txt b/src/main/resources/battles/storageroombattle.txt index 61c5937..963504c 100644 --- a/src/main/resources/battles/storageroombattle.txt +++ b/src/main/resources/battles/storageroombattle.txt @@ -6,4 +6,5 @@ battle2 flicker 500 cutscene-storageroombattle-win - cutscene-storageroombattle-lose \ No newline at end of file + cutscene-storageroombattle-lose + true \ No newline at end of file