mirror of
https://codeberg.org/boyfailure/VectorBreakout.git
synced 2025-06-08 07:34:05 +10:00
Remediated The Brick Problem, levels, rudimentary particle effects
This commit is contained in:
parent
007e2e68ad
commit
5840edc063
7 changed files with 327 additions and 174 deletions
|
@ -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.
|
||||
|
||||
___
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,6 +21,7 @@ public class Brick {
|
|||
}
|
||||
|
||||
public void breakBrick() {
|
||||
if (!isBroken) {
|
||||
isBroken = true;
|
||||
VectorBreakout.score += this.scoreOnBreak + (VectorBreakout.level - 1);
|
||||
VectorBreakout.bricksOnScreen--;
|
||||
|
@ -40,6 +41,36 @@ public class Brick {
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
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(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.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));
|
||||
}
|
||||
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));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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(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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
@ -256,12 +193,23 @@ public class VectorBreakout {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 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();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue