Advertisement
Guest User

Untitled

a guest
Jun 3rd, 2011
134
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.64 KB | None | 0 0
  1. package pong;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics2D;
  6. import java.awt.Image;
  7. import java.awt.RenderingHints;
  8. import java.awt.Toolkit;
  9. import java.awt.event.ActionEvent;
  10. import java.awt.event.ActionListener;
  11. import java.awt.event.KeyEvent;
  12. import java.awt.event.KeyListener;
  13. import java.awt.image.BufferedImage;
  14. import java.io.File;
  15. import java.io.FileInputStream;
  16. import java.io.InputStream;
  17. import java.util.Random;
  18. import sun.audio.*;
  19. import javax.swing.ImageIcon;
  20. import javax.swing.JButton;
  21. import javax.swing.JPanel;
  22. import javax.swing.Timer;
  23.  
  24. @SuppressWarnings("serial")
  25. public class PongDrawing extends JPanel implements KeyListener{
  26.    
  27.     boolean gameStart = false;
  28.     Image startbg,startbutton;
  29.    
  30.     BufferedImage buffer;
  31.    
  32.     PongPlayer ply1;
  33.     PongPlayer ply2;
  34.     PongBall ball1;
  35.    
  36.     Font pongfont;
  37.    
  38.     Random generator = new Random();
  39.    
  40.     int dir = -1;
  41.    
  42.     boolean ply1lt, ply2lt;
  43.    
  44.     Timer startingtimer;
  45.     int startnumber = 5;
  46.     boolean startingtimerfinished = false;
  47.    
  48.     Timer soundStop1timer;
  49.     int soundStop1number = 0;
  50.     boolean stopSound = false;
  51.    
  52.     Timer soundStop2timer;
  53.     int soundStop2number = 0;
  54.     boolean stopSound2 = false;
  55.    
  56.     Timer soundStop3timer;
  57.     int soundStop3number = 0;
  58.     boolean stopSound3 = false;
  59.    
  60.     Timer soundStop4timer;
  61.     int soundStop4number = 0;
  62.     boolean stopSound4 = false;
  63.    
  64.     int leftorright = generator.nextInt(2) + 1;
  65.    
  66.     //FPS Limiter
  67.     private long now;
  68.     private int framesCount = 0;
  69.     private int framesCountAvg=0;
  70.     private long framesTimer=0;
  71.    
  72.     public PongDrawing(){
  73.         setLayout(null);
  74.         setIgnoreRepaint(true);
  75.         setFocusable(true);
  76.         if(gameStart == false){
  77.             JButton startbutton = new JButton("Start Game");
  78.             startbutton.setBounds(10,140,170,30);
  79.             startbutton.addActionListener(new StartButtonHandler());
  80.             add(startbutton);
  81.             JButton exitbutton = new JButton("Exit Game");
  82.             add(exitbutton);
  83.         }
  84.         if(gameStart == true){
  85.             addKeyListener(this);
  86.         }
  87.     }
  88.    
  89.     class StartButtonHandler implements ActionListener{
  90.         public void actionPerformed(ActionEvent e){
  91.             gameStart = true;
  92.         }
  93.     }
  94.    
  95.     @SuppressWarnings("restriction")
  96.     public void playSound(String filename){
  97.         try{
  98.             InputStream in = new FileInputStream(filename);
  99.             AudioStream as = new AudioStream(in);
  100.             AudioPlayer.player.start(as);
  101.         }catch(Exception ex){}
  102.     }
  103.    
  104.     public void keyTyped(KeyEvent e){
  105.     }
  106.    
  107.     public void keyPressed(KeyEvent e){
  108.         int key = e.getKeyCode();
  109.         if(key == KeyEvent.VK_UP){
  110.             ply1.up = true;
  111.         }
  112.         if(key == KeyEvent.VK_DOWN){
  113.             ply1.down = true;
  114.         }
  115.         if(key == KeyEvent.VK_W){
  116.             ply2.up = true;
  117.         }
  118.         if(key == KeyEvent.VK_S){
  119.             ply2.down = true;
  120.         }
  121.     }
  122.    
  123.     public void keyReleased(KeyEvent e){
  124.         int key = e.getKeyCode();
  125.         if(key == KeyEvent.VK_UP){
  126.             ply1.up = false;
  127.         }
  128.         if(key == KeyEvent.VK_DOWN){
  129.             ply1.down = false;
  130.         }
  131.         if(key == KeyEvent.VK_W){
  132.             ply2.up = false;
  133.         }
  134.         if(key == KeyEvent.VK_S){
  135.             ply2.down = false;
  136.         }
  137.         if(key == KeyEvent.VK_ESCAPE){
  138.             System.exit(1);
  139.         }
  140.     }
  141.    
  142.     public void initialize(){
  143.         buffer = new BufferedImage(600,500,BufferedImage.TYPE_INT_RGB);
  144.         //Ideal x = 15
  145.         ply1 = new PongPlayer(15,150,15,100);
  146.         //Ideal x = 569
  147.         ply2 = new PongPlayer(565,150,15,100);
  148.        
  149.         startbg = new ImageIcon("D:/pong/pongbg.png").getImage();
  150.         startbutton = new ImageIcon("D:/pong/start2pbutton.png").getImage();
  151.        
  152.         ball1 = new PongBall(250,185,15,15,6,6);
  153.        
  154.         startingtimer = new Timer(1000, new StartCounter());
  155.         startingtimer.start(); 
  156.        
  157.         soundStop1timer = new Timer(1000, new SoundStop1());
  158.         soundStop2timer = new Timer(1000, new SoundStop2());
  159.         soundStop3timer = new Timer(1000, new SoundStop3());
  160.         soundStop4timer = new Timer(1000, new SoundStop4());
  161.        
  162.         try{
  163.             pongfont = Font.createFont(Font.TRUETYPE_FONT, new File("D:/pong/pong.ttf"));
  164.         }catch(Exception ex){}
  165.     }
  166.    
  167.     class SoundStop1 implements ActionListener{
  168.         public void actionPerformed(ActionEvent e){
  169.             soundStop1number++;
  170.             if(soundStop1number == 2){
  171.                 soundStop1timer.stop();
  172.                 soundStop1number = 0;
  173.                 stopSound = false;
  174.             }
  175.         }
  176.     }
  177.    
  178.     class SoundStop2 implements ActionListener{
  179.         public void actionPerformed(ActionEvent e){
  180.             soundStop2number++;
  181.             if(soundStop2number == 2){
  182.                 soundStop2timer.stop();
  183.                 soundStop2number = 0;
  184.                 stopSound2 = false;
  185.             }
  186.         }
  187.     }
  188.    
  189.     class SoundStop3 implements ActionListener{
  190.         public void actionPerformed(ActionEvent e){
  191.             soundStop3number++;
  192.             if(soundStop3number == 2){
  193.                 soundStop3timer.stop();
  194.                 soundStop3number = 0;
  195.                 stopSound3 = false;
  196.             }
  197.         }
  198.     }
  199.    
  200.     class SoundStop4 implements ActionListener{
  201.         public void actionPerformed(ActionEvent e){
  202.             soundStop4number++;
  203.             if(soundStop4number == 2){
  204.                 soundStop4timer.stop();
  205.                 soundStop4number = 0;
  206.                 stopSound4 = false;
  207.             }
  208.         }
  209.     }
  210.    
  211.     class StartCounter implements ActionListener{
  212.         public void actionPerformed(ActionEvent e){
  213.             if(startnumber <= 5){
  214.                 startnumber--;
  215.             }
  216.             if(startnumber == 0){
  217.                 startingtimer.stop();
  218.                 startingtimerfinished = true;
  219.                 dir = 0;
  220.             }
  221.         }
  222.     }  
  223.    
  224.     public void drawBuffer(){
  225.         Graphics2D g = buffer.createGraphics();
  226.         g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
  227.         if(gameStart == false){
  228.             g.setColor(Color.RED);
  229.             g.fillRect(0,0,600,500);
  230.             g.drawImage(startbg,0,0,null);
  231.             g.drawImage(startbutton,10,140,null);
  232.             pongfont = pongfont.deriveFont(80f);
  233.             g.setFont(pongfont);
  234.             g.setColor(Color.WHITE);
  235.             g.drawString("PONG",260,275);
  236.         }
  237.         if(gameStart == true){
  238.             g.setColor(Color.BLACK);
  239.             g.fillRect(0,0,600,500);
  240.             g.setColor(Color.GREEN);
  241.             g.fillRect(ply1.getX(),ply1.getY(),ply1.getWidth(),ply1.getHeight());
  242.             g.setColor(Color.RED);
  243.             g.fillRect(ply2.getX(),ply2.getY(),ply2.getWidth(),ply2.getHeight());
  244.             g.setColor(Color.WHITE);
  245.             g.fillOval(ball1.getX(),ball1.getY(),ball1.getWidth(),ball1.getHeight());
  246.             g.drawString("" + framesCountAvg,2,10);
  247.             g.drawString("" + ply1lt,2,22);
  248.             g.drawString("" + ply2lt,2,34);
  249.             if(startingtimerfinished == false){
  250.                 g.drawString("Game starts in: " + startnumber,200,50);
  251.             }
  252.         }
  253.     }
  254.    
  255.     public void drawScreen(){
  256.         Graphics2D g = (Graphics2D)this.getGraphics();
  257.         g.drawImage(buffer,0,0,this);
  258.         Toolkit.getDefaultToolkit().sync();
  259.         g.dispose();
  260.     }
  261.    
  262.     public void plyMove(){
  263.         //Player1 Movement
  264.         if(ply1.up == true){
  265.             ply1.y -= ply1.speedY;
  266.         }
  267.         if(ply1.down == true){
  268.             ply1.y += ply1.speedY;
  269.         }
  270.         //Player2 Movement
  271.         if(ply2.up == true){
  272.             ply2.y -= ply2.speedY;
  273.         }
  274.         if(ply2.down == true){
  275.             ply2.y += ply2.speedY;
  276.         }
  277.         //Check ply1 borders
  278.         if(ply1.y >= 372){
  279.             ply1.y -= ply1.speedY;
  280.         }
  281.         if(ply1.y <= 0){
  282.             ply1.y += ply1.speedY;
  283.         }
  284.         //Check ply2 borders
  285.         if(ply2.y >= 372){
  286.             ply2.y -= ply2.speedY;
  287.         }
  288.         if(ply2.y <= 0){
  289.             ply2.y += ply2.speedY;
  290.         }
  291.     }
  292.    
  293.     public void plyBallCollisionCheck(){
  294.         //ply1 collisions
  295.         if(ball1.getBounds().intersects(ply1.getBounds())){
  296.             if(stopSound == false){
  297.                 playSound("D:/pong/touch.wav");
  298.                 stopSound = true;
  299.             }
  300.             soundStop1timer.start();
  301.            
  302.             int random1 = generator.nextInt(2) + 3;
  303.             dir = random1;
  304.         }
  305.         //ply2 collisions
  306.         if(ball1.getBounds().intersects(ply2.getBounds())){
  307.             if(stopSound2 == false){
  308.                 playSound("D:/pong/touch.wav");
  309.                 stopSound2 = true;
  310.             }
  311.             soundStop2timer.start();
  312.            
  313.             int random2 = generator.nextInt(2) + 1;
  314.             dir = random2;
  315.         }
  316.         //upper ball collisions
  317.         if(ball1.y <= 0){
  318.             if(stopSound3 == false){
  319.                 playSound("D:/pong/touch.wav");
  320.                 stopSound3 = true;
  321.             }
  322.             soundStop3timer.start();
  323.             if(ply1lt == true){
  324.                 dir = 4;
  325.             }
  326.             if(ply2lt == true){
  327.                 dir = 2;
  328.             }
  329.         }
  330.         //down ball collisions
  331.         if(ball1.y >= 452){
  332.             if(stopSound4 == false){
  333.                 playSound("D:/pong/touch.wav");
  334.                 stopSound4 = true;
  335.             }
  336.             soundStop4timer.start();
  337.             if(ply1lt == true){
  338.                 dir = 3;
  339.             }
  340.             if(ply2lt == true){
  341.                 dir = 1;
  342.             }
  343.         }
  344.         if(ball1.x <= 0){
  345.             System.out.println("Player RED gets 1 point.");
  346.             ball1.stopBall();
  347.             dir = 0;
  348.             ball1.x = 250;
  349.             ball1.y = 185;
  350.         }
  351.         if(ball1.x >= 580){
  352.             System.out.println("Player GREEN gets 1 point.");
  353.             ball1.stopBall();
  354.             dir = 0;
  355.             ball1.x = 250;
  356.             ball1.y = 185;
  357.         }
  358.     }
  359.    
  360.     public void ballMove(){
  361.         //left or right, starts with this
  362.         if(dir == 0){
  363.             if(leftorright == 1){
  364.                 ball1.x -= ball1.speedX;
  365.             }
  366.             if(leftorright == 2){
  367.                 ball1.x += ball1.speedX;
  368.             }
  369.         }
  370.         //up and left
  371.         if(dir == 1){
  372.             ball1.x -= ball1.speedX;
  373.             ball1.y -= ball1.speedY;
  374.         }
  375.         //down and left
  376.         if(dir == 2){
  377.             ball1.x -= ball1.speedX;
  378.             ball1.y += ball1.speedY;
  379.         }
  380.         //up and right
  381.         if(dir == 3){
  382.             ball1.x += ball1.speedX;
  383.             ball1.y -= ball1.speedY;
  384.         }
  385.         //down and right
  386.         if(dir == 4){
  387.             ball1.x += ball1.speedX;
  388.             ball1.y += ball1.speedY;
  389.         }
  390.     }
  391.    
  392.     public void lastPlayerTouchedCheck(){
  393.         if(ply1.getBounds().intersects(ball1.getBounds())){
  394.             ply1lt = true;
  395.             ply2lt = false;
  396.         }
  397.         if(ply2.getBounds().intersects(ball1.getBounds())){
  398.             ply1lt = false;
  399.             ply2lt = true;
  400.         }
  401.     }
  402.  
  403.     public void startGame(){
  404.         initialize();
  405.         while(true){
  406.             drawScreen();
  407.             drawBuffer();
  408.             if(gameStart == true){
  409.                 plyMove();
  410.                 lastPlayerTouchedCheck();
  411.                 plyBallCollisionCheck();
  412.                 ballMove();
  413.             }
  414.            
  415.             //FPS counter
  416.             now=System.currentTimeMillis();
  417.             framesCount++;
  418.             if(now-framesTimer>1000){
  419.                 framesTimer=now;
  420.                 framesCountAvg=framesCount;
  421.                 framesCount=0;
  422.             }
  423.            
  424.             try{
  425.                 Thread.sleep(14);
  426.             }catch(Exception ex){}
  427.         }
  428.     }
  429.  
  430. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement