Open In App

Pinball Game in Java

Last Updated : 14 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Pinball is a classic arcade game that has been around since the 1930s. It involves the player using flippers to hit a ball around a table aiming to score points by hitting various targets and obstacles. A sample GIF is given below to get an idea about what we are going to do in this article.

 

Implementation

Java




package abc;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
  
public class a extends JPanel implements ActionListener {
  
    private Timer timer;
    private int ballX, ballY;
    private int paddleX;
    private int dx, dy;
  
    public a() {
        
        setBackground(Color.BLACK);
        setPreferredSize(new Dimension(600, 400));
        setFocusable(true);
  
        ballX = 200;
        ballY = 200;
        paddleX = 250;
        dx = 3;
        dy = 3;
  
        timer = new Timer(10, this);
        timer.start();
  
        addKeyListener(new KeyAdapter() {
            public void keyPressed(KeyEvent e) {
                if (e.getKeyCode() == KeyEvent.VK_LEFT) {
                    paddleX -= 10;
                    if (paddleX < 0)
                        paddleX = 0;
                } else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {
                    paddleX += 10;
                    if (paddleX > getWidth() - 100)
                        paddleX = getWidth() - 100;
                }
            }
        });
    }
  
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.WHITE);
        g.fillOval(ballX, ballY, 20, 20);
        g.fillRect(paddleX, getHeight() - 20, 100, 10);
    }
  
    public void actionPerformed(ActionEvent e) {
        
        ballX += dx;
        ballY += dy;
  
        if (ballX < 0 || ballX > getWidth() - 20)
            dx = -dx;
  
        if (ballY < 0 || ballY > getHeight() - 20)
            dy = -dy;
  
        if (ballY > getHeight() - 30 && ballX >= paddleX && ballX <= paddleX + 100)
            dy = -dy;
  
        repaint();
    }
  
    public static void main(String[] args) {
        JFrame frame = new JFrame("Pinball");
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().add(new a());
        frame.pack();
        frame.setVisible(true);
    }
}


Output

 

Code Explanation

  • Pinball class extends the JFrame class and implements the ActionListener interface which allows it to handle events.
  • The timer object is created to update the game every 10 milliseconds.
  • The ballX, ballY, and ballSize variables are used to keep track of the ball’s position and size.
  • The ballXdir and ballYdir variables are used to control the ball’s direction and speed.
  • The paddleX, paddleY, paddleWidth, and paddleHeight variables are used to keep track of the paddle’s position and size.
  • The Pinball constructor sets the size of the window sets the title of the game starts the timer
  •  adds a key listener to handle input, and sets the window to be visible.
  • The paint method is called whenever the window needs to be redrawn. It draws the ball and paddle on the screen.


Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads