Remediated The Brick Problem, levels, rudimentary particle effects

This commit is contained in:
naomi 2025-03-25 01:49:04 +00:00
parent 007e2e68ad
commit 5840edc063
7 changed files with 327 additions and 174 deletions

View file

@ -15,7 +15,7 @@ ___
- Enter: Pause
- Escape: Debug menu
These controls may change in the future to something more sensible, and I may add a controls config in the future.
These controls may change, and I may add a controls config in the future.
___

View file

@ -138,19 +138,21 @@ public class Ball {
}
// Check bricks
for (byte i = 0; i < VectorBreakout.currentBricks.length; i++) {
if (VectorBreakout.currentBricks[i] != null) {
if (VectorBreakout.currentBricks[i].brickY <= this.ballY &&
VectorBreakout.currentBricks[i].brickY + VectorBreakout.currentBricks[i].brickHeight >= this.ballY + this.ballHeight) {
if (VectorBreakout.currentBricks[i].brickX <= this.ballX &&
VectorBreakout.currentBricks[i].brickX + VectorBreakout.currentBricks[i].brickWidth >= this.ballX + this.ballWidth) {
VectorBreakout.currentBricks[i].breakBrick();
if (VectorBreakout.currentLevel != null) {
for (byte i = 0; i < VectorBreakout.currentLevel.levelBricks.length; i++) {
if (VectorBreakout.currentLevel.levelBricks[i] != null) {
if (VectorBreakout.currentLevel.levelBricks[i].brickY <= this.ballY &&
VectorBreakout.currentLevel.levelBricks[i].brickY + VectorBreakout.currentLevel.levelBricks[i].brickHeight >= this.ballY + this.ballHeight) {
if (VectorBreakout.currentLevel.levelBricks[i].brickX <= this.ballX &&
VectorBreakout.currentLevel.levelBricks[i].brickX + VectorBreakout.currentLevel.levelBricks[i].brickWidth >= this.ballX + this.ballWidth) {
VectorBreakout.currentLevel.levelBricks[i].breakBrick();
this.bounce((byte) 0);
return;
}
}
}
}
}
// Check paddles
for (byte i = 0; i < VectorBreakout.currentPaddles.length; i++) {
@ -176,6 +178,31 @@ public class Ball {
else {
this.bounce((byte) 0);
}
// Draw particles
byte ballParticleGen = 0;
for (byte ii = 0; ii < VectorBreakout.currentParticles.length; ii++) {
if (VectorBreakout.currentParticles[ii] == null) {
ballParticleGen++;
switch(ballParticleGen) {
case 1:
VectorBreakout.currentParticles[ii] = new Particle(0, this.ballX, this.ballY - 10, 0, -2, 15, 2, 7, 3);
VectorBreakout.currentParticles[ii].spawn(5);
break;
case 2:
VectorBreakout.currentParticles[ii] = new Particle(0, this.ballX - 3, this.ballY - 10, -2, -4, 15, 2, 6, 3);
VectorBreakout.currentParticles[ii].spawn(5);
break;
case 3:
VectorBreakout.currentParticles[ii] = new Particle(0, this.ballX + 10, this.ballY - 10, 2, -4, 15, 2, 8, 3);
VectorBreakout.currentParticles[ii].spawn(5);
break;
}
if (ballParticleGen < 3) {continue;}
else {return;}
}
}
return;
}
}

View file

@ -21,25 +21,56 @@ public class Brick {
}
public void breakBrick() {
isBroken = true;
VectorBreakout.score += this.scoreOnBreak + (VectorBreakout.level - 1);
VectorBreakout.bricksOnScreen--;
switch(this.specialAbility) {
case 1:
VectorBreakout.lives++;
break;
case 2:
for (byte i = 0; i < VectorBreakout.currentBalls.length; i++) {
if (VectorBreakout.currentBalls[i] == null) {
VectorBreakout.currentBalls[i] = new Ball(300, 300, 7, 7, 0, true);
VectorBreakout.currentBalls[i].spawnBall((this.brickX + (this.brickWidth / 2)), (this.brickY + (this.brickHeight / 2)));
return;
if (!isBroken) {
isBroken = true;
VectorBreakout.score += this.scoreOnBreak + (VectorBreakout.level - 1);
VectorBreakout.bricksOnScreen--;
switch(this.specialAbility) {
case 1:
VectorBreakout.lives++;
break;
case 2:
for (byte i = 0; i < VectorBreakout.currentBalls.length; i++) {
if (VectorBreakout.currentBalls[i] == null) {
VectorBreakout.currentBalls[i] = new Ball(300, 300, 7, 7, 0, true);
VectorBreakout.currentBalls[i].spawnBall((this.brickX + (this.brickWidth / 2)), (this.brickY + (this.brickHeight / 2)));
return;
}
}
}
break;
default:
break;
break;
default:
break;
}
}
// Draw particles
byte brickParticleGen = 0;
for (byte ii = 0; ii < VectorBreakout.currentParticles.length; ii++) {
if (VectorBreakout.currentParticles[ii] == null) {
brickParticleGen++;
switch(brickParticleGen) {
case 1:
VectorBreakout.currentParticles[ii] = new Particle(0, this.brickX, this.brickY, this.brickWidth - 1, 3, this.brickColor, 3, 3, 2);
VectorBreakout.currentParticles[ii].spawn(20);
break;
case 2:
VectorBreakout.currentParticles[ii] = new Particle(0, this.brickX, this.brickY, -2, this.brickHeight - 1, this.brickColor, 3, 3, 2);
VectorBreakout.currentParticles[ii].spawn(20);
break;
case 3:
VectorBreakout.currentParticles[ii] = new Particle(0, this.brickX, this.brickY + this.brickHeight, this.brickWidth - 1, 2, this.brickColor, 3, 3, 2);
VectorBreakout.currentParticles[ii].spawn(20);
break;
case 4:
VectorBreakout.currentParticles[ii] = new Particle(0, this.brickX + this.brickWidth, this.brickY, -2, this.brickHeight, this.brickColor, 3, 3, 2);
VectorBreakout.currentParticles[ii].spawn(20);
break;
}
if (brickParticleGen < 4) {continue;}
else {return;}
}
}
this.brickX = 32767;
this.brickY = 32767;
}

View file

@ -18,6 +18,7 @@ public class GameDisplay extends JComponent {
public static float beamScaleX = 1; // Horizontal drawing scale
public static float beamScaleY = 1; // Vertical drawing scale
public static float beamThicknessScale = 1; // Thickness of lines
public void paint(Graphics gameGraphics) {
@ -41,7 +42,7 @@ public class GameDisplay extends JComponent {
// Score
resetBeam();
moveBeam(20, -13);
g2.setStroke(new BasicStroke(2));
g2.setStroke(bt(2));
String numToString = String.valueOf(VectorBreakout.score);
String[] numToRender = numToString.split("");
for (byte i = iStart; i < numToRender.length; i++) {
@ -95,7 +96,7 @@ public class GameDisplay extends JComponent {
// Walls
g2.setColor(Color.gray);
g2.setStroke(new BasicStroke(10));
g2.setStroke(bt(10));
resetBeam();
moveBeam(15, 0);
g2.draw(drawVec(0, 600));
@ -105,50 +106,30 @@ public class GameDisplay extends JComponent {
g2.draw(drawVec(-800, 0));
// Bricks
for (byte i = 0; i < VectorBreakout.currentBricks.length; i++) {
if (VectorBreakout.currentBricks[i] != null) {
if (VectorBreakout.currentBricks[i].isBroken == false) {
resetBeam();
g2.setStroke(new BasicStroke(3));
moveBeam(VectorBreakout.currentBricks[i].brickX + 1, VectorBreakout.currentBricks[i].brickY + 1);
switch(VectorBreakout.currentBricks[i].brickColor) {
case 0:
g2.setColor(Color.red);
break;
case 1:
g2.setColor(Color.getHSBColor(25, 258, 77));
break;
case 2:
g2.setColor(Color.cyan);
break;
case 3:
g2.setColor(Color.green);
break;
case 4:
g2.setColor(Color.magenta);
break;
default:
g2.setColor(Color.gray);
break;
}
g2.draw(drawVec(VectorBreakout.currentBricks[i].brickWidth - 2, 0));
g2.draw(drawVec(0, -(VectorBreakout.currentBricks[i].brickHeight - 2)));
g2.draw(drawVec(-(VectorBreakout.currentBricks[i].brickWidth - 2), 0));
g2.draw(drawVec(0, VectorBreakout.currentBricks[i].brickHeight - 2));
if (VectorBreakout.currentLevel != null) {
for (byte i = 0; i < VectorBreakout.currentLevel.levelBricks.length; i++) {
if (VectorBreakout.currentLevel.levelBricks[i] != null) {
if (VectorBreakout.currentLevel.levelBricks[i].isBroken == false) {
resetBeam();
g2.setStroke(bt(3));
moveBeam(VectorBreakout.currentLevel.levelBricks[i].brickX + 1, VectorBreakout.currentLevel.levelBricks[i].brickY + 1);
g2.setColor(vc(VectorBreakout.currentLevel.levelBricks[i].brickColor));
g2.draw(drawVec(VectorBreakout.currentLevel.levelBricks[i].brickWidth - 2, 0));
g2.draw(drawVec(0, -(VectorBreakout.currentLevel.levelBricks[i].brickHeight - 2)));
g2.draw(drawVec(-(VectorBreakout.currentLevel.levelBricks[i].brickWidth - 2), 0));
g2.draw(drawVec(0, VectorBreakout.currentLevel.levelBricks[i].brickHeight - 2));
}
}
}
}
// Paddle
// Paddles
g2.setColor(Color.white);
for (byte i = 0; i < VectorBreakout.currentPaddles.length; i++) {
if (VectorBreakout.currentPaddles[i] != null) {
if (VectorBreakout.currentPaddles[i].isActive) {
resetBeam();
/*g2.setStroke(new BasicStroke(VectorBreakout.currentPaddles[i].paddleHeight));
moveBeam(VectorBreakout.currentPaddles[i].paddleX, VectorBreakout.currentPaddles[i].paddleY + (VectorBreakout.currentPaddles[i].paddleHeight / 2));
g2.draw(drawVec(VectorBreakout.currentPaddles[i].paddleWidth, 0));*/
g2.setStroke(new BasicStroke(3));
g2.setStroke(bt(3));
moveBeam(VectorBreakout.currentPaddles[i].paddleX, VectorBreakout.currentPaddles[i].paddleY);
g2.draw(drawVec(VectorBreakout.currentPaddles[i].paddleWidth, 0));
g2.draw(drawVec(0, -(VectorBreakout.currentPaddles[i].paddleHeight)));
@ -159,24 +140,38 @@ public class GameDisplay extends JComponent {
}
// Balls
g2.setStroke(new BasicStroke(1));
g2.setStroke(bt(3));
g2.setColor(Color.yellow);
for (byte i = 0; i < VectorBreakout.currentBalls.length; i++) {
// Check if ball is null first!
if (VectorBreakout.currentBalls[i] != null) {
if (VectorBreakout.currentBalls[i].isActive) {
resetBeam();
moveBeam(VectorBreakout.currentBalls[i].ballX, VectorBreakout.currentBalls[i].ballY);
for (byte ii = 0; ii < VectorBreakout.currentBalls[i].ballHeight; ii++) {
g2.draw(drawVec(VectorBreakout.currentBalls[i].ballWidth, 0));
moveBeam(-(VectorBreakout.currentBalls[i].ballWidth), -1);
}
g2.draw(drawVec(VectorBreakout.currentBalls[i].ballWidth, 0));
g2.draw(drawVec(0, VectorBreakout.currentBalls[i].ballHeight));
g2.draw(drawVec(-VectorBreakout.currentBalls[i].ballWidth, 0));
g2.draw(drawVec(0, -VectorBreakout.currentBalls[i].ballHeight));
}
}
}
// Particles (still experimenting with these! rendering disabled for now...)
/*
for (byte i = 0; i < VectorBreakout.currentParticles.length; i++) {
if (VectorBreakout.currentParticles[i] != null) {
if (VectorBreakout.currentParticles[i].isActive) {
resetBeam();
moveBeam(VectorBreakout.currentParticles[i].particleX, VectorBreakout.currentParticles[i].particleY);
g2.setStroke(bt(VectorBreakout.currentParticles[i].vectorScale));
g2.setColor(vc(VectorBreakout.currentParticles[i].particleColor));
g2.draw(drawVec(VectorBreakout.currentParticles[i].particleX2, VectorBreakout.currentParticles[i].particleY2));
}
}
}
*/
// Paused
g2.setStroke(new BasicStroke(3));
g2.setStroke(bt(3));
if (VectorBreakout.isPaused) {
g2.setColor(Color.white);
resetBeam();
@ -228,6 +223,23 @@ public class GameDisplay extends JComponent {
return new Line2D.Float(oldBeamX, oldBeamY, beamX, beamY);
}
public Color vc(int col) {
switch ((byte) col) {
case 0: return Color.red;
case 1: return Color.getHSBColor(25, 258, 77);
case 2: return Color.cyan;
case 3: return Color.green;
case 4: return Color.magenta;
case 5: return Color.yellow;
case 15: return Color.white;
default: return Color.gray;
}
}
public BasicStroke bt(float size) {
return new BasicStroke(size * beamThicknessScale);
}
public void moveBeam(float x, float y) {
beamX += (x * beamScaleX);
beamY += (y * beamScaleY);

View file

@ -0,0 +1,84 @@
package dev.boyfailure.quajra.vectorbreakout;
public class Level {
short levelID;
String levelName = "Level";
byte[] levelLayout; // 19 bricks per row
Brick[] levelBricks;
public Level(int id) {
this.levelID = (short) id;
switch(id) {
case 1:
this.levelName = "Test";
levelLayout = new byte[]
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
3,3,3,3,3,5,3,3,3,3,3,3,3,5,3,3,3,3,3,
2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
break;
case 2:
this.levelName = "waow (based)";
levelLayout = new byte[]
{4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,
3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,
2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,
1,2,3,4,1,2,3,4,1,2,3,4,1,2,3,4,1,2,3};
break;
case 3:
this.levelName = "HOLES";
levelLayout = new byte[]
{4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,
3,3,0,0,3,3,3,3,0,0,0,3,3,3,3,0,0,3,3,
2,2,0,0,2,2,2,2,0,0,0,2,2,2,2,0,0,2,2,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
break;
default:
this.levelName = "Level " + levelID;
levelLayout = new byte[]
{1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1};
break;
}
}
public void startLevel() {
// Brick placement
short brickLeftPlacement = 20;
if (this.levelLayout != null) {
this.levelBricks = new Brick[this.levelLayout.length];
for (int i = 0; i < this.levelLayout.length; i++) {
switch (this.levelLayout[i]) {
case 1:
this.levelBricks[i] = new Brick(brickLeftPlacement, (((int) (i / 19)) * 20) + 50, false, 3, 4, 0);
break;
case 2:
this.levelBricks[i] = new Brick(brickLeftPlacement, (((int) (i / 19)) * 20) + 50, false, 2, 8, 0);
break;
case 3:
this.levelBricks[i] = new Brick(brickLeftPlacement, (((int) (i / 19)) * 20) + 50, false, 1, 16, 0);
break;
case 4:
this.levelBricks[i] = new Brick(brickLeftPlacement, (((int) (i / 19)) * 20) + 50, false, 0, 32, 0);
break;
case 5:
this.levelBricks[i] = new Brick(brickLeftPlacement, (((int) (i / 19)) * 20) + 50, false, 4, 8, 2);
break;
default:
this.levelBricks[i] = null;
break;
}
brickLeftPlacement += 40;
if (brickLeftPlacement >= 760) {brickLeftPlacement = 20;}
}
}
VectorBreakout.bricksOnScreen = (short) this.levelBricks.length;
}
}

View file

@ -0,0 +1,54 @@
package dev.boyfailure.quajra.vectorbreakout;
public class Particle {
byte particleID;
short particleX;
short particleY;
short particleX2;
short particleY2;
boolean isActive = true;
byte particleColor;
short particleFrame = 0;
short particleLifetime;
float vectorScale = 1;
byte particleDirection;
byte particleSpeed = 2;
public Particle(int pid, int x, int y, int x2, int y2, int pc, float sc, int dir, int speed) {
this.particleID = (byte) pid;
this.particleX = (short) x;
this.particleY = (short) y;
this.particleX2 = (short) x2;
this.particleY2= (short) y2;
this.particleColor = (byte) pc;
this.vectorScale = sc;
this.particleDirection = (byte) dir;
this.particleSpeed = (byte) speed;
}
public void spawn(int lifetime) {
this.isActive = true;
this.particleLifetime = (short) lifetime;
}
public void update() {
this.particleFrame++;
if (this.particleDirection != 0) {
switch(this.particleDirection) {
case 1:this.particleX += this.particleSpeed;break;
case 2:this.particleX += this.particleSpeed;this.particleY+= this.particleSpeed;break;
case 3:this.particleY += this.particleSpeed;break;
case 4:this.particleX -= this.particleSpeed;this.particleY+= this.particleSpeed;break;
case 5:this.particleX -= this.particleSpeed;break;
case 6:this.particleX -= this.particleSpeed;this.particleY-= this.particleSpeed;break;
case 7:this.particleY -= this.particleSpeed;break;
case 8:this.particleX += this.particleSpeed;this.particleY-= this.particleSpeed;break;
}
}
if (this.particleFrame >= this.particleLifetime) {
this.isActive = false;
}
}
}

View file

@ -13,6 +13,7 @@ import javax.swing.Timer;
public class VectorBreakout {
public static String gameName = "Vector Breakout";
public static boolean isGameStarted = false;
public static boolean isPaused = false;
public static boolean debugMenuEnabled = false;
public static boolean isLost = false;
@ -22,7 +23,7 @@ public class VectorBreakout {
public static byte chancey = 0;
public static short level = 1;
public static byte ballsOnScreen = 0;
public static byte bricksOnScreen = 76;
public static short bricksOnScreen = 0;
public static byte targetFrameRate = 60;
public static byte actualFrames = 0;
public static byte actualFrameRate = 0;
@ -31,91 +32,16 @@ public class VectorBreakout {
public static long frameCounter = 0;
public static boolean movingLeft = false;
public static boolean movingRight = false;
public static Ball[] currentBalls = {null,null,null,null,null};
public static Ball[] currentBalls = new Ball[10];
public static Particle[] currentParticles = new Particle[63];
public static Paddle[] currentPaddles = {new Paddle(350, 500, 100, 15, 0, 1)};
public static Brick[] currentBricks = {
new Brick(20, 50, false, 0, 32, 0),
new Brick(60, 50, false, 0, 32, 0),
new Brick(100, 50, false, 0, 32, 0),
new Brick(140, 50, false, 0, 32, 0),
new Brick(180, 50, false, 0, 32, 0),
new Brick(220, 50, false, 0, 32, 0),
new Brick(260, 50, false, 0, 32, 0),
new Brick(300, 50, false, 0, 32, 0),
new Brick(340, 50, false, 0, 32, 0),
new Brick(380, 50, false, 0, 32, 0),
new Brick(420, 50, false, 0, 32, 0),
new Brick(460, 50, false, 0, 32, 0),
new Brick(500, 50, false, 0, 32, 0),
new Brick(540, 50, false, 0, 32, 0),
new Brick(580, 50, false, 0, 32, 0),
new Brick(620, 50, false, 0, 32, 0),
new Brick(660, 50, false, 0, 32, 0),
new Brick(700, 50, false, 0, 32, 0),
new Brick(740, 50, false, 0, 32, 0),
new Brick(20, 70, false, 1, 16, 0),
new Brick(60, 70, false, 1, 16, 0),
new Brick(100, 70, false, 1, 16, 0),
new Brick(140, 70, false, 1, 16, 0),
new Brick(180, 70, false, 1, 16, 0),
new Brick(220, 70, false, 1, 16, 0),
new Brick(260, 70, false, 1, 16, 0),
new Brick(300, 70, false, 1, 16, 0),
new Brick(340, 70, false, 1, 16, 0),
new Brick(380, 70, false, 1, 16, 0),
new Brick(420, 70, false, 1, 16, 0),
new Brick(460, 70, false, 1, 16, 0),
new Brick(500, 70, false, 1, 16, 0),
new Brick(540, 70, false, 1, 16, 0),
new Brick(580, 70, false, 1, 16, 0),
new Brick(620, 70, false, 1, 16, 0),
new Brick(660, 70, false, 1, 16, 0),
new Brick(700, 70, false, 1, 16, 0),
new Brick(740, 70, false, 1, 16, 0),
new Brick(20, 90, false, 2, 8, 0),
new Brick(60, 90, false, 2, 8, 0),
new Brick(100, 90, false, 2, 8, 0),
new Brick(140, 90, false, 2, 8, 0),
new Brick(180, 90, false, 2, 8, 0),
new Brick(220, 90, false, 4, 8, 2),
new Brick(260, 90, false, 2, 8, 0),
new Brick(300, 90, false, 2, 8, 0),
new Brick(340, 90, false, 2, 8, 0),
new Brick(380, 90, false, 2, 8, 0),
new Brick(420, 90, false, 2, 8, 0),
new Brick(460, 90, false, 2, 8, 0),
new Brick(500, 90, false, 2, 8, 0),
new Brick(540, 90, false, 4, 8, 2),
new Brick(580, 90, false, 2, 8, 0),
new Brick(620, 90, false, 2, 8, 0),
new Brick(660, 90, false, 2, 8, 0),
new Brick(700, 90, false, 2, 8, 0),
new Brick(740, 90, false, 2, 8, 0),
new Brick(20, 110, false, 3, 4, 0),
new Brick(60, 110, false, 3, 4, 0),
new Brick(100, 110, false, 3, 4, 0),
new Brick(140, 110, false, 3, 4, 0),
new Brick(180, 110, false, 3, 4, 0),
new Brick(220, 110, false, 3, 4, 0),
new Brick(260, 110, false, 3, 4, 0),
new Brick(300, 110, false, 3, 4, 0),
new Brick(340, 110, false, 3, 4, 0),
new Brick(380, 110, false, 3, 4, 0),
new Brick(420, 110, false, 3, 4, 0),
new Brick(460, 110, false, 3, 4, 0),
new Brick(500, 110, false, 3, 4, 0),
new Brick(540, 110, false, 3, 4, 0),
new Brick(580, 110, false, 3, 4, 0),
new Brick(620, 110, false, 3, 4, 0),
new Brick(660, 110, false, 3, 4, 0),
new Brick(700, 110, false, 3, 4, 0),
new Brick(740, 110, false, 3, 4, 0)
};
public static Level currentLevel;
public VectorBreakout() {
}
public static void main(String[] args) {
System.setProperty("sun.java2d.opengl", "true");
final JFrame gameFrame = new JFrame();
gameFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@ -135,10 +61,10 @@ public class VectorBreakout {
debugMenuEnabled = !debugMenuEnabled;
break;
case 10: // Enter
isPaused = !isPaused;
if (isGameStarted) {isPaused = !isPaused;}
break;
case 32: // Space
if (isLost) {newGame();return;}
if (isLost || !isGameStarted) {isGameStarted = true;newGame();return;}
if (!isPaused) {
if (ballsOnScreen < 1) {
for (byte i = 0; i < currentBalls.length; i++) {
@ -152,10 +78,10 @@ public class VectorBreakout {
}
break;
case 37: // Left
movingLeft = true;
if (isGameStarted) {movingLeft = true;}
break;
case 39: // Right
movingRight = true;
if (isGameStarted) {movingRight = true;}
break;
}
}
@ -177,6 +103,8 @@ public class VectorBreakout {
public void componentResized(ComponentEvent componentEvent) {
gameCanvas.beamScaleX = gameFrame.getBounds().width / 800f;
gameCanvas.beamScaleY = gameFrame.getBounds().height / 600f;
if (gameCanvas.beamScaleX <= gameCanvas.beamScaleY) {gameCanvas.beamThicknessScale = gameCanvas.beamScaleX;}
else {gameCanvas.beamThicknessScale = gameCanvas.beamScaleY;}
}
});
@ -199,24 +127,33 @@ public class VectorBreakout {
public void actionPerformed(ActionEvent e) {
actualFrameRate = actualFrames;
actualFrames = 0;
for (byte i = 0; i < VectorBreakout.currentBricks.length; i++) {
if (VectorBreakout.currentBricks[i] != null) {
if (VectorBreakout.currentBricks[i].isBroken) {
VectorBreakout.currentBricks[i] = null;
if (currentLevel != null) {
for (byte i = 0; i < currentLevel.levelBricks.length; i++) {
if (currentLevel.levelBricks[i] != null) {
if (currentLevel.levelBricks[i].isBroken) {
currentLevel.levelBricks[i] = null;
}
}
}
}
for (byte i = 0; i < VectorBreakout.currentBalls.length; i++) {
if (VectorBreakout.currentBalls[i] != null) {
if (VectorBreakout.currentBalls[i].isActive == false) {
VectorBreakout.currentBalls[i] = null;
for (byte i = 0; i < currentBalls.length; i++) {
if (currentBalls[i] != null) {
if (currentBalls[i].isActive == false) {
currentBalls[i] = null;
}
}
}
if (bricksOnScreen <= 0) {
refreshBricks();
if (level < 32767) {level++;} else {level = 1;}
if (lives < 127) {lives++;} else {lives = 127;}
for (byte i = 0; i < currentParticles.length; i++) {
if (currentParticles[i] != null) {
if (currentParticles[i].isActive == false) {
currentParticles[i] = null;
}
}
}
if (bricksOnScreen <= 0 && isGameStarted) {
level++;
currentLevel = new Level(level);
currentLevel.startLevel();
}
}
});
@ -255,13 +192,24 @@ public class VectorBreakout {
currentBalls[i].moveBall();
}
}
}
}
// Particles
for (byte i = 0; i < currentParticles.length; i++) {
if (currentParticles[i] != null) {
if (currentParticles[i].isActive) {
currentParticles[i].update();
}
}
}
}
public static void gameLose() {
for (byte i = 0; i < currentBricks.length; i++) {
currentBricks[i] = null;
if (currentLevel != null) {
for (byte i = 0; i < currentLevel.levelBricks.length; i++) {
currentLevel.levelBricks[i] = null;
}
}
for (byte i = 0; i < currentBalls.length; i++) {
currentBalls[i] = null;
@ -280,11 +228,8 @@ public class VectorBreakout {
movingLeft = false;
movingRight = false;
currentPaddles[0] = new Paddle(350, 500, 100, 15, 0, 1);
refreshBricks();
}
public static void refreshBricks() {
bricksOnScreen = 76;
currentBricks[0] = new Brick(20, 50, false, 0, 32, 0);currentBricks[1] = new Brick(60, 50, false, 0, 32, 0);currentBricks[2] = new Brick(100, 50, false, 0, 32, 0);currentBricks[3] = new Brick(140, 50, false, 0, 32, 0);currentBricks[4] = new Brick(180, 50, false, 0, 32, 0);currentBricks[5] = new Brick(220, 50, false, 0, 32, 0);currentBricks[6] = new Brick(260, 50, false, 0, 32, 0);currentBricks[7] = new Brick(300, 50, false, 0, 32, 0);currentBricks[8] = new Brick(340, 50, false, 0, 32, 0);currentBricks[9] = new Brick(380, 50, false, 0, 32, 0);currentBricks[10] = new Brick(420, 50, false, 0, 32, 0);currentBricks[11] = new Brick(460, 50, false, 0, 32, 0);currentBricks[12] = new Brick(500, 50, false, 0, 32, 0);currentBricks[13] = new Brick(540, 50, false, 0, 32, 0);currentBricks[14] = new Brick(580, 50, false, 0, 32, 0);currentBricks[15] = new Brick(620, 50, false, 0, 32, 0);currentBricks[16] = new Brick(660, 50, false, 0, 32, 0);currentBricks[17] = new Brick(700, 50, false, 0, 32, 0);currentBricks[18] = new Brick(740, 50, false, 0, 32, 0);currentBricks[19] = new Brick(20, 70, false, 1, 16, 0);currentBricks[20] = new Brick(60, 70, false, 1, 16, 0);currentBricks[21] = new Brick(100, 70, false, 1, 16, 0);currentBricks[22] = new Brick(140, 70, false, 1, 16, 0);currentBricks[23] = new Brick(180, 70, false, 1, 16, 0);currentBricks[24] = new Brick(220, 70, false, 1, 16, 0);currentBricks[25] = new Brick(260, 70, false, 1, 16, 0);currentBricks[26] = new Brick(300, 70, false, 1, 16, 0);currentBricks[27] = new Brick(340, 70, false, 1, 16, 0);currentBricks[28] = new Brick(380, 70, false, 1, 16, 0);currentBricks[29] = new Brick(420, 70, false, 1, 16, 0);currentBricks[30] = new Brick(460, 70, false, 1, 16, 0);currentBricks[31] = new Brick(500, 70, false, 1, 16, 0);currentBricks[32] = new Brick(540, 70, false, 1, 16, 0);currentBricks[33] = new Brick(580, 70, false, 1, 16, 0);currentBricks[34] = new Brick(620, 70, false, 1, 16, 0);currentBricks[35] = new Brick(660, 70, false, 1, 16, 0);currentBricks[36] = new Brick(700, 70, false, 1, 16, 0);currentBricks[37] = new Brick(740, 70, false, 1, 16, 0);currentBricks[38] = new Brick(20, 90, false, 2, 8, 0);currentBricks[39] = new Brick(60, 90, false, 2, 8, 0);currentBricks[40] = new Brick(100, 90, false, 2, 8, 0);currentBricks[41] = new Brick(140, 90, false, 2, 8, 0);currentBricks[42] = new Brick(180, 90, false, 2, 8, 0);currentBricks[43] = new Brick(220, 90, false, 4, 8, 2);currentBricks[44] = new Brick(260, 90, false, 2, 8, 0);currentBricks[45] = new Brick(300, 90, false, 2, 8, 0);currentBricks[46] = new Brick(340, 90, false, 2, 8, 0);currentBricks[47] = new Brick(380, 90, false, 2, 8, 0);currentBricks[48] = new Brick(420, 90, false, 2, 8, 0);currentBricks[49] = new Brick(460, 90, false, 2, 8, 0);currentBricks[50] = new Brick(500, 90, false, 2, 8, 0);currentBricks[51] = new Brick(540, 90, false, 4, 8, 2);currentBricks[52] = new Brick(580, 90, false, 2, 8, 0);currentBricks[53] = new Brick(620, 90, false, 2, 8, 0);currentBricks[54] = new Brick(660, 90, false, 2, 8, 0);currentBricks[55] = new Brick(700, 90, false, 2, 8, 0);currentBricks[56] = new Brick(740, 90, false, 2, 8, 0);currentBricks[57] = new Brick(20, 110, false, 3, 4, 0);currentBricks[58] = new Brick(60, 110, false, 3, 4, 0);currentBricks[59] = new Brick(100, 110, false, 3, 4, 0);currentBricks[60] = new Brick(140, 110, false, 3, 4, 0);currentBricks[61] = new Brick(180, 110, false, 3, 4, 0);currentBricks[62] = new Brick(220, 110, false, 3, 4, 0);currentBricks[63] = new Brick(260, 110, false, 3, 4, 0);currentBricks[64] = new Brick(300, 110, false, 3, 4, 0);currentBricks[65] = new Brick(340, 110, false, 3, 4, 0);currentBricks[66] = new Brick(380, 110, false, 3, 4, 0);currentBricks[67] = new Brick(420, 110, false, 3, 4, 0);currentBricks[68] = new Brick(460, 110, false, 3, 4, 0);currentBricks[69] = new Brick(500, 110, false, 3, 4, 0);currentBricks[70] = new Brick(540, 110, false, 3, 4, 0);currentBricks[71] = new Brick(580, 110, false, 3, 4, 0);currentBricks[72] = new Brick(620, 110, false, 3, 4, 0);currentBricks[73] = new Brick(660, 110, false, 3, 4, 0);currentBricks[74] = new Brick(700, 110, false, 3, 4, 0);currentBricks[75] = new Brick(740, 110, false, 3, 4, 0);
//test currentPaddles[0] = new Paddle(0, 500, 800, 60, 0, 1);
currentLevel = new Level(level);
currentLevel.startLevel();
}
}