Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package pong;
- import java.awt.Color;
- import java.awt.Font;
- import java.awt.Graphics2D;
- import java.awt.Image;
- import java.awt.RenderingHints;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import java.awt.event.KeyEvent;
- import java.awt.event.KeyListener;
- import java.awt.image.BufferedImage;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.InputStream;
- import java.util.Random;
- import sun.audio.*;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JPanel;
- import javax.swing.Timer;
- @SuppressWarnings("serial")
- public class PongDrawing extends JPanel implements KeyListener{
- boolean gameStart = false;
- Image startbg,startbutton;
- BufferedImage buffer;
- PongPlayer ply1;
- PongPlayer ply2;
- PongBall ball1;
- Font pongfont;
- Random generator = new Random();
- int dir = -1;
- boolean ply1lt, ply2lt;
- Timer startingtimer;
- int startnumber = 5;
- boolean startingtimerfinished = false;
- Timer soundStop1timer;
- int soundStop1number = 0;
- boolean stopSound = false;
- Timer soundStop2timer;
- int soundStop2number = 0;
- boolean stopSound2 = false;
- Timer soundStop3timer;
- int soundStop3number = 0;
- boolean stopSound3 = false;
- Timer soundStop4timer;
- int soundStop4number = 0;
- boolean stopSound4 = false;
- int leftorright = generator.nextInt(2) + 1;
- //FPS Limiter
- private long now;
- private int framesCount = 0;
- private int framesCountAvg=0;
- private long framesTimer=0;
- public PongDrawing(){
- setLayout(null);
- setIgnoreRepaint(true);
- setFocusable(true);
- if(gameStart == false){
- JButton startbutton = new JButton("Start Game");
- startbutton.setBounds(10,140,170,30);
- startbutton.addActionListener(new StartButtonHandler());
- add(startbutton);
- JButton exitbutton = new JButton("Exit Game");
- add(exitbutton);
- }
- if(gameStart == true){
- addKeyListener(this);
- }
- }
- class StartButtonHandler implements ActionListener{
- public void actionPerformed(ActionEvent e){
- gameStart = true;
- }
- }
- @SuppressWarnings("restriction")
- public void playSound(String filename){
- try{
- InputStream in = new FileInputStream(filename);
- AudioStream as = new AudioStream(in);
- AudioPlayer.player.start(as);
- }catch(Exception ex){}
- }
- public void keyTyped(KeyEvent e){
- }
- public void keyPressed(KeyEvent e){
- int key = e.getKeyCode();
- if(key == KeyEvent.VK_UP){
- ply1.up = true;
- }
- if(key == KeyEvent.VK_DOWN){
- ply1.down = true;
- }
- if(key == KeyEvent.VK_W){
- ply2.up = true;
- }
- if(key == KeyEvent.VK_S){
- ply2.down = true;
- }
- }
- public void keyReleased(KeyEvent e){
- int key = e.getKeyCode();
- if(key == KeyEvent.VK_UP){
- ply1.up = false;
- }
- if(key == KeyEvent.VK_DOWN){
- ply1.down = false;
- }
- if(key == KeyEvent.VK_W){
- ply2.up = false;
- }
- if(key == KeyEvent.VK_S){
- ply2.down = false;
- }
- if(key == KeyEvent.VK_ESCAPE){
- System.exit(1);
- }
- }
- public void initialize(){
- buffer = new BufferedImage(600,500,BufferedImage.TYPE_INT_RGB);
- //Ideal x = 15
- ply1 = new PongPlayer(15,150,15,100);
- //Ideal x = 569
- ply2 = new PongPlayer(565,150,15,100);
- startbg = new ImageIcon("D:/pong/pongbg.png").getImage();
- startbutton = new ImageIcon("D:/pong/start2pbutton.png").getImage();
- ball1 = new PongBall(250,185,15,15,6,6);
- startingtimer = new Timer(1000, new StartCounter());
- startingtimer.start();
- soundStop1timer = new Timer(1000, new SoundStop1());
- soundStop2timer = new Timer(1000, new SoundStop2());
- soundStop3timer = new Timer(1000, new SoundStop3());
- soundStop4timer = new Timer(1000, new SoundStop4());
- try{
- pongfont = Font.createFont(Font.TRUETYPE_FONT, new File("D:/pong/pong.ttf"));
- }catch(Exception ex){}
- }
- class SoundStop1 implements ActionListener{
- public void actionPerformed(ActionEvent e){
- soundStop1number++;
- if(soundStop1number == 2){
- soundStop1timer.stop();
- soundStop1number = 0;
- stopSound = false;
- }
- }
- }
- class SoundStop2 implements ActionListener{
- public void actionPerformed(ActionEvent e){
- soundStop2number++;
- if(soundStop2number == 2){
- soundStop2timer.stop();
- soundStop2number = 0;
- stopSound2 = false;
- }
- }
- }
- class SoundStop3 implements ActionListener{
- public void actionPerformed(ActionEvent e){
- soundStop3number++;
- if(soundStop3number == 2){
- soundStop3timer.stop();
- soundStop3number = 0;
- stopSound3 = false;
- }
- }
- }
- class SoundStop4 implements ActionListener{
- public void actionPerformed(ActionEvent e){
- soundStop4number++;
- if(soundStop4number == 2){
- soundStop4timer.stop();
- soundStop4number = 0;
- stopSound4 = false;
- }
- }
- }
- class StartCounter implements ActionListener{
- public void actionPerformed(ActionEvent e){
- if(startnumber <= 5){
- startnumber--;
- }
- if(startnumber == 0){
- startingtimer.stop();
- startingtimerfinished = true;
- dir = 0;
- }
- }
- }
- public void drawBuffer(){
- Graphics2D g = buffer.createGraphics();
- g.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
- if(gameStart == false){
- g.setColor(Color.RED);
- g.fillRect(0,0,600,500);
- g.drawImage(startbg,0,0,null);
- g.drawImage(startbutton,10,140,null);
- pongfont = pongfont.deriveFont(80f);
- g.setFont(pongfont);
- g.setColor(Color.WHITE);
- g.drawString("PONG",260,275);
- }
- if(gameStart == true){
- g.setColor(Color.BLACK);
- g.fillRect(0,0,600,500);
- g.setColor(Color.GREEN);
- g.fillRect(ply1.getX(),ply1.getY(),ply1.getWidth(),ply1.getHeight());
- g.setColor(Color.RED);
- g.fillRect(ply2.getX(),ply2.getY(),ply2.getWidth(),ply2.getHeight());
- g.setColor(Color.WHITE);
- g.fillOval(ball1.getX(),ball1.getY(),ball1.getWidth(),ball1.getHeight());
- g.drawString("" + framesCountAvg,2,10);
- g.drawString("" + ply1lt,2,22);
- g.drawString("" + ply2lt,2,34);
- if(startingtimerfinished == false){
- g.drawString("Game starts in: " + startnumber,200,50);
- }
- }
- }
- public void drawScreen(){
- Graphics2D g = (Graphics2D)this.getGraphics();
- g.drawImage(buffer,0,0,this);
- Toolkit.getDefaultToolkit().sync();
- g.dispose();
- }
- public void plyMove(){
- //Player1 Movement
- if(ply1.up == true){
- ply1.y -= ply1.speedY;
- }
- if(ply1.down == true){
- ply1.y += ply1.speedY;
- }
- //Player2 Movement
- if(ply2.up == true){
- ply2.y -= ply2.speedY;
- }
- if(ply2.down == true){
- ply2.y += ply2.speedY;
- }
- //Check ply1 borders
- if(ply1.y >= 372){
- ply1.y -= ply1.speedY;
- }
- if(ply1.y <= 0){
- ply1.y += ply1.speedY;
- }
- //Check ply2 borders
- if(ply2.y >= 372){
- ply2.y -= ply2.speedY;
- }
- if(ply2.y <= 0){
- ply2.y += ply2.speedY;
- }
- }
- public void plyBallCollisionCheck(){
- //ply1 collisions
- if(ball1.getBounds().intersects(ply1.getBounds())){
- if(stopSound == false){
- playSound("D:/pong/touch.wav");
- stopSound = true;
- }
- soundStop1timer.start();
- int random1 = generator.nextInt(2) + 3;
- dir = random1;
- }
- //ply2 collisions
- if(ball1.getBounds().intersects(ply2.getBounds())){
- if(stopSound2 == false){
- playSound("D:/pong/touch.wav");
- stopSound2 = true;
- }
- soundStop2timer.start();
- int random2 = generator.nextInt(2) + 1;
- dir = random2;
- }
- //upper ball collisions
- if(ball1.y <= 0){
- if(stopSound3 == false){
- playSound("D:/pong/touch.wav");
- stopSound3 = true;
- }
- soundStop3timer.start();
- if(ply1lt == true){
- dir = 4;
- }
- if(ply2lt == true){
- dir = 2;
- }
- }
- //down ball collisions
- if(ball1.y >= 452){
- if(stopSound4 == false){
- playSound("D:/pong/touch.wav");
- stopSound4 = true;
- }
- soundStop4timer.start();
- if(ply1lt == true){
- dir = 3;
- }
- if(ply2lt == true){
- dir = 1;
- }
- }
- if(ball1.x <= 0){
- System.out.println("Player RED gets 1 point.");
- ball1.stopBall();
- dir = 0;
- ball1.x = 250;
- ball1.y = 185;
- }
- if(ball1.x >= 580){
- System.out.println("Player GREEN gets 1 point.");
- ball1.stopBall();
- dir = 0;
- ball1.x = 250;
- ball1.y = 185;
- }
- }
- public void ballMove(){
- //left or right, starts with this
- if(dir == 0){
- if(leftorright == 1){
- ball1.x -= ball1.speedX;
- }
- if(leftorright == 2){
- ball1.x += ball1.speedX;
- }
- }
- //up and left
- if(dir == 1){
- ball1.x -= ball1.speedX;
- ball1.y -= ball1.speedY;
- }
- //down and left
- if(dir == 2){
- ball1.x -= ball1.speedX;
- ball1.y += ball1.speedY;
- }
- //up and right
- if(dir == 3){
- ball1.x += ball1.speedX;
- ball1.y -= ball1.speedY;
- }
- //down and right
- if(dir == 4){
- ball1.x += ball1.speedX;
- ball1.y += ball1.speedY;
- }
- }
- public void lastPlayerTouchedCheck(){
- if(ply1.getBounds().intersects(ball1.getBounds())){
- ply1lt = true;
- ply2lt = false;
- }
- if(ply2.getBounds().intersects(ball1.getBounds())){
- ply1lt = false;
- ply2lt = true;
- }
- }
- public void startGame(){
- initialize();
- while(true){
- drawScreen();
- drawBuffer();
- if(gameStart == true){
- plyMove();
- lastPlayerTouchedCheck();
- plyBallCollisionCheck();
- ballMove();
- }
- //FPS counter
- now=System.currentTimeMillis();
- framesCount++;
- if(now-framesTimer>1000){
- framesTimer=now;
- framesCountAvg=framesCount;
- framesCount=0;
- }
- try{
- Thread.sleep(14);
- }catch(Exception ex){}
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement