private void drawEnemyMessage(Graphics2D g2d) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); if (enemyMoveChosen) { String text = ""; if (drawMoveApplication) { text = effectMessage; } else { text = enemy.getName() + " uses " + lastEnemyMove.getName() + " on " + MainCharacter.characterName + "!"; } ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (int i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (int i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else { g2d.drawString("The Enemy is deciding", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("their move...", cardButton.getX(), cardButton.getY() + 15 + 30); } }
private void drawVictoryMessage(Graphics2D g2d) { Font messageFont = new Font("Arial", Font.BOLD, 30); g2d.setFont(messageFont); g2d.drawString("VICTORY!!!", cardButton.getX(), cardButton.getY() + 30); }
// Initialization of the Battle State public BattleState(Framework framework, BattleEnemy enemy) { windowWidth = framework.getWidth(); windowHeight = framework.getHeight(); this.enemy = enemy; turn = 0; turnState = 0; Font buttonFont = new Font("Arial", Font.BOLD, 15); int xButtonSpacing = 40; int yButtonSpacing = 35; cardButton = new MenuButton( "Cast Card", xButtonSpacing, 3 * windowHeight / 4 + yButtonSpacing, buttonFont, (Graphics2D) framework.getGraphics(), 5, 5); itemButton = new MenuButton( "Use Item", xButtonSpacing, cardButton.getY() + cardButton.getHeight() + yButtonSpacing, buttonFont, (Graphics2D) framework.getGraphics(), 5, 5); drawButton = new MenuButton( "Draw Card", cardButton.getX() + cardButton.getWidth() + xButtonSpacing, cardButton.getY(), buttonFont, (Graphics2D) framework.getGraphics(), 5, 5); runButton = new MenuButton( "Run", cardButton.getX() + cardButton.getWidth() + xButtonSpacing, cardButton.getY() + cardButton.getHeight() + yButtonSpacing, buttonFont, (Graphics2D) framework.getGraphics(), 5, 5); buttonWidth = drawButton.getWidth(); int buttonHeight = drawButton.getHeight(); cardButton.setWidth(buttonWidth); itemButton.setWidth(buttonWidth); runButton.setWidth(buttonWidth); drawButton.setPosition( cardButton.getX() + cardButton.getWidth() + xButtonSpacing, drawButton.getY()); runButton.setPosition( cardButton.getX() + cardButton.getWidth() + xButtonSpacing, runButton.getY()); int scrollerBuffer = 5; BufferedImage scrollerImage = null; // Load the Scroller Image try { scrollerImage = ImageIO.read(this.getClass().getResource("/resources/images/pointerFinger.png")); } catch (IOException ex) { Logger.getLogger(Framework.class.getName()).log(Level.SEVERE, null, ex); } actionScroller = new MenuScroller2D( scrollerImage, cardButton.getX() - scrollerBuffer, cardButton.getY(), buttonWidth + xButtonSpacing, buttonHeight + yButtonSpacing, 2, 2, 4, 1, 1); actionScroller.setWidth(cardButton.getHeight()); actionScroller.setHeight(cardButton.getHeight()); actionScroller.setPosition( cardButton.getX() - actionScroller.getWidth() - scrollerBuffer, cardButton.getY()); enemyImage = enemy.getBattleImage(); mainCharacterImage = StartGameState.character.getBattleImage(); SoundManager.add( "BattleMusic", new Sound(this.getClass().getResource("/resources/sounds/Woodland_Fantasy_0.wav"), 0)); hand = new IndexedLinkedHashMap<>(); deckCount = 0; if (MainCharacter.maxHand <= MainCharacter.deck.size()) { for (int i = 0; i < MainCharacter.maxHand; i++) { hand.put(i, MainCharacter.deck.get(i)); deckCount++; } } else { for (int i = 0; i < MainCharacter.deck.size(); i++) { hand.put(i, MainCharacter.deck.get(i)); deckCount++; } } try { cardBack = ImageIO.read( this.getClass() .getResource("/resources/images/Cards/40X56 Card Frames Revised/Card_Back.png")); } catch (IOException ex) { Logger.getLogger(Framework.class.getName()).log(Level.SEVERE, null, ex); } int x = drawButton.getX() + drawButton.getWidth() + 40; cardWidth = 3 * windowWidth / 4 - 2 * 15 - cardBack.getWidth() - x; int cardSpacing = cardWidth / hand.size(); cardScroller = new MenuScroller2D( scrollerImage, drawButton.getX() + drawButton.getWidth() + 10, drawButton.getY() + hand.getIndexed(0).getHeight() / 2 - 10, cardSpacing, 0, deckCount, 1, deckCount, 1, 1); cardScroller.setWidth(actionScroller.getWidth()); cardScroller.setHeight(actionScroller.getHeight()); deckScroller = new MenuScroller2D( scrollerImage, 3 * windowWidth / 4 - 15 - cardBack.getWidth() - 10 - actionScroller.getWidth(), drawButton.getY() + hand.getIndexed(0).getHeight() / 2 - 10, 0, 0, 1, 1, 1, 1, 1); deckScroller.setWidth(actionScroller.getWidth()); deckScroller.setHeight(actionScroller.getHeight()); shouldWait = false; drawNoMana = false; drawNoCards = false; drawItemUsed = false; drawParalyzed = false; enemyMoveChosen = false; itemMenu = new ItemsMenu(framework); }
@Override public void draw(Graphics2D g2d) { // After updating we will draw all the objects to the screen g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, windowWidth, windowHeight); g2d.setColor(Color.BLACK); Font font = new Font("Arial", Font.BOLD, 30); g2d.setFont(font); int textWidth = (int) (font.getStringBounds("You Are Now In Battle State", g2d.getFontRenderContext()) .getWidth()); g2d.drawString( "You Are Now In Battle State", windowWidth / 2 - textWidth / 2, windowHeight / 2); // Draw the battle images of the enemy and MainCharacter g2d.drawImage( mainCharacterImage, 60, 3 * windowHeight / 4 - 2 * 60, mainCharacterImage.getWidth() * 2, mainCharacterImage.getHeight() * 2, null); g2d.drawImage( enemyImage, windowWidth - 60 - enemyImage.getWidth(), 60, enemyImage.getWidth(), enemyImage.getHeight(), null); // Draw an action box at the bottom where we decide our actions on each turn g2d.setColor(Color.CYAN); g2d.fillRect(0, 3 * windowHeight / 4, windowWidth, windowHeight / 4 + 2); // Draw the hp and mp bars of the MainCharacter and the Enemy g2d.setColor(Color.BLACK); g2d.drawRect(0, 3 * windowHeight / 4, windowWidth, windowHeight / 4 + 2); Font hpFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(hpFont); String text = "Health: " + String.valueOf(StartGameState.character.health) + "/" + String.valueOf(StartGameState.character.maxHealth); textWidth = (int) (hpFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); g2d.drawString( text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30 - 15 - 20); text = "Mana: " + String.valueOf(StartGameState.character.mana) + "/" + String.valueOf(StartGameState.character.maxMana); g2d.drawString(text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30); text = MainCharacter.characterName; g2d.drawString( text, 60 + mainCharacterImage.getWidth() * 2 + 45, 3 * windowHeight / 4 - 30 - 2 * 15 - 2 * 20); g2d.setColor(Color.GRAY); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, 100, 15, 3, 3); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, 100, 15, 3, 3); g2d.setColor(Color.GREEN); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, (int) (((float) StartGameState.character.health / (float) StartGameState.character.maxHealth) * 100), 15, 3, 3); g2d.setColor(Color.BLUE); g2d.fillRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, (int) (((float) StartGameState.character.mana / (float) StartGameState.character.maxMana) * 100), 15, 3, 3); g2d.setColor(Color.BLACK); g2d.drawRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45 - 15 - 20, 100, 15, 3, 3); g2d.drawRoundRect( 60 + mainCharacterImage.getWidth() * 2 + 45 + textWidth + 20, 3 * windowHeight / 4 - 45, 100, 15, 3, 3); // Enemy health and mana bars text = "Health: " + String.valueOf(enemy.health) + "/" + String.valueOf(enemy.maxHealth); textWidth = (int) (hpFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 + 15); text = "Mana: " + String.valueOf(enemy.mana) + "/" + String.valueOf(enemy.maxMana); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 + 2 * 15 + 20); text = enemy.getName(); g2d.drawString( text, windowWidth - 60 - enemyImage.getWidth() - 45 - 100 - 20 - textWidth, 60 - 20); g2d.setColor(Color.GRAY); g2d.fillRoundRect(windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, 100, 15, 3, 3); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, 100, 15, 3, 3); g2d.setColor(Color.GREEN); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, (int) (((float) enemy.health / (float) enemy.maxHealth) * 100), 15, 3, 3); g2d.setColor(Color.BLUE); g2d.fillRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, (int) (((float) enemy.mana / (float) enemy.maxMana) * 100), 15, 3, 3); g2d.setColor(Color.BLACK); g2d.drawRoundRect(windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60, 100, 15, 3, 3); g2d.drawRoundRect( windowWidth - 60 - enemyImage.getWidth() - 45 - 100, 60 + 15 + 20, 100, 15, 3, 3); // Draw the player's hand and the current card int x = drawButton.getX() + drawButton.getWidth() + 40; int y = drawButton.getY() + 10; int i = 0; if (deckCount < MainCharacter.deck.size()) { g2d.drawImage(cardBack, 3 * windowWidth / 4 - 15 - cardBack.getWidth(), y, null); } if (hand.size() > 0) { int cardSpacing = cardWidth / hand.size(); for (Card card : hand.values()) { if (i != cardScroller.getCountX() - 1) { card.draw(g2d, x + i * (cardSpacing), y, 0, 0); } i++; } Card current = hand.getIndexed(cardScroller.getCountX() - 1); current.draw(g2d, x + (cardScroller.getCountX() - 1) * (cardSpacing), y - 20, 0, 0); // If it is MainCharacter turn then we draw the actions in the action box g2d.setFont(new Font("Arial", Font.BOLD, 20)); g2d.setColor(Color.BLACK); int explanationWidth = windowWidth / 4 - 25; g2d.drawString(current.getName(), 3 * windowWidth / 4 + 15, cardButton.getY()); Font explanationFont = new Font("Arial", Font.BOLD, 10); g2d.setFont(explanationFont); ArrayList<String> lines = new ArrayList<>(); // Determines width and height of only the text String dialog = current.getExplanation(); int width = (int) (explanationFont.getStringBounds(dialog, g2d.getFontRenderContext()).getWidth()); if (width > explanationWidth) { String[] split = dialog.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (explanationFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > explanationWidth) { tempWidth = (int) (explanationFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(dialog); } for (i = 0; i < lines.size(); i++) { g2d.drawString( lines.get(i), 3 * windowWidth / 4 + 15, cardButton.getY() + (i + 1) * (10 + 4)); } g2d.setFont(hpFont); String[] effects = current.getEffectStrings(); for (i = 0; i < effects.length; i++) { g2d.drawString( effects[i], 3 * windowWidth / 4 + 15, cardButton.getY() + (lines.size()) * (10 + 4) + (i + 1) * (5 + 15)); } g2d.drawString( "Mana Cost: " + String.valueOf(current.getManaCost()), 3 * windowWidth / 4 + 15, cardButton.getY() + (lines.size()) * (10 + 4) + (i + 1) * (15 + 5)); } if (drawNoMana) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You don't have", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("enough mana!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (drawNoCards) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You are out of", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("cards to draw!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (drawItemUsed) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You have used", cardButton.getX(), cardButton.getY() + 15); g2d.drawString( itemMenu.getLastItem().name + "!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 0 && drawParalyzed) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You cannot move,", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("you're paralyzed!", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 1 && drawParalyzed) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); text = enemy.getName() + " cannot move, they're paralyzed!"; ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else if (turn == 0 && turnState == 4) { g2d.setFont(new Font("Arial", Font.BOLD, 15)); g2d.drawString("You try to", cardButton.getX(), cardButton.getY() + 15); g2d.drawString("run away...", cardButton.getX(), cardButton.getY() + 2 * 15 + 10); } else if (turn == 0 && turnState == 5) { Font messageFont = new Font("Arial", Font.BOLD, 15); g2d.setFont(messageFont); if (drawMoveApplication) { text = effectMessage; } else { text = "You have used " + playedCard.getName() + " on " + enemy.getName() + "!"; } ArrayList<String> lines = new ArrayList<>(); int width = (int) (messageFont.getStringBounds(text, g2d.getFontRenderContext()).getWidth()); if (width > cardButton.getWidth() * 2 + 40) { String[] split = text.split("\\s+"); int tempWidth = 0; int maxWidth = 0; String line = ""; for (i = 0; i < split.length; i++) { tempWidth += (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); if (tempWidth > cardButton.getWidth() * 2 + 40) { tempWidth = (int) (messageFont .getStringBounds(split[i] + "_", g2d.getFontRenderContext()) .getWidth()); lines.add(line); line = split[i] + " "; } else { line = line + split[i] + " "; } if (tempWidth > maxWidth) { maxWidth = tempWidth; } } lines.add(line); } else { lines.add(text); } for (i = 0; i < lines.size(); i++) { g2d.drawString(lines.get(i), cardButton.getX(), cardButton.getY() + 15 + 30 * i); } } else if (turn == 0) { drawActionBox(g2d); } else if (turn == 1) { drawEnemyMessage(g2d); } else if (turn == 2) { drawVictoryMessage(g2d); } else if (turn == 3) { drawLossMessage(g2d); } }
private void drawLossMessage(Graphics2D g2d) { Font messageFont = new Font("Arial", Font.BOLD, 30); g2d.setFont(messageFont); g2d.drawString("You have died...", cardButton.getX(), cardButton.getY() + 30); }