1
0
Fork 0

BreakOut 5.1 - b), c)

This commit is contained in:
rxbn_ 2020-01-30 19:15:16 +01:00
parent 5ea292bbae
commit 21a7b951d6
2 changed files with 68 additions and 10 deletions

View File

@ -52,9 +52,8 @@ public class Ball implements IBall {
this.direction = new Vector2D(Constants.BALL_SPEED, Constants.BALL_SPEED);
this.direction.rescale();
// start at bottom-center
this.position.setX((Constants.SCREEN_WIDTH - Constants.BALL_DIAMETER) / 2.0);
this.position.setY(Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER - Constants.PADDLE_HEIGHT);
// reset position to bottom-center
resetPosition();
}
/**
@ -388,4 +387,13 @@ public class Ball implements IBall {
isLost = lost;
}
/**
* resets balls position
*/
public void resetPosition() {
// start at bottom-center
position.setX((Constants.SCREEN_WIDTH - Constants.BALL_DIAMETER) / 2.0);
position.setY(Constants.SCREEN_HEIGHT - Constants.BALL_DIAMETER - Constants.PADDLE_HEIGHT);
}
}

View File

@ -73,13 +73,7 @@ public class Level extends Thread implements ILevel {
this.score = score;
this.ball = new Ball();
// calc paddle positions
Position posPaddleTop = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, 0);
Position posPaddleBottom = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT);
// set paddles
this.paddleTop = new Paddle(posPaddleTop);
this.paddleBottom = new Paddle(posPaddleBottom);
resetPaddles();
// set paddles color
this.paddleTop.setColor(Constants.COLOR_PADDLE_TOP);
@ -137,6 +131,11 @@ public class Level extends Thread implements ILevel {
// Call here the balls method for reacting on the borders of the playground
getBall().reactOnBorder();
// Call here the balls method for reacting on lost ball state
if(getBall().isLost()) {
decreaseLives();
}
// if ball hits paddle (top|bottom), reflect ball
if(getBall().hitsPaddle(paddleTop)) getBall().reflectOnPaddle(paddleTop);
if(getBall().hitsPaddle(paddleBottom)) getBall().reflectOnPaddle(paddleBottom);
@ -282,6 +281,57 @@ public class Level extends Thread implements ILevel {
private boolean allStonesBroken() {
return stones.isEmpty();
}
/**
* decreases the lives and interact to the new count
*/
private void decreaseLives() {
lifeCounter--;
// reset paddles to center pos
if(lifeCounter > 0) {
resetPaddles();
getBall().resetPosition();
getBall().setLost(false);
stopBall();
// level failed
} else {
setFinished(true);
game.getController().toStartScreen();
}
}
/**
* resets paddles position and or init them
*/
private void resetPaddles() {
// calc paddle positions
Position posPaddleTop = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, 0);
Position posPaddleBottom = new Position((Constants.SCREEN_WIDTH - Constants.PADDLE_WIDTH) / 2.0, Constants.SCREEN_HEIGHT - Constants.PADDLE_HEIGHT);
// resets top paddle
if(paddleTop == null) paddleTop = new Paddle(posPaddleTop);
else paddleTop.setPosition(posPaddleTop);
// resets bottom paddle
if(paddleBottom == null) paddleBottom = new Paddle(posPaddleBottom);
else paddleBottom.setPosition(posPaddleBottom);
}
/**
* The getter for levels score
* @return the score
*/
public int getScore() {
return score;
}
/**
* The getter for levels lives
* @return the life counter
*/
public int getLives() {
return lifeCounter;
}
}