Don't like ads? PRO users don't see any ads ;-)

Untitled

By: TheDuceCat on Jan 27th, 2012  |  syntax: Java  |  size: 3.89 KB  |  hits: 81  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1.  
  2. package com.theducecat.blockdude;
  3.  
  4. import java.awt.Color;
  5. import java.awt.Dimension;
  6. import java.awt.Graphics;
  7. import java.awt.Graphics2D;
  8. import java.awt.event.KeyEvent;
  9. import java.awt.event.KeyListener;
  10. import java.util.ArrayList;
  11.  
  12. import javax.swing.JFrame;
  13. import javax.swing.JPanel;
  14. import javax.swing.SwingUtilities;
  15.  
  16. public class GameMain extends JFrame {
  17.        
  18.         /**
  19.          *
  20.          */
  21.         private static final long serialVersionUID = 1L;
  22.        
  23.         static final int CANVAS_WIDTH = 800;
  24.         static final int CANVAS_HEIGHT = 600;
  25.        
  26.         static final int UPDATE_RATE = 4;
  27.         static final long UPDATE_PERIOD = 1000000000L / UPDATE_RATE;
  28.        
  29.         static enum State {
  30.                 INITIALIZED, MENU, PLAYING, PAUSED, DESTROYED
  31.         }
  32.        
  33.         static State state;
  34.        
  35.         private GameCanvas canvas;
  36.        
  37.         // TODO: Fix this.
  38.         public static float gameScale = 3.5f;
  39.        
  40.         private Level testLevel;
  41.        
  42.         private Player player;
  43.         private ArrayList<ArrayList<Block>> blocks;
  44.        
  45.         public GameMain() {
  46.                
  47.                 gameInit();
  48.                
  49.                 Textures.init("res/textures.png");
  50.                
  51.                 canvas = new GameCanvas();
  52.                 canvas.setPreferredSize(new Dimension(CANVAS_WIDTH, CANVAS_HEIGHT));
  53.                 this.setContentPane(canvas);
  54.                
  55.                 this.setDefaultCloseOperation(EXIT_ON_CLOSE);
  56.                 this.pack();
  57.                 this.setTitle("Block Dude");
  58.                 this.setVisible(true);
  59.                
  60.                 gameStart();
  61.                
  62.         }
  63.        
  64.         public void gameInit() {
  65.                 state = State.INITIALIZED;
  66.                 testLevel = new Level("levels/level.png");
  67.                 blocks = testLevel.getBlocks();
  68.                
  69.                 for (int i = 0; i < blocks.size(); i++) {
  70.                         for (int j = 0; j < blocks.get(i).size(); j++) {
  71.                                 if (blocks.get(i).get(j) == Block.SPAWN) {
  72.                                         player = new Player(j, i);
  73.                                         break;
  74.                                 }
  75.                         }
  76.                 }
  77.         }
  78.        
  79.         public void gameStart() {
  80.                
  81.                 Thread gameThread = new Thread() {
  82.                         @Override
  83.                         public void run() {
  84.                                 gameLoop();
  85.                         }
  86.                 };
  87.                
  88.                 gameThread.start();
  89.                
  90.         }
  91.        
  92.         private void gameLoop() {
  93.                 long beginTime, timeTaken, timeLeft;
  94.                 state = State.PLAYING;
  95.                
  96.                 while (true) {
  97.                         beginTime = System.nanoTime();
  98.                        
  99.                         //if (state == State.GAMEOVER) break;
  100.                         if (state == State.PLAYING) {
  101.                                 gameUpdate();
  102.                         }
  103.                        
  104.                         repaint();
  105.                        
  106.                         timeTaken = System.nanoTime() - beginTime;
  107.                         timeLeft = (UPDATE_PERIOD - timeTaken) / 1000000;
  108.                        
  109.                        
  110.                         if (timeLeft < 10) timeLeft = 10;
  111.                         try {
  112.                                 Thread.sleep(timeLeft);
  113.                         } catch (InterruptedException ex) {}
  114.                 }
  115.         }
  116.        
  117.         public void gameShutdown() {
  118.                 System.out.println("Shutting down!");
  119.         }
  120.        
  121.         public void gameUpdate() {
  122.                 // Have a state switcher, send to different classes (states) depending on state
  123.         }
  124.        
  125.         public void gameDraw(Graphics2D g2d) {
  126.                 switch (state) {
  127.                 case PLAYING:
  128.                         testLevel.draw(g2d);
  129.                         player.draw(g2d);
  130.                 }
  131.         }
  132.        
  133.         public void gameKeyPressed(int keyCode) {
  134.         }
  135.        
  136.         public void  gameKeyReleased(int keyCode) {
  137.                 switch (keyCode) {
  138.                 case KeyEvent.VK_LEFT:
  139.                         player.move(Direction.LEFT);
  140.                         break;
  141.                 case KeyEvent.VK_RIGHT:
  142.                         player.move(Direction.RIGHT);
  143.                         break;
  144.                 }
  145.         }
  146.        
  147.         public void gameKeyTyped(char keyChar) {
  148.                
  149.         }
  150.        
  151.         class GameCanvas extends JPanel implements KeyListener {
  152.                
  153.                 /**
  154.                  *
  155.                  */
  156.                 private static final long serialVersionUID = 1L;
  157.  
  158.                 public GameCanvas() {
  159.                         setFocusable(true);
  160.                         requestFocus();
  161.                         addKeyListener(this);
  162.                 }
  163.                
  164.                 @Override
  165.                 public void paintComponent(Graphics g) {
  166.                         Graphics2D g2d = (Graphics2D) g;
  167.                         super.paintComponent(g2d);
  168.                         setBackground(Color.WHITE);
  169.                        
  170.                         g2d.scale(gameScale, gameScale);
  171.                        
  172.                         gameDraw(g2d);
  173.                 }
  174.  
  175.                 @Override
  176.                 public void keyTyped(KeyEvent e) {
  177.                 }
  178.  
  179.                 @Override
  180.                 public void keyPressed(KeyEvent e) {
  181.                         /*switch (state) {
  182.                         case MENU:
  183.                                 System.exit(0);
  184.                                 break;
  185.                         }*/
  186.                 }
  187.  
  188.                 @Override
  189.                 public void keyReleased(KeyEvent e) {
  190.                         gameKeyReleased(e.getKeyCode());
  191.                 }
  192.                
  193.         }
  194.        
  195.         public static void main(String[] args) {
  196.                 SwingUtilities.invokeLater(new Runnable() {
  197.                         @Override
  198.                         public void run() {
  199.                                 new GameMain();
  200.                         }
  201.                 });
  202.         }
  203. }