package playground; import java.awt.Color; import controller.EgoController; import controller.*; import gameobjects.FallingStar; import gameobjects.GameObject; import gameobjects.RectObject; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import java.util.Random; import collider.RectCollider; public class BreakoutLevel2 extends BreakoutLevelBaseAdvanced { Random randomizer = new Random(); private static Logger logger = LogManager.getLogger(BreakoutLevel2.class); @Override protected void actionIfBallHitsBrick(GameObject ball, GameObject brick) { deleteObject(brick.getId()); ball.setVY(ball.getVY()*-1); for(int i = 0; i < 20; i++) { this.addObject(this.createMiniBall("miniball"+i, brick.getX(), brick.getY())); } } protected GameObject createMiniBall(String ballID, double xpos, double ypos) { double speedx = randomizer.nextInt(480); if(speedx > 240) { speedx = speedx/2*-1; } double speedy = randomizer.nextInt(480); if(speedy > 240) { speedy = speedy/2*-1; } GameObject ball = new FallingStar("MiniBall1"+ ballID, this, xpos, ypos, speedx, speedy, new Color(randomizer.nextInt(255),randomizer.nextInt(255),randomizer.nextInt(255)), 3); ball.addController(new LimitedTimeController(this.gameTime, 3)); //logger.info("ball created."); return ball; } @Override protected void actionIfBallHitsEgo(GameObject ball, GameObject ego) { ball.setVY(ball.getVY()*-1); if(ball.getX() < ego.getX() && ball.getVX() >0) { ball.setVX(ball.getVX()*-1); } if(ball.getX() > ego.getX() && ball.getVX() <0) { ball.setVX(ball.getVX()*-1); } } @Override protected int calcNrBricksX() { // lt. Aufgabe sollten es eigentlich 6 sein - die passen allerdings nicht komplett ins Fenster ;) // --> deshalb haben wir nur 5... return 5; } @Override protected int calcNrBricksY() { // TODO Auto-generated method stub return 5; } @Override protected double getBrickSizeX() { // TODO Auto-generated method stub return 60; } @Override protected double getBrickSizeY() { // TODO Auto-generated method stub return 30; } @Override protected double getBrickStartX() { // TODO Auto-generated method stub return 90; } @Override protected double getBrickStartY() { // TODO Auto-generated method stub return 60; } @Override protected GameObject createEgoObject() { RectObject blueBox = new RectObject("ego", this, 350, 550, 0, 0, 60, 10, Color.BLUE); blueBox.generateColliders(); EgoController ec = new EgoController(30); blueBox.addController(ec); logger.info("ego created."); return blueBox; } @Override protected GameObject createBall() { GameObject ball = new FallingStar("ball1", this, 350, 350, 130, 130, Color.RED, 5); ball.addController(new ReboundController()); logger.info("ball created."); return ball; } @Override protected GameObject createBrick(int row, int column) { double xPos = getBrickStartX()+(2*row*getBrickSizeX()); double yPos = getBrickStartY()+(2*column*getBrickSizeY()); //if(row % 2 == 0 || column % 2 == 0) { // return null; //} Color col = null; double random = Math.random(); if(random < 0.25) { col = Color.GREEN; } if(random >= 0.25 && random < 0.5) { col = Color.RED; } if(random >= 0.5 && random < 0.75) { col = Color.BLUE; } if(random >= 0.75) { col = Color.YELLOW; } RectObject brick = new RectObject("brick"+row+column, this, xPos, yPos, 0, 0, 60, 30, col); brick.addCollider(new RectCollider("brickcoll"+row+column, brick, 60, 30)); logger.info("brick created."); return brick; } }