
If you’ve ever played the classic Brick Breaker game, where the goal was to eliminate all the bricks in each level by bouncing your ball off them, then you’ll love building this game! In this article, I’ll show you how to program a Brick Breaker Game in Java with Swing. We’ll use an array to keep track of how many times each brick has been hit, as well as to determine when there are no more bricks left on the board.
Project overview: Brick Breaker Game in Java
Project Name: | Brick Breaker Game in Java |
Abstract: | It’s a GUI-based project used with the swing library to organize all the elements that work under the Brick Breaker game. |
Language Used: | Java |
IDE: | VS Code |
Java version (Recommended): | Java SE 18.0. 2.1 |
Database: | None |
Type: | Desktop Application |
Recommended for: | Beginners of Java |
Time to build: | 1-2 hours |
What you will learn?
- Data structures like 2D arrays
- Handling Classes and Object creations
- Java Swing and Java AWT for creating a user-friendly GUI
Features
- Use the left, and right keys to move the paddle left and right
- The current score is updated every time the ball hits the brick and displayed
- Game over if the ball does not hit the paddle and goes out of the border
- The player wins when all bricks are broken
Complete Code for Brick Breaker game in Java:
To detect collisions between objects, we need to use nested if statements to compare each object’s coordinates. Now, Create a project folder and a file named Main.java and add the below lines of code to it. Comments are provided for explanation.
import javax.swing.*;import java.awt.*;import java.awt.event.*;class MapGenerator {public int map [][];public int brickWidth;public int brickHeight;// this creates the brick of size 3x7public MapGenerator(int row, int col) {map = new int [row][col];for (int i = 0; i < map.length; i++) {for (int j=0; j< map[0].length;j++) {map[i][j] = 1;}}brickWidth = 540/col;brickHeight = 150/row;}// this draws the brickspublic void draw(Graphics2D g) {for (int i = 0; i < map.length; i++) {for (int j=0; j< map[0].length;j++) {if(map[i][j] > 0) {g.setColor(new Color(0XFF8787)); // brick colorg.fillRect(j*brickWidth + 80, i*brickHeight + 50, brickWidth, brickHeight);g.setStroke(new BasicStroke(4));g.setColor(Color.BLACK);g.drawRect(j*brickWidth + 80, i*brickHeight + 50, brickWidth, brickHeight);}}}}// this sets the value of brick to 0 if it is hit by the ballpublic void setBrickValue(int value, int row, int col) {map[row][col] = value;}}class GamePlay extends JPanel implements KeyListener, ActionListener {private boolean play = true;private int score = 0;private int totalBricks = 21;private Timer timer;private int delay = 8;private int playerX = 310;private int ballposX = 120;private int ballposY = 350;private int ballXdir = -1;private int ballYdir = -2;private MapGenerator map;public GamePlay() {map = new MapGenerator(3, 7);addKeyListener(this);setFocusable(true);setFocusTraversalKeysEnabled(false);timer = new Timer(delay, this);timer.start();}public void paint(Graphics g) {//background colorg.setColor(Color.YELLOW);g.fillRect(1, 1, 692, 592);map.draw((Graphics2D)g);g.fillRect(0, 0, 3, 592);g.fillRect(0, 0, 692, 3);g.fillRect(691, 0, 3, 592);g.setColor(Color.blue);g.fillRect(playerX, 550, 100, 12);g.setColor(Color.RED); // ball colorg.fillOval(ballposX, ballposY, 20, 20);g.setColor(Color.black);g.setFont(new Font("MV Boli", Font.BOLD, 25));g.drawString("Score: " + score, 520, 30);if (totalBricks <= 0) { // if all bricks are destroyed then you winplay = false;ballXdir = 0;ballYdir = 0;g.setColor(new Color(0XFF6464));g.setFont(new Font("MV Boli", Font.BOLD, 30));g.drawString("You Won, Score: " + score, 190, 300);g.setFont(new Font("MV Boli", Font.BOLD, 20));g.drawString("Press Enter to Restart.", 230, 350);}if(ballposY > 570) { // if ball goes below the paddle then you loseplay = false;ballXdir = 0;ballYdir = 0;g.setColor(Color.BLACK);g.setFont(new Font("MV Boli", Font.BOLD, 30));g.drawString("Game Over, Score: " + score, 190, 300);g.setFont(new Font("MV Boli", Font.BOLD, 20));g.drawString("Press Enter to Restart", 230, 350);}g.dispose();}@Overridepublic void actionPerformed(ActionEvent arg0) {timer.start();if(play) {// Ball - Pedal interactionif(new Rectangle(ballposX, ballposY, 20, 20).intersects(new Rectangle(playerX, 550, 100, 8))) {ballYdir = - ballYdir;}for( int i = 0; i<map.map.length; i++) { // Ball - Brick interactionfor(int j = 0; j<map.map[0].length; j++) { // map.map[0].length is the number of columnsif(map.map[i][j] > 0) {int brickX = j*map.brickWidth + 80;int brickY = i*map.brickHeight + 50;int brickWidth= map.brickWidth;int brickHeight = map.brickHeight;Rectangle rect = new Rectangle(brickX, brickY, brickWidth, brickHeight);Rectangle ballRect = new Rectangle(ballposX, ballposY, 20,20);Rectangle brickRect = rect;if(ballRect.intersects(brickRect) ) {map.setBrickValue(0, i, j);totalBricks--;score+=5;if(ballposX + 19 <= brickRect.x || ballposX +1 >= brickRect.x + brickRect.width)ballXdir = -ballXdir;else {ballYdir = -ballYdir;}}}}}ballposX += ballXdir;ballposY += ballYdir;if(ballposX < 0) { // if ball hits the left wall then it bounces backballXdir = -ballXdir;}if(ballposY < 0) { // if ball hits the top wall then it bounces backballYdir = -ballYdir;}if(ballposX > 670) { // if ball hits the right wall then it bounces backballXdir = -ballXdir;}}repaint();}@Overridepublic void keyTyped(KeyEvent arg0) {}@Overridepublic void keyPressed(KeyEvent arg0) {if(arg0.getKeyCode() == KeyEvent.VK_RIGHT) { // if right arrow key is pressed then paddle moves rightif(playerX >= 600) {playerX = 600;} else {moveRight();}}if(arg0.getKeyCode() == KeyEvent.VK_LEFT) { // if left arrow key is pressed then paddle moves leftif(playerX < 10) {playerX = 10;} else {moveLeft();}}if(arg0.getKeyCode() == KeyEvent.VK_ENTER) { // if enter key is pressed then game restartsif(!play) {play = true;ballposX = 120;ballposY = 350;ballXdir = -1;ballYdir = -2;score = 0;totalBricks = 21;map = new MapGenerator(3,7);repaint();}}}public void moveRight() { // paddle moves right by 50 pixelsplay = true;playerX += 50;}public void moveLeft() { // paddle moves left by 50 pixelsplay = true;playerX -= 50;}@Overridepublic void keyReleased(KeyEvent arg0) {}}class Main {public static void main(String[] args) {JFrame obj = new JFrame();GamePlay gamePlay = new GamePlay();obj.setBounds(10, 10, 700, 600);obj.setTitle("Brick Breaker");obj.setResizable(false);obj.setVisible(true);obj.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);obj.add(gamePlay);}}
Output:
Also Read:
- Dino Game in Java
- Java Games Code | Copy And Paste
- Supply Chain Management System in Java
- Survey Management System In Java
- Phone Book in Java
- Email Application in Java
- Inventory Management System Project in Java
- Blood Bank Management System Project in Java
- Electricity Bill Management System Project in Java
- CGPA Calculator App In Java
- Chat Application in Java
- 100+ Java Projects for Beginners 2023
- Airline Reservation System Project in Java
- Password and Notes Manager in Java
- GUI Number Guessing Game in Java
- How to create Notepad in Java?
- Memory Game in Java
- Simple Car Race Game in Java
- ATM program in Java
- Drawing Application In Java
- Tetris Game in Java
- Pong Game in Java
- Hospital Management System Project in Java
- Ludo Game in Java
- Restaurant Management System Project in Java
- Flappy Bird Game in Java
- ATM Simulator In Java
- Brick Breaker Game in Java
- Best Java Roadmap for Beginners 2023
- Snake Game in Java