Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Brick Breaker Game

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 7

import javax.swing.

*;

import java.awt.*;

import java.awt.event.*;

public class BrickBreaker extends JFrame implements ActionListener {

private static final int WIDTH = 800;

private static final int HEIGHT = 600;

private static final int PADDLE_WIDTH = 100;

private static final int PADDLE_HEIGHT = 20;

private static final int BALL_SIZE = 20;

private static final int BRICK_ROWS = 5;

private static final int BRICK_COLS = 10;

private static final int BRICK_WIDTH = 70;

private static final int BRICK_HEIGHT = 30;

private static final int INITIAL_SCORE = 0;

private Timer timer;

private int paddleX;

private int ballX, ballY, ballXSpeed, ballYSpeed;

private int score;

private boolean gameStarted;

private boolean gameOver;

private boolean bricks[][];


public BrickBreaker() {

setTitle("Brick Breaker");

setSize(WIDTH, HEIGHT);

setResizable(false);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocationRelativeTo(null);

paddleX = WIDTH / 2 - PADDLE_WIDTH / 2;

ballX = WIDTH / 2 - BALL_SIZE / 2;

ballY = HEIGHT - PADDLE_HEIGHT - BALL_SIZE;

ballXSpeed = 3;

ballYSpeed = -3;

score = INITIAL_SCORE;

gameStarted = false;

gameOver = false;

bricks = new boolean[BRICK_ROWS][BRICK_COLS];

addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent e) {

if (e.getKeyCode() == KeyEvent.VK_LEFT) {

if (paddleX > 0) {

paddleX -= 20;

} else if (e.getKeyCode() == KeyEvent.VK_RIGHT) {


if (paddleX < WIDTH - PADDLE_WIDTH) {

paddleX += 20;

} else if (e.getKeyCode() == KeyEvent.VK_SPACE) {

if (!gameStarted) {

gameStarted = true;

timer.start();

});

timer = new Timer(10, this);

setVisible(true);

public void paint(Graphics g) {

super.paint(g);

g.setColor(Color.BLACK);

g.fillRect(0, 0, WIDTH, HEIGHT);

if (gameOver) {

g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.BOLD, 30));

g.drawString("Game Over", WIDTH / 2 - 100, HEIGHT / 2);

g.setFont(new Font("Arial", Font.BOLD, 20));

g.drawString("Press Space to Restart", WIDTH / 2 - 120, HEIGHT / 2 + 30);

return;

g.setColor(Color.WHITE);

g.fillRect(paddleX, HEIGHT - PADDLE_HEIGHT, PADDLE_WIDTH, PADDLE_HEIGHT);

g.setColor(Color.RED);

g.fillOval(ballX, ballY, BALL_SIZE, BALL_SIZE);

for (int row = 0; row < BRICK_ROWS; row++) {

for (int col = 0; col < BRICK_COLS; col++) {

if (bricks[row][col]) {

g.setColor(Color.GREEN);

g.fillRect(col * BRICK_WIDTH, row * BRICK_HEIGHT, BRICK_WIDTH, BRICK_HEIGHT);

g.setColor(Color.WHITE);

g.setFont(new Font("Arial", Font.BOLD, 20));

g.drawString("Score: " + score, 10, 30);


}

public void actionPerformed(ActionEvent e) {

if (gameOver) {

return;

ballX += ballXSpeed;

ballY += ballYSpeed;

if (ballX < 0 || ballX > WIDTH - BALL_SIZE) {

ballXSpeed = -ballXSpeed;

if (ballY < 0) {

ballYSpeed = -ballYSpeed;

if (ballY > HEIGHT - PADDLE_HEIGHT - BALL_SIZE) {

if (ballX >= paddleX && ballX <= paddleX + PADDLE_WIDTH) {

ballYSpeed = -ballYSpeed;

score++;

} else {

gameOver = true;

}
}

for (int row = 0; row < BRICK_ROWS; row++) {

for (int col = 0; col < BRICK_COLS; col++) {

if (bricks[row][col]) {

Rectangle brickRect = new Rectangle(col * BRICK_WIDTH, row * BRICK_HEIGHT,


BRICK_WIDTH, BRICK_HEIGHT);

Rectangle ballRect = new Rectangle(ballX, ballY, BALL_SIZE, BALL_SIZE);

if (brickRect.intersects(ballRect)) {

bricks[row][col] = false;

ballYSpeed = -ballYSpeed;

score++;

if (score == BRICK_ROWS * BRICK_COLS) {

gameOver = true;

repaint();

public static void main(String[] args) {


new BrickBreaker();

You might also like