From f59cd3f8a12e823cad43d9ed188dab6c4865b8e9 Mon Sep 17 00:00:00 2001 From: iryupnik Date: Mon, 11 May 2020 12:19:02 +0200 Subject: [PATCH] Battle divided to Classess --- .../ruscz/game/gameOfProd/Battle/Battle.java | 14 ++- .../game/gameOfProd/BattleUI/CommandList.java | 15 +++ .../gameOfProd/BattleUI/ConsoleInput.java | 67 +++++++++++ .../gameOfProd/BattleUI/EnemyDescription.java | 17 +++ .../gameOfProd/BattleUI/ItemsInventory.java | 17 +++ .../gameOfProd/BattleUI/MenuOfActions.java | 85 +++++++++++++ .../gameOfProd/BattleUI/SituationText.java | 16 +++ .../gameOfProd/Windows/WindowOfBattle.java | 113 ++++++------------ 8 files changed, 261 insertions(+), 83 deletions(-) create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/CommandList.java create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/ConsoleInput.java create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/EnemyDescription.java create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java create mode 100644 src/main/java/ruscz/game/gameOfProd/BattleUI/SituationText.java diff --git a/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java b/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java index a4a65af..eb57b3c 100644 --- a/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java +++ b/src/main/java/ruscz/game/gameOfProd/Battle/Battle.java @@ -3,6 +3,7 @@ package ruscz.game.gameOfProd.Battle; import ruscz.game.gameOfProd.Windows.WindowOfBattle; import javax.swing.*; +import java.awt.*; import java.util.Collections; import java.util.LinkedList; import java.util.Random; @@ -82,7 +83,7 @@ public class Battle { private void returnControlToPlayer(){ timer.stop(); windowOfBattle.getMenuOfActions().setVisible(true); - windowOfBattle.getMenuOfActions().getComponents()[0].setEnabled(true); + for (Component e: windowOfBattle.getMenuOfActions().getComponents()) e.setEnabled(true); windowOfBattle.getEnemyDescription().setVisible(true); } @@ -92,11 +93,13 @@ public class Battle { windowOfBattle.getEnemyDescription().setVisible(false); windowOfBattle.repaint(); turnBelongTo.attack(e); + + windowOfBattle.writeToOutput(turnBelongTo.getName() + " deal " + turnBelongTo.getLevel() * turnBelongTo.getStrength() + " to " + e.getName()); + //TODO Animation of Attack //TODO Animation of Death if (e.health <= 0) enemies.remove(e); - windowOfBattle.writeToOutput(turnBelongTo.getName() + " deal " + turnBelongTo.getLevel() * turnBelongTo.getStrength() + " to " + e.getName()); - playerAttack = false; + playerAttack = false; turnBelongTo = null; delay = 2; } @@ -118,10 +121,11 @@ public class Battle { private void attackByMonster(Hero e) { turnCount++; turnBelongTo.attack(e); - //TODO Animation of Death - if (e.health <= 0) heroes.remove(e); windowOfBattle.writeToOutput(turnBelongTo.getName() + " deal " + turnBelongTo.getLevel() * turnBelongTo.getStrength() + " to " + e.getName()); + //TODO Animation of Attack + //TODO Animation of Death + if (e.health <= 0) heroes.remove(e); delay = 2; turnBelongTo = null; } diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/CommandList.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/CommandList.java new file mode 100644 index 0000000..583931b --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/CommandList.java @@ -0,0 +1,15 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.CELL_SIZE; + +public class CommandList extends JPanel { + public CommandList(WindowOfBattle window){ + setSize(CELL_SIZE * 8, CELL_SIZE * 6); + setLocation(CELL_SIZE * 4, CELL_SIZE * 2); + setVisible(false); + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/ConsoleInput.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/ConsoleInput.java new file mode 100644 index 0000000..40f4ab9 --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/ConsoleInput.java @@ -0,0 +1,67 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.*; + +public class ConsoleInput extends JPanel { + private JTextPane input; + private JButton submit; + private JButton list; + private JButton exit; + + public ConsoleInput(WindowOfBattle window) { + setSize(CELL_SIZE * (CANVAS_WIDTH - 4), CELL_SIZE); + setLocation(CELL_SIZE * 4, CELL_SIZE * CANVAS_HEIGHT * 3 / 4 - CELL_SIZE); + setVisible(false); + + input = new JTextPane(); + submit = new JButton("Submit"); + list = new JButton("List"); + exit = new JButton("x"); + + submit.addActionListener(e -> { + //TODO Take text from Field and work with parser + }); + + list.addActionListener(e -> { + submit.setEnabled(false); + list.setEnabled(false); + exit.setEnabled(false); + + window.getCommandList().setVisible(true); + }); + + exit.addActionListener(e -> { + setVisible(false); + + window.getMenuOfActions().getAttack().setEnabled(true); + window.getMenuOfActions().getConsole().setEnabled(true); + window.getMenuOfActions().getConsole().setEnabled(true); + window.getMenuOfActions().getConsole().setEnabled(true); + }); + + add(input); + add(submit); + add(list); + add(exit); + } + + public JTextPane getInput() { + return input; + } + + public JButton getSubmit() { + return submit; + } + + public JButton getList() { + return list; + } + + public JButton getExit() { + return exit; + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/EnemyDescription.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/EnemyDescription.java new file mode 100644 index 0000000..cc7b9a4 --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/EnemyDescription.java @@ -0,0 +1,17 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; +import java.awt.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.*; + +public class EnemyDescription extends JPanel { + public EnemyDescription(WindowOfBattle window) { + setSize(CELL_SIZE * CANVAS_WIDTH * 2 / 3, CELL_SIZE * CANVAS_HEIGHT / 4); + setLocation(0, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); + setBackground(Color.cyan); + setVisible(false); + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java new file mode 100644 index 0000000..3554a6f --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/ItemsInventory.java @@ -0,0 +1,17 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; +import java.awt.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.CELL_SIZE; + +public class ItemsInventory extends JPanel { + public ItemsInventory(WindowOfBattle window){ + setSize(CELL_SIZE * 8, CELL_SIZE * 6); + setLocation(CELL_SIZE * 4, CELL_SIZE * 2); + setBackground(Color.yellow); + setVisible(false); + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java new file mode 100644 index 0000000..3c43956 --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/MenuOfActions.java @@ -0,0 +1,85 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; +import java.awt.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.*; + +public class MenuOfActions extends JPanel { + private JButton attack; + private JButton console; + private JButton inventory; + private JButton escape; + + public MenuOfActions(WindowOfBattle window) { + setSize(CELL_SIZE * CANVAS_WIDTH / 3, CELL_SIZE * CANVAS_HEIGHT / 4); + setLocation(CELL_SIZE * CANVAS_WIDTH * 2 / 3, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); + setBackground(Color.green); + setVisible(false); + + attack = new JButton("Attack"); + console = new JButton("Console"); + inventory = new JButton("Items"); + escape = new JButton("Run Away"); + + attack.addActionListener(e -> { + attack.setEnabled(false); + console.setEnabled(false); + inventory.setEnabled(false); + escape.setEnabled(false); + + window.getBattle().setPlayerAttack(true); + window.getBattle().getTimer().start(); + }); + + console.addActionListener(e -> { + attack.setEnabled(false); + console.setEnabled(false); + inventory.setEnabled(false); + escape.setEnabled(false); + + window.getConsoleInput().setVisible(true); + }); + + inventory.addActionListener(e -> { + attack.setEnabled(false); + console.setEnabled(false); + inventory.setEnabled(false); + escape.setEnabled(false); + + window.getItemsInventory().setVisible(true); + }); + + escape.addActionListener(e -> { + attack.setEnabled(false); + console.setEnabled(false); + inventory.setEnabled(false); + escape.setEnabled(false); + + //TODO RunAway + }); + + add(attack); + add(console); + add(inventory); + add(escape); + } + + public JButton getAttack() { + return attack; + } + + public JButton getConsole() { + return console; + } + + public JButton getInventory() { + return inventory; + } + + public JButton getEscape() { + return escape; + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/BattleUI/SituationText.java b/src/main/java/ruscz/game/gameOfProd/BattleUI/SituationText.java new file mode 100644 index 0000000..51a02e2 --- /dev/null +++ b/src/main/java/ruscz/game/gameOfProd/BattleUI/SituationText.java @@ -0,0 +1,16 @@ +package ruscz.game.gameOfProd.BattleUI; + +import ruscz.game.gameOfProd.Windows.WindowOfBattle; + +import javax.swing.*; +import java.awt.*; + +import static ruscz.game.gameOfProd.Windows.WindowOfBattle.*; + +public class SituationText extends JPanel { + public SituationText(WindowOfBattle window) { + setSize(CELL_SIZE * CANVAS_WIDTH, CELL_SIZE * CANVAS_HEIGHT / 4); + setLocation(0, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); + setBackground(Color.BLUE); + } +} diff --git a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java index 5dae47e..8cf028c 100644 --- a/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java +++ b/src/main/java/ruscz/game/gameOfProd/Windows/WindowOfBattle.java @@ -1,15 +1,13 @@ package ruscz.game.gameOfProd.Windows; import ruscz.game.gameOfProd.Battle.*; +import ruscz.game.gameOfProd.BattleUI.*; import ruscz.game.gameOfProd.Game; -import ruscz.game.gameOfProd.Save.LoadManager; -import ruscz.game.gameOfProd.Save.SaveManager; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.util.LinkedList; -import java.util.Random; public class WindowOfBattle extends JPanel { @@ -18,45 +16,46 @@ public class WindowOfBattle extends JPanel { public static int CANVAS_HEIGHT = 13; private static final int KEY_ESCAPE = 27; - private static boolean isReadyToPaint; - public JPanel getSituationText() { + public SituationText getSituationText() { return situationText; } - public JPanel getEnemyDescription() { + public EnemyDescription getEnemyDescription() { return enemyDescription; } - public JPanel getMenuOfActions() { + public MenuOfActions getMenuOfActions() { return menuOfActions; } - public JPanel getConsoleInput() { + public ConsoleInput getConsoleInput() { return consoleInput; } - public JPanel getCommandList() { + public CommandList getCommandList() { return commandList; } - public JPanel getItemsInventory() { + public ItemsInventory getItemsInventory() { return itemsInventory; } private Canvas canvas; - private JPanel situationText; - private JPanel enemyDescription; - private JPanel menuOfActions; - private JPanel consoleInput; - private JPanel commandList; - private JPanel itemsInventory; + private SituationText situationText; + private EnemyDescription enemyDescription; + private MenuOfActions menuOfActions; + private ConsoleInput consoleInput; + private CommandList commandList; + private ItemsInventory itemsInventory; private Game game; private Battle battle; - private LoadManager loadManager; - private SaveManager saveManager; + + public Battle getBattle() { + return battle; + } public WindowOfBattle(Game game) { this.game = game; @@ -71,66 +70,12 @@ public class WindowOfBattle extends JPanel { setBackground(Color.BLACK); canvas = new Canvas(); - canvas.setPreferredSize(new Dimension( - CELL_SIZE * CANVAS_WIDTH, - CELL_SIZE * CANVAS_HEIGHT)); - canvas.setSize(CELL_SIZE * CANVAS_WIDTH, CELL_SIZE * CANVAS_HEIGHT); - canvas.setBackground(Color.RED); - - situationText = new JPanel(); - situationText.setSize(CELL_SIZE * CANVAS_WIDTH, CELL_SIZE * CANVAS_HEIGHT / 4); - situationText.setLocation(0, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); - situationText.setBackground(Color.BLUE); - - enemyDescription = new JPanel(); - enemyDescription.setSize(CELL_SIZE * CANVAS_WIDTH * 2 / 3, CELL_SIZE * CANVAS_HEIGHT / 4); - enemyDescription.setLocation(0, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); - enemyDescription.setBackground(Color.cyan); - enemyDescription.setVisible(false); - - menuOfActions = new JPanel(); - menuOfActions.setSize(CELL_SIZE * CANVAS_WIDTH / 3, CELL_SIZE * CANVAS_HEIGHT / 4); - menuOfActions.setLocation(CELL_SIZE * CANVAS_WIDTH * 2 / 3, CELL_SIZE * CANVAS_HEIGHT * 3 / 4); - menuOfActions.setBackground(Color.green); - menuOfActions.setVisible(false); - JButton attack = new JButton("Attack"); - attack.addActionListener(e -> { - attack.setEnabled(false); - battle.setPlayerAttack(true); - battle.getTimer().start(); - }); - JButton console = new JButton("Console"); - console.addActionListener(e -> { - - }); - JButton inventory = new JButton("Items"); - inventory.addActionListener(e -> { - - }); - JButton escape = new JButton("Run Away"); - escape.addActionListener(e -> { - - }); - menuOfActions.add(attack); - menuOfActions.add(console); - menuOfActions.add(inventory); - menuOfActions.add(escape); - - consoleInput = new JPanel(); - consoleInput.setSize(CELL_SIZE * (CANVAS_WIDTH - 4), CELL_SIZE); - consoleInput.setLocation(CELL_SIZE * 4, CELL_SIZE * CANVAS_HEIGHT * 3 / 4 - CELL_SIZE); - consoleInput.setVisible(false); - - commandList = new JPanel(); - commandList.setSize(CELL_SIZE * 8, CELL_SIZE * 6); - commandList.setLocation(CELL_SIZE * 4, CELL_SIZE * 2); - commandList.setVisible(false); - - itemsInventory = new JPanel(); - itemsInventory.setSize(CELL_SIZE * 8, CELL_SIZE * 6); - itemsInventory.setLocation(CELL_SIZE * 4, CELL_SIZE * 2); - itemsInventory.setBackground(Color.yellow); - itemsInventory.setVisible(false); + situationText = new SituationText(this); + enemyDescription = new EnemyDescription(this); + menuOfActions = new MenuOfActions(this); + consoleInput = new ConsoleInput(this); + commandList = new CommandList(this); + itemsInventory = new ItemsInventory(this); add(lp); lp.add(canvas, JLayeredPane.DEFAULT_LAYER); @@ -198,7 +143,19 @@ public class WindowOfBattle extends JPanel { repaint(); } + public Game getGame() { + return game; + } + class Canvas extends JPanel { + Canvas(){ + setPreferredSize(new Dimension( + CELL_SIZE * CANVAS_WIDTH, + CELL_SIZE * CANVAS_HEIGHT)); + setSize(CELL_SIZE * CANVAS_WIDTH, CELL_SIZE * CANVAS_HEIGHT); + setBackground(Color.RED); + } + @Override public void paint(Graphics g) { super.paint(g);