Advertisement
JHawkins

class Game v0.6c

Mar 20th, 2014
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 14.12 KB | None | 0 0
  1. package Game;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Dimension;
  5. import java.awt.Graphics;
  6. import java.awt.Window;
  7. import java.awt.event.ActionEvent;
  8. import java.awt.event.ActionListener;
  9. import java.awt.event.KeyEvent;
  10. import java.awt.event.KeyListener;
  11. import java.awt.event.MouseEvent;
  12. import java.awt.event.MouseMotionListener;
  13. import java.util.LinkedList;
  14. import javax.swing.JFrame;
  15. import javax.swing.JMenu;
  16. import javax.swing.JMenuBar;
  17. import javax.swing.JOptionPane;
  18. import javax.swing.JPanel;
  19. import javax.swing.Timer;
  20.  
  21. public class Game implements KeyListener, MouseMotionListener
  22. {
  23.  
  24.     //Declaration of the variables
  25.     //<editor-fold defaultstate="collapsed" desc=" Variables ">
  26.  
  27.     //<editor-fold defaultstate="collapsed" desc=" Player Variables ">
  28.     /** @param    player_lives     Frame size of X */
  29.     private int player_lives = 3;
  30.     //</editor-fold>
  31.    
  32.     //<editor-fold defaultstate="collapsed" desc=" Scale Variables ">
  33.     /** @param    frame_getX     Frame size of X */
  34.     private double frame_getX = -1;
  35.    
  36.     /** @param    frame_getY     Frame size of Y */
  37.     private double frame_getY = -1;
  38.     //</editor-fold>
  39.    
  40.     //<editor-fold defaultstate="collapsed" desc=" Movement Variables">
  41.     /** @param    ball_deltaX   Ball accellaration to X-Coordinate */
  42.     private int ball_deltaX = 20;
  43.    
  44.     /** @param    ball_deltaY   Ball accellaration to Y-Coordinate */
  45.     private int ball_deltaY = 20;
  46.     //</editor-fold>
  47.    
  48.     //<editor-fold defaultstate="collapsed" desc=" Ball Variables">
  49.     /** @param    ball_posX     Ball position on X-Coordinate */
  50.     private double ball_posX = -1.0;
  51.    
  52.     /** @param    ball_posY     Ball position on Y-Coordinate */
  53.     private double ball_posY = -1.0;
  54.    
  55.     /** @return   ball_radius   Ball radius */
  56.     private final int ball_radius = 10;
  57.     //</editor-fold>
  58.    
  59.     //<editor-fold defaultstate="collapsed" desc=" Paddle Variables">
  60.     /** @param    paddle_posX     Paddle position on X-Coordinate */
  61.     private double paddle_posX = -1.0;
  62.    
  63.     /** @param    paddle_posY     Paddle position on Y-Coordinate */
  64.     private double paddle_posY = -1.0;
  65.    
  66.     /** @param    paddle_width     Paddle scale (width) */
  67.     private int paddle_width = 100;
  68.    
  69.     /** @param    paddle_height     Paddle scale (height) */
  70.     private int paddle_height = 10;
  71.     //</editor-fold>
  72.    
  73.     //<editor-fold defaultstate="collapsed" desc=" Brick Variables">
  74.     LinkedList level_bricklist = new LinkedList();
  75.    
  76.     /** @param    brick_positionX   Postition of Brick on the X-Coordinate */
  77.     private int brick_positionX = -1;
  78.    
  79.     /** @param    brick_positionY   Postition of Brick on the Y-Coordinate */
  80.     private int brick_positionY = -1;
  81.    
  82.     /** @param    brick_lenght   Lenght of the Brick */
  83.     private int brick_lenght = -1;
  84.    
  85.     /** @param    brick_height   Height of the Brick */
  86.     private int brick_height = -1;
  87.    
  88.     /** @param    brick_isVisible   Returns visibility */
  89.     private boolean brick_isVisible = true;
  90.    
  91.     /** @param    level_counter   Returns the actual level */
  92.     private int level_counter = 0;
  93.    
  94.     //</editor-fold>
  95.    
  96.     //Create new GUI and Panel
  97.     /** @param    game     JFrame, the Frame of the Game. */
  98.     final JFrame game = new JFrame();
  99.    
  100.     /** @param    canvas     JPanel, where the Magic happens. */
  101.     JPanel canvas = new paintObjects();
  102.    
  103.     //Creates a menubar for a JFrame
  104.     /** @param    menuBar     JManu, contains all statistics.
  105.      *                    <br>Available menus:
  106.      *                      <ul><b>returnToMenu</ul>
  107.      *                      <ul><b>pointCounter</ul>
  108.      *                      <ul><b>liveCounter</ul>
  109.      *                      <ul><b>levelCounter</ul>                      
  110.      */
  111.     JMenuBar menuBar = new JMenuBar();
  112.    
  113.     //</editor-fold>
  114.    
  115.    
  116.    
  117.     public void drawFrame(int frame_drawSizeX, int frame_drawSizeY)
  118.     {
  119.         System.out.println("Entering drawFrame();");
  120.        
  121.         //<editor-fold defaultstate="collapsed" desc=" Declaration and Definition of JFrame ">
  122.         game.setType(Window.Type.UTILITY);
  123.         game.setResizable(false);
  124.         game.setSize(frame_drawSizeX, frame_drawSizeY);
  125.         game.setLocationRelativeTo(null);
  126.         game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  127.         game.setVisible(true);
  128.        
  129.         canvas.addMouseMotionListener(this);
  130.         game.addKeyListener(this);
  131.         //</editor-fold>
  132.  
  133.         //<editor-fold defaultstate="collapsed" desc=" JFrame Dynamic Scaling ">
  134.         frame_getX = frame_drawSizeX;
  135.         frame_getY = frame_drawSizeY;
  136.         scaling();
  137.         //</editor-fold>
  138.        
  139.         //<editor-fold defaultstate="collapsed" desc=" Declaration and Definition of JMenu ">
  140.        
  141.         //Add the menubar to the frame
  142.         game.setJMenuBar(menuBar);
  143.  
  144.         //Define and add dropdown menus to the menubar
  145.         final JMenu returnToMenu = new JMenu("Return to Menu");
  146.         final JMenu pointCounter = new JMenu("Your Points: 0");
  147.         final JMenu liveCounter = new JMenu("Remaining Lives: 0");
  148.         final JMenu levelCounter = new JMenu("Level: 0");
  149.  
  150.         //Make them visible:
  151.         menuBar.add(returnToMenu);
  152.         menuBar.add(pointCounter);
  153.         menuBar.add(liveCounter);
  154.         menuBar.add(levelCounter);
  155.         //</editor-fold>
  156.        
  157.         //<editor-fold defaultstate="collapsed" desc=" Objects of class Brick/Levels ">
  158.        
  159.         Brick brick = new Brick();
  160.         Level level = new Level();
  161.        
  162.         //</editor-fold>
  163.        
  164.         game.setPreferredSize(new Dimension(frame_drawSizeX, frame_drawSizeY));
  165.         game.add(canvas);
  166.        
  167.         int delay = 100; //Milliseconds for delay
  168.        
  169.         ActionListener taskPerformer = new ActionListener()
  170.         {
  171.             //Run through this with delay
  172.             @Override
  173.             public void actionPerformed(ActionEvent evt)
  174.             {
  175.              
  176.               liveCounter.setText("Remaining Lives: " + player_lives);
  177.                
  178.               //Move the ball
  179.               ball_posX =+ ball_deltaX;
  180.               ball_posY =+ ball_deltaY;
  181.              
  182.               //<editor-fold defaultstate="collapsed" desc=" *Brick Variables SOUT ">
  183.              
  184.               // System.out.format("brick_positionX = %d \nbrick_positionY = %d \nbrick_lenght = %d \nbrick_height = %d \nbrick_isVisible = %b\n\n", brick_positionX, brick_positionY, brick_lenght, brick_height, brick_isVisible);
  185.              
  186.               //</editor-fold>
  187.              
  188.               game.repaint();
  189.              
  190.               //<editor-fold defaultstate="collapsed" desc=" Ball: Frame Collision ">
  191.              
  192.               //Collision of the ball hitting left border
  193.               if (ball_posX < 0)
  194.               {
  195.                    ball_deltaX *= -1;
  196.               }
  197.              
  198.               //Collision of the ball hitting right border
  199.               if (ball_posX + (2*ball_radius) >= game.getWidth())
  200.               {
  201.                    ball_deltaX *= -1;
  202.               }
  203.              
  204.               //Collision of the ball hitting upper border
  205.               if (ball_deltaY < 0)
  206.               {
  207.                   ball_deltaY *= -1;
  208.               }
  209.                    
  210.              
  211.               //Collision of the ball hitting lower border
  212.               if (ball_posY + ball_radius >= game.getHeight())
  213.               {
  214.                   if(player_lives > 0)
  215.                   {
  216.                     JOptionPane.showMessageDialog(null, "You lost one life.");
  217.                    
  218.                     player_lives -= 1;
  219.                     resetBall();
  220.                   }
  221.                   else
  222.                   {
  223.                     Object[] options =
  224.                     {
  225.                         "Yes.",
  226.                         "No.",
  227.                     };
  228.                    
  229.                     int optionDlg_result = JOptionPane.showOptionDialog(null,
  230.                         " YOU LOST. "
  231.                         + "Do you want to start over again?",
  232.                         "Lost.",
  233.                         JOptionPane.YES_NO_CANCEL_OPTION,
  234.                         JOptionPane.QUESTION_MESSAGE,
  235.                         null,
  236.                         options,
  237.                         options[1]);
  238.                    
  239.                     if(optionDlg_result == 0)
  240.                     {
  241.                         game.dispose();
  242.                         drawFrame(player_lives, player_lives);
  243.                     }
  244.                     else
  245.                     {
  246.                         exitGame();
  247.                     }
  248.                    
  249.                   }
  250.               }
  251.                  
  252.            
  253.              
  254.               //</editor-fold>
  255.              
  256.               //<editor-fold defaultstate="collapsed" desc=" Ball: Paddle Collision ">
  257.              
  258.               //Collision of the ball hitting left paddle
  259.               if (ball_posX < 0)
  260.               {
  261.                     System.out.println("Collision left");
  262.                     ball_deltaX *= -1;
  263.               }
  264.                    
  265.               //Collision of the ball hitting right paddle
  266.               if (ball_posX + (2*ball_radius) >= game.getWidth())
  267.               {
  268.                   System.out.println("Collision right");
  269.                   ball_deltaX *= -1;
  270.               }
  271.              
  272.               //Collision of the ball hitting upper paddle
  273.               if (paddle_posX <= (ball_posX + ball_radius) && ((paddle_posX + paddle_width) >= (ball_posX + ball_radius)) && (paddle_posY + paddle_height) >= ball_posY && (paddle_posY < ball_posY + ball_radius * 2))
  274.               {
  275.                     System.out.println("Collision up");
  276.                     ball_deltaY *= -1;
  277.               }
  278.               //</editor-fold>
  279.              
  280.               System.out.format("\n X: %f    Y: %f", ball_posX, ball_posY);
  281.               System.out.format("\nDX: %d   DY: %d\n", ball_deltaX, ball_deltaY);
  282.              
  283.             }
  284.         };
  285.         new Timer(delay, taskPerformer).start();
  286.     }
  287.  
  288.     public void resetBall()
  289.     {
  290.         JOptionPane.showMessageDialog(null, "Remaining lives: " + player_lives);
  291.         ball_posX = paddle_posX + (paddle_width/2); //Centered position
  292.         ball_posY = frame_getY*0.65; //65% of the Screen
  293.         ball_deltaX = 1;
  294.         ball_deltaY = 1;
  295.     }
  296.    
  297.     public void exitGame()
  298.     {
  299.         game.setVisible(false);
  300.         game.dispose();
  301.         Menu menu = new Menu();
  302.         menu.setVisible(true);
  303.     }
  304.    
  305.     public void scaling()
  306.     {
  307.        // System.out.format("\n\nBefore Scaling:\nball_posX = %f\nball_posY = %f\npaddle_posX = %f\npaddle_posY = %f\n\n", ball_posX, ball_posY, paddle_posX, paddle_posY);
  308.        // System.out.format("X: %f  ...  Y: %f\n", frame_getX, frame_getY);
  309.  
  310.         //Getting the paddle into a centered position
  311.         paddle_posX = frame_getX /2;
  312.        
  313.         paddle_posY = frame_getY*0.8; //From 80% of the Screen
  314.        
  315.         //Getting the ball into a centered position
  316.         ball_posX =  paddle_posX + (paddle_width/2);
  317.        
  318.         ball_posY = frame_getY*0.65; //From 65% of the Screen
  319.        
  320.        
  321.  
  322.         // System.out.format("\n\nAfter Scaling:\nball_posX = %f\nball_posY = %f\npaddle_posX = %f\npaddle_posY = %f\n\n", ball_posX, ball_posY, paddle_posX, paddle_posY);
  323.         // System.out.format("X: %f  ...  Y: %f\n", frame_getX, frame_getY);
  324.     }
  325.  
  326.    
  327.     // Additional abstract Methods
  328.     //<editor-fold defaultstate="collapsed" desc=" All abstract Methods ">
  329.    
  330.     @Override
  331.     public void keyTyped(KeyEvent ke) {}
  332.  
  333.     // Keyboard Controlls
  334.     @Override
  335.     public void keyPressed(KeyEvent ke)
  336.     {
  337.         System.out.println("Key Pressed!");
  338.         if(ke.getKeyCode() == KeyEvent.VK_RIGHT)
  339.         {
  340.           paddle_posX += 3;  
  341.         }
  342.  
  343.         if(ke.getKeyCode() == KeyEvent.VK_LEFT)
  344.         {
  345.           paddle_posX -= 3;  
  346.         }
  347.     }
  348.  
  349.     @Override
  350.     public void keyReleased(KeyEvent ke) {}
  351.    
  352.     //Mouse Controlls
  353.     @Override
  354.     public void mouseDragged(MouseEvent me) {
  355.        
  356.     }
  357.     //</editor-fold>
  358.    
  359.     // Movement of the paddle when Mouse is moved
  360.     @Override
  361.     public void mouseMoved(MouseEvent me)
  362.     {
  363.         paddle_posX = me.getX() - paddle_width / 2;
  364.  
  365.         if (paddle_posX < 0 || me.getX() < 0)
  366.         {
  367.           paddle_posX = 0;
  368.         }
  369.  
  370.         if (paddle_posX + paddle_width >= canvas.getWidth())
  371.         {
  372.           paddle_posX = canvas.getWidth() - paddle_width;
  373.         }
  374.     }
  375.    
  376.     // Drawing objects
  377.     class paintObjects extends JPanel
  378.     {
  379.        
  380.         @Override
  381.         protected void paintComponent(Graphics g)
  382.         {
  383.            
  384.             super.paintComponent(g);
  385.            
  386.             g.setColor(Color.BLACK);
  387.            
  388.             //g draws ball
  389.             g.fillOval( (int) ball_posX, (int) ball_posY, ball_radius*2, ball_radius*2);
  390.            
  391.             //g draws paddle
  392.             g.fillRect( (int) paddle_posX, (int) paddle_posY, paddle_width, paddle_height);
  393.            
  394.            
  395.            
  396.             //g draws bricks
  397.             //<editor-fold defaultstate="collapsed" desc=" *Brick Variables SOUT ">
  398.            
  399.             // System.out.format("brick_positionX = %d \nbrick_positionY = %d \nbrick_lenght = %d \nbrick_height = %d \nbrick_isVisible = %b\n\n", brick_positionX, brick_positionY, brick_lenght, brick_height, brick_isVisible);
  400.              
  401.             //</editor-fold>
  402.              
  403.             // System.out.println("SIZE: " + (int) level_bricklist.size());
  404.              
  405.             if(brick_isVisible == true)
  406.             {
  407.                 for(int i=0; i<level_bricklist.size(); i+=4)
  408.                 {
  409.                     g.drawRect( (int) level_bricklist.get(i), (int) level_bricklist.get(i+1), brick_lenght, brick_height);
  410.                 }
  411.                
  412.             }
  413.            
  414.         }
  415.     }  
  416.  
  417.  
  418. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement