import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Image; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.swing.ImageIcon; import javax.swing.JFrame; import javax.swing.JOptionPane; public class Display extends JFrame implements Runnable { private static final long serialVersionUID = 1L; public static String TITLE = "The Box Alpha 0.05"; public static int WIDTH = 600; public static int HEIGHT = 400; public int moveSpeed = 5; public boolean Paused = false; int xChar, yChar, xMouse, yMouse, xLaserAnchor, yLaserAnchor, xLaserDest, yLaserDest, xDirection, yDirection, xCoordinate, yCoordinate; int xZombie = 50, yZombie = 50; FPSCounter FPS = new FPSCounter(); boolean SHOT = false; public String Controls = "Movement - ArrowKeys, Shooting - LMB, Sprint - Shift, Pause - ESC"; public Image dbImage; public Graphics dbg; Font font = new Font("Arial", Font.BOLD, 12); Font font2 = new Font("Arial", Font.BOLD, 15); Image charImage, backImage, zombieImage; public void run() { try { while (true) { if (!Paused) { FPS.tick(); move(); FindCharacter(); } Thread.sleep(10); } } catch (Exception e) { System.out.println("Error"); } } public void Shooting() { while (!SHOT) { xLaserDest = xLaserAnchor; yLaserDest = yLaserAnchor; } while (SHOT) { xLaserDest = xCoordinate; yLaserDest = yCoordinate; } } public class FPSCounter { public int currentFPS = 0; public int FPS = 0; public long start = 0; public void tick() { currentFPS++; if (System.currentTimeMillis() - start >= 1000) { FPS = currentFPS; currentFPS = 0; start = System.currentTimeMillis(); } } public int getFPS() { return FPS; } } public void move() { xChar += xDirection; yChar += yDirection; if (xChar <= 0) { xChar = 0; } if (xChar >= WIDTH - 32) { xChar = WIDTH - 32; } if (yChar <= 24) { yChar = 24; } if (yChar >= HEIGHT - 32) { yChar = HEIGHT - 32; } } public void setXDirection(int xdir) { xDirection = xdir; } public void setYDirection(int ydir) { yDirection = ydir; } public class AL extends KeyAdapter { public void keyPressed(KeyEvent e) { int keyCode = e.getKeyCode(); if (keyCode == e.VK_ESCAPE) { if (!Paused) { Paused = true; } else { Paused = false; } } if (keyCode == e.VK_SHIFT) { moveSpeed = 8; } if (keyCode == e.VK_LEFT) { setXDirection(-moveSpeed); } if (keyCode == e.VK_RIGHT) { setXDirection(+moveSpeed); } if (keyCode == e.VK_UP) { setYDirection(-moveSpeed); } if (keyCode == e.VK_DOWN) { setYDirection(+moveSpeed); } e.consume(); } public void keyReleased(KeyEvent e) { int keyCode = e.getKeyCode(); if (keyCode == e.VK_SHIFT) { moveSpeed = 5; } if (keyCode == e.VK_LEFT) { setXDirection(0); } if (keyCode == e.VK_RIGHT) { setXDirection(0); } if (keyCode == e.VK_UP) { setYDirection(0); } if (keyCode == e.VK_DOWN) { setYDirection(0); } e.consume(); } } public void drawImages() { try { // Load images backImage = new ImageIcon("res/Textures/Background.png").getImage(); charImage = new ImageIcon("res/Characters/Character.png").getImage(); zombieImage = new ImageIcon("res/Characters/Zombie.png").getImage(); } catch (Exception e) { JOptionPane.showMessageDialog(null, "Error loading images. Please send a message to Ryan B. at RyanMB1997@hotmail.com"); } } public Display() { // Game properties addKeyListener(new AL()); addMouseListener(new Mouse()); // Draw images drawImages(); // Screen properties setTitle(TITLE); setSize(WIDTH, HEIGHT); setResizable(false); setVisible(true); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); xChar = 125; yChar = 125; xMouse = xChar + 16; yMouse = yChar + 16; xLaserAnchor = xChar + 16; yLaserAnchor = yChar + 16; } public void FindCharacter() { if (xZombie < xChar) { xZombie++; } if (xZombie > xChar) { xZombie--; } if (yZombie < yChar) { yZombie++; } if (yZombie > yChar) { yZombie--; } } class Mouse extends MouseAdapter { @Override public void mousePressed(MouseEvent e) { int xCoordinate = e.getX(); int yCoordinate = e.getY(); xMouse = xCoordinate; yMouse = yCoordinate; xLaserDest = xMouse; yLaserDest = yMouse; SHOT = true; } @Override public void mouseReleased(MouseEvent e) { xLaserDest = xChar + 16; yLaserDest = yChar + 16; SHOT = false; } } public void paint(Graphics g) { dbImage = createImage(getWidth(), getHeight()); dbg = dbImage.getGraphics(); paintComponent(dbg); g.drawImage(dbImage, 0, 0, this); } public void paintComponent(Graphics g) { xLaserAnchor = xChar + 16; yLaserAnchor = yChar + 16; g.drawImage(backImage, 0, 0, this); g.drawImage(charImage, xChar, yChar, this); g.drawImage(zombieImage, xZombie, yZombie, this); g.setColor(Color.YELLOW); g.setFont(font); g.drawString(Controls, 70, 40); g.drawString("MoveSpeed: " + moveSpeed, 460, 40); g.setColor(Color.YELLOW); g.setFont(font2); g.drawString("FPS: " + FPS.FPS, 5, 40); g.setColor(Color.YELLOW); g.drawLine(xLaserAnchor, yLaserAnchor, xLaserDest, yLaserDest); repaint(); } public static void main(String[] args) { Display dis = new Display(); // Threads Thread t1 = new Thread(dis); t1.start(); } }