Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2014
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.39 KB | None | 0 0
  1. package shooter.main;
  2.  
  3. import java.awt.BorderLayout;
  4. import java.awt.Canvas;
  5. import java.awt.Color;
  6. import java.awt.Cursor;
  7. import java.awt.Dimension;
  8. import java.awt.Font;
  9. import java.awt.FontFormatException;
  10. import java.awt.Graphics2D;
  11. import java.awt.Point;
  12. import java.awt.Toolkit;
  13. import java.awt.image.BufferStrategy;
  14. import java.awt.image.BufferedImage;
  15. import java.io.IOException;
  16. import java.io.InputStream;
  17.  
  18. import javax.swing.JFrame;
  19.  
  20. import shooter.gfx.BulletSpriteManager;
  21. import shooter.gfx.ImageLoader;
  22. import shooter.gfx.ObjectSpriteManager;
  23. import shooter.gfx.SpriteSheet;
  24. import shooter.gfx.TileSpriteManager;
  25. import shooter.input.KeyInputHandler;
  26. import shooter.input.MouseInputHandler;
  27.  
  28. public class Game extends Canvas implements Runnable {
  29.    
  30.     private static final String Version = "0.1";
  31.  
  32.     public static final int WIDTH = 480;
  33.     public static final int HEIGHT = 360;
  34.     public static final int SCALE = 2;
  35.     public static final String NAME = "Twin-Stick Shooter";
  36.  
  37.     private Cursor scope;
  38.     private Font eightBitWonder, sizedFont;
  39.     private JFrame frame;
  40.    
  41.     private int fps = 0;
  42.     private int ticks = 0;
  43.     private int stringLen = 0;
  44.    
  45.     private boolean running = false;
  46.     private boolean tick = true;
  47.     private Thread gameThread;
  48.  
  49.     private ImageLoader loader;
  50.     private BufferedImage bulletSpritesheet, tileSpritesheet, objectSpritesheet;
  51.     private ObjectSpriteManager om;
  52.     private TileSpriteManager tm;
  53.     private BulletSpriteManager bm;
  54.     private KeyInputHandler ki;
  55.     private MouseInputHandler mi;
  56.    
  57.     private Handler h;
  58.     private Menu menu;
  59.     private HUD hud;
  60.     private State state = State.MENU;
  61.  
  62.     public Game() {
  63.         setMinimumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
  64.         setMaximumSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
  65.         setPreferredSize(new Dimension(WIDTH * SCALE, HEIGHT * SCALE));
  66.  
  67.         frame = new JFrame(NAME);
  68.         frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  69.         frame.setLayout(new BorderLayout());
  70.  
  71.         frame.add(this, BorderLayout.CENTER);
  72.         frame.setResizable(false);
  73.  
  74.         frame.pack();
  75.         frame.setLocationRelativeTo(null);
  76.         frame.setVisible(true);
  77.     }
  78.  
  79.     private void init() {
  80.         menu = new Menu(this);
  81.         hud = new HUD(this);
  82.         loader = new ImageLoader();
  83.         objectSpritesheet = loader.load("/gfx/objectSpritesheet.png");
  84.         SpriteSheet os = new SpriteSheet(objectSpritesheet);
  85.         bulletSpritesheet = loader.load("/gfx/bulletSpritesheet.png");
  86.         SpriteSheet bs = new SpriteSheet(bulletSpritesheet);
  87.         tileSpritesheet = loader.load("/gfx/tileSpritesheet.png");
  88.         SpriteSheet ts = new SpriteSheet(tileSpritesheet);
  89.         om = new ObjectSpriteManager(os);
  90.         bm = new BulletSpriteManager(bs);
  91.         tm = new TileSpriteManager(ts);
  92.    
  93.         ki = new KeyInputHandler(this);
  94.         mi = new MouseInputHandler(this, menu);
  95.         this.addKeyListener(ki);
  96.         this.addMouseListener(mi);
  97.         this.addMouseMotionListener(mi);
  98.  
  99.         h = new Handler(this);
  100.         h.createObjects();
  101.         initFont();
  102.     }
  103.    
  104.     private void initFont() {
  105.         InputStream is = Game.class.getResourceAsStream("/font/Emulator.ttf");
  106.         try {
  107.             eightBitWonder = Font.createFont(Font.TRUETYPE_FONT, is);
  108.             sizedFont = eightBitWonder.deriveFont(12f);
  109.         } catch (FontFormatException e) {
  110.             e.printStackTrace();
  111.         } catch (IOException e) {
  112.             e.printStackTrace();
  113.         }
  114.     }
  115.  
  116.     public Thread getGameThread() {
  117.         return gameThread;
  118.     }
  119.  
  120.     public State getState() {
  121.         return state;
  122.     }
  123.    
  124.     public void setState(State state) {
  125.         this.state = state;
  126.     }
  127.  
  128.     public Handler getHandler() {
  129.         return h;
  130.     }
  131.    
  132.     public ObjectSpriteManager getObjectImageManager() {
  133.         return om;
  134.     }
  135.    
  136.     public TileSpriteManager getTileImageManager() {
  137.         return tm;
  138.     }
  139.  
  140.     public BulletSpriteManager getBulletImageManager() {
  141.         return bm;
  142.     }
  143.    
  144.     public ImageLoader getImageLoader() {
  145.         return loader;
  146.     }
  147.    
  148.     public MouseInputHandler getMouseInputHandler() {
  149.         return mi;
  150.     }
  151.  
  152.     public Font getSizedFont() {
  153.         return sizedFont;
  154.     }
  155.  
  156.     public void setTick(boolean tick) {
  157.         this.tick = tick;
  158.     }
  159.  
  160.     public boolean isTick() {
  161.         return tick;
  162.     }
  163.  
  164.     public synchronized void start() {
  165.         if (running) {
  166.             return;
  167.         }
  168.         running = true;
  169.         gameThread = new Thread(this);
  170.         gameThread.start();
  171.     }
  172.  
  173.     public synchronized void stop() {
  174.         if (!running) {
  175.             return;
  176.         }
  177.         running = false;
  178.         try {
  179.             gameThread.join();
  180.         } catch (InterruptedException e) {
  181.             e.printStackTrace();
  182.         }
  183.     }
  184.  
  185.     private void tick() {
  186.         ki.tick();
  187.         mi.tick();
  188.         if (state == State.GAME) {
  189.             h.tick();
  190.         }
  191.     }
  192.  
  193.     private void changeCursor() {
  194.         //Get the default toolkit
  195.         Toolkit toolkit = Toolkit.getDefaultToolkit();
  196.         //Load an image for the cursor
  197.         BufferedImage image = loader.load("/gfx/aim.png");
  198.         //Create the hotspot for the cursor
  199.         Point hotSpot = new Point(16,16);
  200.         scope = toolkit.createCustomCursor(image, hotSpot, "Scope");
  201.         this.setCursor(scope);
  202.     }
  203.    
  204.     private void drawPause(Graphics2D g2d, Font font) {
  205.         g2d.setColor(Color.RED);
  206.         g2d.setFont(new Font(font.getName(), Font.BOLD, 35));
  207.         stringLen = (int) g2d.getFontMetrics().getStringBounds("P A U S E", g2d).getWidth();
  208.         g2d.drawString("P A U S E", getWidth() / 2 - stringLen / 2, getHeight() / 2);
  209.     }
  210.  
  211.     private void drawFPS(Graphics2D g2d, Font font) {
  212.         g2d.setFont(new Font(font.getName(), Font.BOLD, 16));
  213.         stringLen = (int) g2d.getFontMetrics().getStringBounds("Ticks:" + "    ", g2d).getWidth();
  214.         g2d.drawString("Ticks:" + ticks, this.getWidth() - stringLen + 20, this.getHeight() - 10);
  215.         int tempStringLen = stringLen;
  216.         stringLen = (int) g2d.getFontMetrics().getStringBounds("FPS:" + "    ", g2d).getWidth();
  217.         g2d.drawString("FPS:" + fps, this.getWidth() - stringLen - tempStringLen, this.getHeight() - 10);
  218.     }
  219.  
  220.     private void drawVersionNumber(Graphics2D g2d, Font font) {
  221.         g2d.setFont(new Font(font.getName(), Font.BOLD, 16));
  222.         g2d.drawString("v" + Version, 10, this.getHeight() - 10);
  223.     }
  224.  
  225.     private void render() {
  226.         BufferStrategy bs = this.getBufferStrategy();
  227.         if (bs == null) {
  228.             createBufferStrategy(3);
  229.             return;
  230.         }
  231.                
  232.         Graphics2D g2d = (Graphics2D) bs.getDrawGraphics();
  233.         /* DRAW EVERYTHING BELOW HERE */
  234.        
  235.         // BACKGROUND
  236.         g2d.setColor(Color.WHITE);
  237.         g2d.fillRect(0, 0, WIDTH * SCALE, HEIGHT * SCALE);
  238.        
  239.         if (state == State.MENU || state == State.OPTIONS || state == State.EXTRAS || state == State.ARMORY || state == State.CREDITS) {
  240.             // draw menu
  241.             menu.render(g2d);
  242.            
  243.             g2d.setColor(Color.WHITE);
  244.             drawFPS(g2d, sizedFont);
  245.             drawVersionNumber(g2d, sizedFont);
  246.            
  247.         } else if (state == State.GAME) {
  248.             // draw GameObjects
  249.             h.render(g2d);
  250.             //draw HUD
  251.             hud.render(g2d);
  252.            
  253.             // draw Pause
  254.             if (tick == false) {
  255.                 drawPause(g2d, sizedFont);
  256.             }
  257.            
  258.             g2d.setColor(Color.BLACK);
  259.             drawFPS(g2d, sizedFont);
  260.             drawVersionNumber(g2d, sizedFont);
  261.  
  262.             // line between mouse and player
  263. //          g2d.setColor(Color.GREEN);
  264. //          g2d.draw(new Line2D.Double(this.h.getPlayer().getX() + SpriteSheet.SIZE * Game.SCALE / 2, this.h.getPlayer().getY() + SpriteSheet.SIZE * Game.SCALE / 2, mi.getMx() , mi.getMy()));
  265.         }
  266.        
  267.        
  268.         /* DRAW EVERYTHING ABOVE HERE */
  269.        
  270.         g2d.dispose();
  271.         bs.show();
  272.     }
  273.  
  274.     public void run() {
  275.         this.requestFocus();
  276.         init();
  277.         long lastTime = System.nanoTime();
  278.         double amountOfTicks = 60.0;
  279.         double ns = 1000000000 / amountOfTicks;
  280.         double delta = 0;
  281.         int updates = 0;
  282.         int frames = 0;
  283.         long timer = System.currentTimeMillis();
  284.         while (running) {
  285.             long now = System.nanoTime();
  286.             delta += (now - lastTime) / ns;
  287.             lastTime = now;
  288.             while (delta >= 1) {
  289.                 if (tick == true) {
  290.                     tick();
  291.                     updates++;
  292.                 }
  293.                 delta--;
  294.             }
  295.             render();
  296.             frames++;
  297.  
  298.             if (System.currentTimeMillis() - timer > 1000) {
  299.                 fps = frames;
  300.                 ticks = updates;
  301.                 timer += 1000;
  302.                 System.out.println("=====================================");
  303.                 System.out.println("FPS: " + frames + " TICKS: " + updates);
  304.                 System.out.println("Game State: " + state);
  305.                 System.out.println("Number of bullets at the screen this moment: " + h.getBullets().size());
  306.                 System.out.println("Menu Position: " + menu.getMenuPosition());
  307.                 System.out.println("Armory Position X: " + menu.getArmoryPositionX());
  308.                 System.out.println("Armory Position Y: " + menu.getArmoryPositionY());
  309.                 System.out.println("=====================================");               
  310.                 frames = 0;
  311.                 updates = 0;
  312.             }
  313.         }
  314.         stop();
  315.     }
  316.  
  317.     public static void main(String[] args) {
  318.         new Game().start();
  319.     }
  320. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement