Skip to content
Snippets Groups Projects
Commit fd9e8956 authored by mkandel2's avatar mkandel2
Browse files

Add Brick factory to generate bricks

parent 5a894833
No related branches found
No related tags found
1 merge request!1Game graphics
......@@ -4,6 +4,9 @@
*/
package brickbreaker;
import java.awt.Color;
import java.awt.Graphics;
/**
*
* @author Suman
......@@ -12,11 +15,13 @@ public class Ball {
private Vector position;
private Vector direction;
public int radius;
public Color color;
public Ball(int posX, int posY, int dirX, int dirY, int radius) {
public Ball(int posX, int posY, int dirX, int dirY, int radius,Color color) {
this.position = new Vector(posX, posY);
this.direction = new Vector(dirX, dirY);
this.radius = radius;
this.color = color;
}
public void setPosition(int posX, int posY) {
......@@ -55,6 +60,10 @@ public class Ball {
position.y = 0; // Set the ball at the top edge
direction.y = Math.abs(direction.y); // Reverse the y direction
}
}
public void draw(Graphics graphics) {
graphics.setColor(this.color); // ball color
graphics.fillOval(position.x, position.y, radius, radius);
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package brickbreaker.GameComponents;
import brickbreaker.Vector;
import java.awt.Color;
import java.awt.Graphics2D;
/**
*
* @author Suman
*/
public class Brick {
private Vector position;
private int width;
private int height;
private Color color;
private Boolean hasPowerUp;
public Brick(int x, int y, int width, int height, Color color, Boolean hasPowerUp) {
this.position = new Vector(x, y);
this.width = width;
this.height = height;
this.color = color;
this.hasPowerUp = hasPowerUp;
}
public void draw(Graphics2D g) {
g.setColor(this.color); // brick color
g.fillRect(this.position.x, this.position.y, width, height);
g.setColor(Color.BLACK);
g.drawRect(this.position.x, this.position.y, width, height);
}
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
*/
package brickbreaker.GameComponents;
import brickbreaker.GameComponents.Brick;
import brickbreaker.Interfaces.BrickFactory;
import java.awt.Color;
/**
*
* @author Suman
*/
public class DefaultBrickFactory implements BrickFactory {
@Override
public Brick createBrick(int x, int y, int width, int height, Boolean hasPowerUp) {
Color color = Color.decode("#FF0000");
return new Brick(x, y, width, height, color, hasPowerUp);
}
}
\ No newline at end of file
......@@ -4,6 +4,8 @@
*/
package brickbreaker;
import brickbreaker.GameComponents.Brick;
import brickbreaker.Interfaces.BrickFactory;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics2D;
......@@ -17,39 +19,44 @@ public class GameMapBuilder {
public int map [][];
public int brickWidth;
public int brickHeight;
private BrickFactory brickfactory;
private final int maxNoOfPowerUps = 5;
// this creates the brick of size 4x8
public GameMapBuilder(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 = 50;
brickHeight = 20;
public GameMapBuilder(int row, int col, BrickFactory brickFactory) {
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 = 50;
brickHeight = 20;
this.brickfactory = brickFactory;
}
// this draws the bricks
public 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(0X0BB5FB)); // brick color
g.fillRect(j*brickWidth, i*brickHeight, brickWidth, brickHeight);
g.setColor(Color.BLACK);
g.drawRect(j*brickWidth, i*brickHeight, brickWidth, brickHeight);
}
}
}
int numberOfPowerUps = (int) (Math.random() * maxNoOfPowerUps );
for (int i = 0; i < map.length; i++) {
for (int j=0; j< map[0].length;j++) {
if(map[i][j] > 0) {
boolean hasPowerUp = false;
if(numberOfPowerUps > 0) {
hasPowerUp = Math.random() < 0.5;
}
if(hasPowerUp) numberOfPowerUps--;
Brick brick = brickfactory.createBrick(j*brickWidth, i*brickHeight, brickWidth, brickHeight, hasPowerUp);
brick.draw(g);
}
}
}
}
// this sets the value of brick to 0 if it is hit by the ball
public void setBrickValue(int value, int row, int col) {
map[row][col] = value;
map[row][col] = value;
}
}
\ No newline at end of file
package brickbreaker;
import brickbreaker.Interfaces.BrickFactory;
import brickbreaker.Interfaces.GameObserver;
import brickbreaker.GameComponents.DefaultBrickFactory;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
......@@ -30,11 +33,14 @@ public class GamePanel extends JPanel implements KeyListener, ActionListener {
private GameMapBuilder map;
public GamePanel() {
this.balls.add(new Ball(350, 450, 1, -1, 20)); // Adjust the initial ball position and direction
this.balls.add(new Ball(380, 420, -1, 1, 50));
Color color = Color.decode("#8B4513");
this.balls.add(new Ball(350, 450, 2, -2, 20, color)); // Adjust the initial ball position and direction
color = Color.decode("#008080");
this.balls.add(new Ball(380, 420, -2, 2, 50, color));
this.totalBricks = rows * columns;
map = new GameMapBuilder(rows, columns);
BrickFactory brickfactory = new DefaultBrickFactory();
map = new GameMapBuilder(rows, columns, brickfactory);
addKeyListener(this);
setFocusable(true);
setFocusTraversalKeysEnabled(false);
......@@ -42,6 +48,16 @@ public class GamePanel extends JPanel implements KeyListener, ActionListener {
timer.start();
}
private List<GameObserver> observers = new ArrayList<>();
public void addObserver(GameObserver observer) {
observers.add(observer);
}
public void removeObserver(GameObserver observer) {
observers.remove(observer);
}
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
if (balls.isEmpty()) {
......@@ -53,14 +69,10 @@ public class GamePanel extends JPanel implements KeyListener, ActionListener {
map.draw((Graphics2D) graphics);
graphics.fillRect(0, 0, 3, 592);
graphics.fillRect(0, 0, 692, 3);
graphics.fillRect(691, 0, 3, 592);
graphics.setColor(Color.blue);
graphics.fillRect(paddle, 550, 100, 20);
graphics.setColor(Color.RED); // ball color
Iterator<Ball> ballsIterator = balls.iterator();
while (ballsIterator.hasNext()) {
......@@ -74,8 +86,7 @@ public class GamePanel extends JPanel implements KeyListener, ActionListener {
ball.checkForWallCollisions();
}
graphics.setColor(Color.RED); // ball color
graphics.fillOval(ballPosition.x, ballPosition.y, ball.radius, ball.radius);
ball.draw(graphics);
}
graphics.setColor(Color.black);
......@@ -173,10 +184,12 @@ public class GamePanel extends JPanel implements KeyListener, ActionListener {
if (arg0.getKeyCode() == KeyEvent.VK_ENTER) {
if (!play) {
play = true;
this.balls.add(new Ball(350, 450, 1, -1, 20)); // Adjust the initial ball position and direction
Color color = Color.decode("#8B4513");
this.balls.add(new Ball(350, 450, 1, -1, 20, color)); // Adjust the initial ball position and direction
score = 0;
totalBricks = rows * columns;
map = new GameMapBuilder(rows, columns);
BrickFactory brickfactory = new DefaultBrickFactory();
map = new GameMapBuilder(rows, columns, brickfactory);
repaint();
}
......
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
*/
package brickbreaker.Interfaces;
import brickbreaker.GameComponents.Brick;
import java.awt.Color;
/**
*
* @author Suman
*/
public interface BrickFactory {
Brick createBrick(int x, int y, int width, int height, Boolean hasPowerup);
}
/*
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Interface.java to edit this template
*/
package brickbreaker.Interfaces;
/**
*
* @author Suman
*/
public interface GameObserver {
void onGameOver(int finalScore);
void onGameWin(int finalScore);
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment