You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

150 lines
3.6 KiB

  1. package playground;
  2. import java.awt.Color;
  3. import controller.EgoController;
  4. import controller.*;
  5. import gameobjects.FallingStar;
  6. import gameobjects.GameObject;
  7. import gameobjects.RectObject;
  8. import org.apache.logging.log4j.LogManager;
  9. import org.apache.logging.log4j.Logger;
  10. import java.util.Random;
  11. import collider.RectCollider;
  12. public class BreakoutLevel2 extends BreakoutLevelBaseAdvanced {
  13. Random randomizer = new Random();
  14. private static Logger logger = LogManager.getLogger(BreakoutLevel2.class);
  15. @Override
  16. protected void actionIfBallHitsBrick(GameObject ball, GameObject brick) {
  17. deleteObject(brick.getId());
  18. ball.setVY(ball.getVY()*-1);
  19. for(int i = 0; i < 20; i++) {
  20. this.addObject(this.createMiniBall("miniball"+i, brick.getX(), brick.getY()));
  21. }
  22. }
  23. protected GameObject createMiniBall(String ballID, double xpos, double ypos) {
  24. double speedx = randomizer.nextInt(480);
  25. if(speedx > 240) {
  26. speedx = speedx/2*-1;
  27. }
  28. double speedy = randomizer.nextInt(480);
  29. if(speedy > 240) {
  30. speedy = speedy/2*-1;
  31. }
  32. GameObject ball = new FallingStar("MiniBall1"+ ballID, this, xpos, ypos, speedx, speedy, new Color(randomizer.nextInt(255),randomizer.nextInt(255),randomizer.nextInt(255)), 3);
  33. ball.addController(new LimitedTimeController(this.gameTime, 3));
  34. //logger.info("ball created.");
  35. return ball;
  36. }
  37. @Override
  38. protected void actionIfBallHitsEgo(GameObject ball, GameObject ego) {
  39. ball.setVY(ball.getVY()*-1);
  40. if(ball.getX() < ego.getX() && ball.getVX() >0) {
  41. ball.setVX(ball.getVX()*-1);
  42. }
  43. if(ball.getX() > ego.getX() && ball.getVX() <0) {
  44. ball.setVX(ball.getVX()*-1);
  45. }
  46. }
  47. @Override
  48. protected int calcNrBricksX() {
  49. // lt. Aufgabe sollten es eigentlich 6 sein - die passen allerdings nicht komplett ins Fenster ;)
  50. // --> deshalb haben wir nur 5...
  51. return 5;
  52. }
  53. @Override
  54. protected int calcNrBricksY() {
  55. // TODO Auto-generated method stub
  56. return 5;
  57. }
  58. @Override
  59. protected double getBrickSizeX() {
  60. // TODO Auto-generated method stub
  61. return 60;
  62. }
  63. @Override
  64. protected double getBrickSizeY() {
  65. // TODO Auto-generated method stub
  66. return 30;
  67. }
  68. @Override
  69. protected double getBrickStartX() {
  70. // TODO Auto-generated method stub
  71. return 90;
  72. }
  73. @Override
  74. protected double getBrickStartY() {
  75. // TODO Auto-generated method stub
  76. return 60;
  77. }
  78. @Override
  79. protected GameObject createEgoObject() {
  80. RectObject blueBox = new RectObject("ego", this, 350, 550, 0, 0, 60, 10, Color.BLUE);
  81. blueBox.generateColliders();
  82. EgoController ec = new EgoController(30);
  83. blueBox.addController(ec);
  84. logger.info("ego created.");
  85. return blueBox;
  86. }
  87. @Override
  88. protected GameObject createBall() {
  89. GameObject ball = new FallingStar("ball1", this, 350, 350, 130, 130, Color.RED, 5);
  90. ball.addController(new ReboundController());
  91. logger.info("ball created.");
  92. return ball;
  93. }
  94. @Override
  95. protected GameObject createBrick(int row, int column) {
  96. double xPos = getBrickStartX()+(2*row*getBrickSizeX());
  97. double yPos = getBrickStartY()+(2*column*getBrickSizeY());
  98. //if(row % 2 == 0 || column % 2 == 0) {
  99. // return null;
  100. //}
  101. Color col = null;
  102. double random = Math.random();
  103. if(random < 0.25) {
  104. col = Color.GREEN;
  105. }
  106. if(random >= 0.25 && random < 0.5) {
  107. col = Color.RED;
  108. }
  109. if(random >= 0.5 && random < 0.75) {
  110. col = Color.BLUE;
  111. }
  112. if(random >= 0.75) {
  113. col = Color.YELLOW;
  114. }
  115. RectObject brick = new RectObject("brick"+row+column, this, xPos, yPos, 0, 0, 60, 30, col);
  116. brick.addCollider(new RectCollider("brickcoll"+row+column, brick, 60, 30));
  117. logger.info("brick created.");
  118. return brick;
  119. }
  120. }