Today in this article I will show you how to make a Pong game in Java. I have made three classes in this game.
Pong game in Java
This is a two-player game in which players need to touch the ball with the paddle if the ball will not touch the paddle then the other player will get numbers and vice versa.
- The Main class from which all things are controlled.
- Ball class that draws the ball and also check its collision with the paddles.
- Paddle class that draws the paddles and also move the paddles up and down.
Main Class
- public class Ball implements Runnable {
- //Global variable
- int x, y, xDirection, yDirection;
- Rectangle ball;
- Paddle p1 = new Paddle(15, 140, 1); //paddle class objects
- Paddle p2 = new Paddle(770, 140, 2);
- //Score
- int p1Score, p2Score;
- //Ball Image
- Image BallImage;
- public Ball(int x, int y)
- {
- p1Score = p2Score = 0;
- this.x = x;
- this.y = y;
- Random r = new Random(); //creats Random numbers
- int rDir = r.nextInt(1);
- if (rDir == 0)
- {
- rDir--;
- }
- setXDirection(rDir);
- int yrDir = r.nextInt(1);
- if (yrDir == 0)
- {
- yrDir--;
- }
- setYDirection(yrDir);
- ball = new Rectangle(this.x, this.y, 15, 15);
- }
- //for set the xDirection of the ball
- public void setXDirection(int xdir)
- {
- xDirection = xdir;
- }
- //for set the yDirection of the ball
- public void setYDirection(int ydir)
- {
- yDirection = ydir;
- }
- public void draw(Graphics g)
- {
- java.net.URL urlBall = getClass().getResource("Ball.png"); //get ball image from the project folder
- BallImage = getImage(urlBall);
- g.drawImage(BallImage, this.ball.x, this.ball.y, null);
- }
- //Collision method
- public void collision()
- { //for paddle 1 collision
- if (ball.intersects(p1.paddle))
- {
- setXDirection(+1);
- }
- //for paddle 2 collision
- if (ball.intersects(p2.paddle))
- {
- setXDirection(-1);
- }
- }
- //Move method
- public void move()
- {
- collision();
- ball.x += xDirection;
- ball.y += yDirection;
- //Bounce the ball when edge is detected
- if (ball.x <= 0)
- {
- setXDirection(+1);
- p2Score++;
- }
- if (ball.x >= 785)
- {
- setXDirection(-1);
- p1Score++;
- }
- if (ball.y <= 0)
- {
- setYDirection(+1);
- }
- if (ball.y >= 485)
- {
- setYDirection(-1);
- }
- }
- //Run method Thread Start from here
- public void run()
- {
- try {
- while (true)
- {
- move();
- Thread.sleep(2);
- }
- } catch (Exception e)
- {
- System.err.println(e.getMessage());
- }
- }
- }
- public class Ball implements Runnable
- {
- //Global variable
- int x, y, xDirection, yDirection;
- Rectangle ball;
- Paddle p1 = new Paddle(15, 140, 1); //paddle class objects
- Paddle p2 = new Paddle(770, 140, 2);
- //Score
- int p1Score, p2Score
- //Ball Image
- Image BallImage;
- public Ball(int x, int y)
- {
- p1Score = p2Score = 0;
- this.x = x;
- this.y = y;
- Random r = new Random(); //creats Random numbers
- int rDir = r.nextInt(1);
- if (rDir == 0)
- {
- rDir--;
- }
- setXDirection(rDir);
- int yrDir = r.nextInt(1);
- if (yrDir == 0)
- {
- yrDir--;
- }
- setYDirection(yrDir);
- ball = new Rectangle(this.x, this.y, 15, 15);
- }
- //for set the xDirection of the ball
- public void setXDirection(int xdir)
- {
- xDirection = xdir;
- }
- //for set the yDirection of the ball
- public void setYDirection(int ydir)
- {
- yDirection = ydir;
- }
- public void draw(Graphics g)
- {
- java.net.URL urlBall = getClass().getResource("Ball.png"); //get ball image from the project folder
- BallImage = getImage(urlBall);
- g.drawImage(BallImage, this.ball.x, this.ball.y, null);
- }
- //Collision method
- public void collision()
- {
- //for paddle 1 collision
- if (ball.intersects(p1.paddle))
- {
- setXDirection(+1);
- }
- //for paddle 2 collision
- if (ball.intersects(p2.paddle))
- {
- setXDirection(-1);
- }
- }
- //Move method
- public void move()
- {
- collision();
- ball.x += xDirection;
- ball.y += yDirection;
- //Bounce the ball when edge is detected
- if (ball.x <= 0)
- {
- setXDirection(+1);
- p2Score++;
- }
- if (ball.x >= 785)
- {
- setXDirection(-1);
- p1Score++;
- }
- if (ball.y <= 0)
- {
- setYDirection(+1);
- }
- if (ball.y >= 485)
- {
- setYDirection(-1);
- }
- }
- //Run method Thread Start from here
- public void run()
- {
- try {
- while (true)
- {
- move();
- Thread.sleep(2)
- }
- } catch (Exception e)
- {
- System.err.println(e.getMessage());
- }
- }
- }
- public class Paddle implements Runnable
- {
- //Global Variables
- int x, y, yDirection, id;
- Rectangle paddle;
- Image PaddleImage1;
- Image PaddleImage2;
- public Paddle(int x, int y, int id)
- {
- this.x = x;
- this.y = y;
- this.id = id;
- paddle = new Rectangle(x, y, 10, 80);
- }
- //Keypressed event function
- public void keyPressed(KeyEvent e)
- {
- switch (id)
- {
- //for Paddle 1
- case 1:
- if (e.getKeyCode() == e.VK_W)
- {
- setYDirection(-1);
- }
- if (e.getKeyCode() == e.VK_S)
- {
- setYDirection(1);
- }
- break;
- //for Paddle 2
- case 2:
- if (e.getKeyCode() == e.VK_UP)
- {
- setYDirection(-1);
- }
- if (e.getKeyCode() == e.VK_DOWN)
- {
- setYDirection(+1);
- }
- break;
- default:
- System.out.println("Enter correct id");
- break;
- }
- }
- public void keyReleased(KeyEvent e)
- {
- switch (id)
- {
- //for Paddle 1
- case 1:
- if (e.getKeyCode() == e.VK_W)
- {
- setYDirection(0);
- }
- if (e.getKeyCode() == e.VK_S)
- {
- setYDirection(0);
- }
- break;
- //for Paddle 2
- case 2:
- if (e.getKeyCode() == e.VK_UP)
- {
- setYDirection(0);
- }
- if (e.getKeyCode() == e.VK_DOWN)
- {
- setYDirection(0);
- }
- break;
- default:
- System.out.println("Enter correct id");
- break;
- }
- }
- public void setYDirection(int ydir)
- {
- yDirection = ydir;
- }
- public void move()
- {
- paddle.y += yDirection;
- if (paddle.y <= 30)
- {
- paddle.y = 30;
- }
- if (paddle.y >= 405)
- {
- paddle.y = 405;
- }
- }
- public void draw(Graphics g)
- {
- java.net.URL url1 = getClass().getResource("PaddleImage1.png"); //get image
- PaddleImage1 = getImage(url1);
- java.net.URL url2 = getClass().getResource("PaddleImage2.png");
- PaddleImage2 = getImage(url2);
- switch (id)
- {
- //for Paddle 1
- case 1:
- g.drawImage(PaddleImage1, this.paddle.x, this.paddle.y, null);
- break;
- //for Paddle 2
- case 2:
- g.drawImage(PaddleImage2, this.paddle.x, this.paddle.y, null);
- break;
- default:
- System.out.println("Enter correct id");
- }
- }
- @Override
- //Thread Start from here
- public void run()
- {
- try
- {
- while (true)
- {
- move();
- Thread.sleep(4);
- }
- } catch (Exception e)
- {
- System.err.println(e.getMessage());
- }
- }
- }

guptha kamisettyPosted Jun 3, 2021, 7:40 AM
Where had you given the source code?
Gowtham RajamanickamPosted May 19, 2015, 12:49 AM
good one
Ehtesham MehmoodPosted Mar 31, 2014, 8:18 PM
Thanx and Welcome :)
Maleeha KhawarPosted Mar 30, 2014, 2:32 PM
Good work (y) thanks for sharing