package main; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import object.Object_heart; import object.Object_rock; public class ScreenUI { GamePanel gp; Graphics2D g2; Font patrick; BufferedImage FullH, EmptyH, HalfH; BufferedImage rockImage; public boolean messageOn = false; public String message = ""; int messageCounter =0; public int commandNum = 0; public ScreenUI(GamePanel gp) { this.gp = gp; patrick = new Font("Patrick Hand SC", Font.BOLD, 30 ); Object_rock rock = new Object_rock(gp); rockImage = rock.image; // Object_heart heart = new Object_heart(gp); FullH = heart.image; HalfH = heart.image2; EmptyH = heart.image3; } public void showMessage(String text) { message = text; messageOn = true; } public void draw(Graphics2D g2) { this.g2 = g2; g2.setFont(patrick); g2.setColor(Color.WHITE); //play mode if(gp.gameState == gp.playMode) { screenMsg(); drawHearts(); drawRocks(); } //pause method if(gp.gameState == gp.pauseMode) { pauseMode(); drawHearts(); drawRocks(); } //game over if(gp.gameState == gp.gameoverState) { drawGameOverScreen(); } //Main state if(gp.gameState == gp.MainState) { drawMainScreen(); } //game win state if(gp.gameState == gp.gameWin) { drawGameWinScreen(); } } private void drawGameWinScreen() { g2.setColor(new Color(0,0,0,150)); g2.fillRect(0, 0, gp.screenWidth, gp.screenHeight); int x, y; String text; g2.setFont(g2.getFont().deriveFont(Font.BOLD, 80f)); text = "YOU WIN!!"; //shadow g2.setColor(Color.black); x = getCenterX(text); y = gp.tileSize*4; g2.drawString(text, x, y); //main g2.setColor(Color.YELLOW); g2.drawString(text, x-4, y-4); } public void drawMainScreen() { g2.setColor(new Color(0,0,0)); g2.fillRect(0, 0, gp.screenWidth, gp.screenHeight); //Title g2.setFont(g2.getFont().deriveFont(Font.BOLD, 80f)); String text = "Monster Crush"; int x = getCenterX(text); int y = gp.tileSize*4; //shadow g2.setColor(Color.gray); g2.drawString(text, x+5, y+5); //main color g2.setColor(Color.white); g2.drawString(text, x, y); //image x = gp.screenWidth/2 - (gp.tileSize*2)/2; y += gp.tileSize*2; g2.drawImage(gp.player.down1,x,y,gp.tileSize*2, gp.tileSize*2, null); //Menu g2.setFont(g2.getFont().deriveFont(Font.BOLD, 40f)); text = "NEW GAME"; x = getCenterX(text); y += gp.tileSize*3.5; g2.drawString(text, x, y); if(commandNum == 0) { g2.drawString(">", x-gp.tileSize, y); } //back to the title screen text = "QUIT"; x = getCenterX(text); y += gp.tileSize; g2.drawString(text, x, y); if(commandNum == 1) { g2.drawString(">", x-gp.tileSize, y); } } public void drawGameOverScreen() { g2.setColor(new Color(0,0,0,150)); g2.fillRect(0, 0, gp.screenWidth, gp.screenHeight); int x, y; String text; g2.setFont(g2.getFont().deriveFont(Font.BOLD, 80f)); text = "GAME OVER!"; //shadow g2.setColor(Color.black); x = getCenterX(text); y = gp.tileSize*4; g2.drawString(text, x, y); //main g2.setColor(Color.white); g2.drawString(text, x-4, y-4); //retry g2.setFont(g2.getFont().deriveFont(Font.BOLD, 50f)); text = "Retry"; x = getCenterX(text); y += gp.tileSize*4; g2.drawString(text, x, y); if(commandNum == 0) { g2.drawString(">", x-gp.tileSize, y); } //back to the title screen text = "Quit"; x = getCenterX(text); y += 55; g2.drawString(text, x, y); if(commandNum == 1) { g2.drawString(">", x-gp.tileSize, y); } } public void screenMsg() { if(messageOn == true) { g2.setFont(g2.getFont().deriveFont((float) 25.0)); g2.drawString(message, gp.tileSize/2,gp.tileSize*2); messageCounter++; if(messageCounter > 120) { messageCounter = 0; messageOn = false; } } } public void drawHearts() { int x = gp.tileSize*14; int y = gp.tileSize/2; int i = 0; //MAXLIFE while(i < gp.player.MAXLIFE/2) { g2.drawImage(EmptyH, x, y, null); i++; x += gp.tileSize; } //RESET x = gp.tileSize*14; y = gp.tileSize/2; i = 0; while(i < gp.player.LIFE) { g2.drawImage(HalfH, x, y, null); i++; if(i < gp.player.LIFE) { g2.drawImage(FullH, x, y, null); } i++; x += gp.tileSize; } } public void drawRocks() { g2.drawImage(rockImage, gp.tileSize/2,gp.tileSize/2,gp.tileSize, gp.tileSize, null); g2.drawString("X "+ gp.player.Numrocks, 65, 60); } public void pauseMode() { String text= "PAUSED!!"; int x = getCenterX(text); int y = gp.screenHeight/2; g2.drawString(text, x, y); } public int getCenterX(String text) { int length = (int)g2.getFontMetrics().getStringBounds(text, g2).getWidth(); int x = gp.screenWidth/2 - length/2; return x; } }