Aufgaben 11
This commit is contained in:
parent
301c4993a7
commit
2f00876eec
@ -18,7 +18,7 @@ public class GameLoopManager {
|
|||||||
this.gameView.setStatusText("Andreas Greiner - Java Programmierung SS 2021");
|
this.gameView.setStatusText("Andreas Greiner - Java Programmierung SS 2021");
|
||||||
this.gameView.setWindowIcon("Target.png");
|
this.gameView.setWindowIcon("Target.png");
|
||||||
this.gameObjectManager = new GameObjectManager(gameView);
|
this.gameObjectManager = new GameObjectManager(gameView);
|
||||||
this.inputManager = new InputManager(gameView, gameObjectManager.getPlayer());
|
this.inputManager = new InputManager(gameView, gameObjectManager.getPlayerObject());
|
||||||
this.gamePlayManager = new GamePlayManager(gameView, gameObjectManager);
|
this.gamePlayManager = new GamePlayManager(gameView, gameObjectManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,7 +3,6 @@ package de.thdeg.greiner.superpangworld.game.managers;
|
|||||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.MovingGameObject;
|
|
||||||
import de.thdeg.greiner.superpangworld.graphics.immovable.*;
|
import de.thdeg.greiner.superpangworld.graphics.immovable.*;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.*;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.*;
|
||||||
|
|
||||||
@ -15,7 +14,6 @@ import java.util.LinkedList;
|
|||||||
*/
|
*/
|
||||||
class GameObjectManager {
|
class GameObjectManager {
|
||||||
|
|
||||||
/** The GameView to display the objects */
|
|
||||||
private GameView gameView;
|
private GameView gameView;
|
||||||
|
|
||||||
private LinkedList<Bubble> bubbles;
|
private LinkedList<Bubble> bubbles;
|
||||||
@ -24,9 +22,9 @@ class GameObjectManager {
|
|||||||
private LevelProgressBar levelProgressBar;
|
private LevelProgressBar levelProgressBar;
|
||||||
private LevelLabel levelLabel;
|
private LevelLabel levelLabel;
|
||||||
private ScoreLabel scoreLabel;
|
private ScoreLabel scoreLabel;
|
||||||
private LivesIcon livesIcon;
|
private LivesLabel livesLabel;
|
||||||
private Background background;
|
private Background background;
|
||||||
private Player player;
|
private PlayerObject playerObject;
|
||||||
|
|
||||||
private RandomBall randomBall;
|
private RandomBall randomBall;
|
||||||
private FollowerBall followerBall;
|
private FollowerBall followerBall;
|
||||||
@ -48,10 +46,10 @@ class GameObjectManager {
|
|||||||
this.levelProgressBar = new LevelProgressBar(gameView);
|
this.levelProgressBar = new LevelProgressBar(gameView);
|
||||||
this.levelLabel = new LevelLabel(gameView);
|
this.levelLabel = new LevelLabel(gameView);
|
||||||
this.scoreLabel = new ScoreLabel(gameView);
|
this.scoreLabel = new ScoreLabel(gameView);
|
||||||
this.livesIcon = new LivesIcon(gameView);
|
this.livesLabel = new LivesLabel(gameView);
|
||||||
this.background = new Background(gameView);
|
this.background = new Background(gameView);
|
||||||
|
|
||||||
this.player = new Player(gameView);
|
this.playerObject = new PlayerObject(gameView);
|
||||||
|
|
||||||
this.randomBall = new RandomBall(gameView);
|
this.randomBall = new RandomBall(gameView);
|
||||||
this.followerBall = new FollowerBall(gameView, randomBall);
|
this.followerBall = new FollowerBall(gameView, randomBall);
|
||||||
@ -68,11 +66,10 @@ class GameObjectManager {
|
|||||||
gameObjects.add(levelProgressBar);
|
gameObjects.add(levelProgressBar);
|
||||||
gameObjects.add(levelLabel);
|
gameObjects.add(levelLabel);
|
||||||
gameObjects.add(scoreLabel);
|
gameObjects.add(scoreLabel);
|
||||||
gameObjects.add(livesIcon);
|
gameObjects.add(livesLabel);
|
||||||
gameObjects.add(player);
|
gameObjects.add(playerObject);
|
||||||
gameObjects.add(randomBall);
|
gameObjects.add(randomBall);
|
||||||
gameObjects.add(followerBall);
|
//gameObjects.add(followerBall);
|
||||||
|
|
||||||
|
|
||||||
gameObjects.forEach(gameObject ->{
|
gameObjects.forEach(gameObject ->{
|
||||||
gameObject.update();
|
gameObject.update();
|
||||||
@ -84,8 +81,8 @@ class GameObjectManager {
|
|||||||
* Get the player object.
|
* Get the player object.
|
||||||
* @return the player
|
* @return the player
|
||||||
*/
|
*/
|
||||||
public Player getPlayer(){
|
public PlayerObject getPlayerObject(){
|
||||||
return player;
|
return playerObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -96,6 +93,38 @@ class GameObjectManager {
|
|||||||
return bubbles;
|
return bubbles;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the level label.
|
||||||
|
* @return the level label
|
||||||
|
*/
|
||||||
|
public LevelLabel getLevelLabel(){
|
||||||
|
return this.levelLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the lives label.
|
||||||
|
* @return the lives label
|
||||||
|
*/
|
||||||
|
public LivesLabel getLivesLabel() {
|
||||||
|
return livesLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the score label.
|
||||||
|
* @return the score label
|
||||||
|
*/
|
||||||
|
public ScoreLabel getScoreLabel() {
|
||||||
|
return scoreLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the level progress bar.
|
||||||
|
* @return the level progress bar
|
||||||
|
*/
|
||||||
|
public LevelProgressBar getLevelProgressBar(){
|
||||||
|
return levelProgressBar;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the harpoons.
|
* Get the harpoons.
|
||||||
* @return the harpoons
|
* @return the harpoons
|
||||||
@ -114,7 +143,7 @@ class GameObjectManager {
|
|||||||
for (GameObject gameObject : gameObjects) {
|
for (GameObject gameObject : gameObjects) {
|
||||||
if (gameObject.getClass() != LevelLabel.class
|
if (gameObject.getClass() != LevelLabel.class
|
||||||
&& gameObject.getClass() != LevelProgressBar.class
|
&& gameObject.getClass() != LevelProgressBar.class
|
||||||
&& gameObject.getClass() != LivesIcon.class
|
&& gameObject.getClass() != LivesLabel.class
|
||||||
&& gameObject.getClass() != ScoreLabel.class){
|
&& gameObject.getClass() != ScoreLabel.class){
|
||||||
gameObject.adaptPosition(adaptX, adaptY);
|
gameObject.adaptPosition(adaptX, adaptY);
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@ import de.thdeg.greiner.superpangworld.gameview.GameView;
|
|||||||
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.Position;
|
import de.thdeg.greiner.superpangworld.graphics.base.Position;
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.helper.Level;
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.helper.Player;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.Harpoon;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.Harpoon;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.HexagonalBubble;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.HexagonalBubble;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.RoundBubble;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.RoundBubble;
|
||||||
@ -11,7 +13,6 @@ import de.thdeg.greiner.superpangworld.graphics.moveable.SpecialBubble;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,6 +28,10 @@ public class GamePlayManager {
|
|||||||
private boolean listHasBeenDeleted;
|
private boolean listHasBeenDeleted;
|
||||||
/** Generator for random values */
|
/** Generator for random values */
|
||||||
private Random random;
|
private Random random;
|
||||||
|
/** Das erste Level */
|
||||||
|
private Level level;
|
||||||
|
/** Der Spieler */
|
||||||
|
private Player player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create the manager handling the gameplay.
|
* Create the manager handling the gameplay.
|
||||||
@ -37,61 +42,26 @@ public class GamePlayManager {
|
|||||||
listHasBeenDeleted = false;
|
listHasBeenDeleted = false;
|
||||||
this.gameView = gameView;
|
this.gameView = gameView;
|
||||||
this.gameObjectManager = gameObjectManager;
|
this.gameObjectManager = gameObjectManager;
|
||||||
|
this.level = new Level(1,10000,10000);
|
||||||
|
player = new Player(this.level);
|
||||||
this.random = new Random();
|
this.random = new Random();
|
||||||
gameObjectManager.getPlayer().setGamePlayManager(this);
|
gameObjectManager.getPlayerObject().setGamePlayManager(this);
|
||||||
|
gameObjectManager.getLevelLabel().setLevel(level.number);
|
||||||
|
gameObjectManager.getLivesLabel().setLifeCount(player.lives);
|
||||||
|
gameObjectManager.getScoreLabel().setScore(player.score);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle the gameplay.
|
* Handle the gameplay.
|
||||||
*/
|
*/
|
||||||
public void updateGamePlay(){
|
public void updateGamePlay(){
|
||||||
spawnAndDestroyBubbles();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Spawn and destory bubbles.
|
|
||||||
*/
|
|
||||||
private void spawnAndDestroyBubbles(){
|
|
||||||
// Spawn a bubble every second
|
|
||||||
if(gameView.timerExpired("SpawnBubble","GamePlayManager")){
|
if(gameView.timerExpired("SpawnBubble","GamePlayManager")){
|
||||||
addRandomBubble();
|
RoundBubble roundBubble = new RoundBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayerObject())));
|
||||||
gameView.setTimer("SpawnBubble","GamePlayManager",1000);
|
|
||||||
}
|
|
||||||
// Remove a bubble every 5 seconds
|
|
||||||
if(!gameObjectManager.getBubbles().isEmpty() && gameView.timerExpired("DestroyBubble","GamePlayManager")){
|
|
||||||
gameObjectManager.getBubbles().remove(random.nextInt(gameObjectManager.getBubbles().size()));
|
|
||||||
gameView.setTimer("DestroyBubble","GamePlayManager",5000);
|
|
||||||
}
|
|
||||||
// Delete all bubbles after 10 seconds of playing
|
|
||||||
if(!listHasBeenDeleted && gameView.getGameTimeInMilliseconds()>=10000){
|
|
||||||
gameObjectManager.getBubbles().clear();
|
|
||||||
listHasBeenDeleted = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds a random bubble to the game. Percentages:
|
|
||||||
* - 60% normal bubble
|
|
||||||
* - 30% hexagonal bubble
|
|
||||||
* - 10% special bubble
|
|
||||||
*/
|
|
||||||
private void addRandomBubble(){
|
|
||||||
int randomNumber = random.nextInt(100);
|
|
||||||
if(randomNumber<60){
|
|
||||||
RoundBubble roundBubble = new RoundBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer())));
|
|
||||||
roundBubble.setGamePlayManager(this);
|
roundBubble.setGamePlayManager(this);
|
||||||
gameObjectManager.getBubbles().add(roundBubble);
|
gameObjectManager.getBubbles().add(roundBubble);
|
||||||
}else if(randomNumber<90){
|
gameView.setTimer("SpawnBubble","GamePlayManager",3000);
|
||||||
HexagonalBubble hexagonalBubble = new HexagonalBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer())));
|
|
||||||
hexagonalBubble.setGamePlayManager(this);
|
|
||||||
gameObjectManager.getBubbles().add(hexagonalBubble);
|
|
||||||
}else{
|
|
||||||
SpecialBubble specialBubble = new SpecialBubble(gameView, new ArrayList<>(Arrays.asList(gameObjectManager.getPlayer())));
|
|
||||||
specialBubble.setGamePlayManager(this);
|
|
||||||
gameObjectManager.getBubbles().add(specialBubble);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -122,7 +92,71 @@ public class GamePlayManager {
|
|||||||
* @param bubble the bubble to remove
|
* @param bubble the bubble to remove
|
||||||
*/
|
*/
|
||||||
public void destroy(Bubble bubble){
|
public void destroy(Bubble bubble){
|
||||||
gameObjectManager.getBubbles().remove(bubble);
|
if(gameObjectManager.getBubbles().contains(bubble)) {
|
||||||
|
if (bubble.getSize() > 1.25) {
|
||||||
|
addRandomBubble(bubble.getSize() / 2, bubble.getSpeedInPixel(), bubble.getPosition(), false);
|
||||||
|
addRandomBubble(bubble.getSize() / 2, bubble.getSpeedInPixel(), bubble.getPosition(), false);
|
||||||
|
}
|
||||||
|
|
||||||
|
gameObjectManager.getBubbles().remove(bubble);
|
||||||
|
player.score += bubble.getBurstScore();
|
||||||
|
updateHud();
|
||||||
|
if(player.score>=level.neededOverallScore){
|
||||||
|
switchLevel();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateHud(){
|
||||||
|
gameObjectManager.getScoreLabel().setScore(player.score);
|
||||||
|
double progress = (player.score- level.neededOverallScore+ level.neededLevelScore * 1.0) / level.neededLevelScore;
|
||||||
|
System.out.println(progress);
|
||||||
|
gameObjectManager.getLevelProgressBar().setLevelProgress(Math.min((int)(progress*100),100));
|
||||||
|
gameObjectManager.getLevelLabel().setLevel(level.number);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void switchLevel(){
|
||||||
|
if(level.number==99){
|
||||||
|
System.out.println("You won!");
|
||||||
|
}else{
|
||||||
|
Level newLevel = new Level(level.number+1,10000,(level.number+1)*10000);
|
||||||
|
level = newLevel;
|
||||||
|
updateHud();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add a random bubble with given values to the game. Percentages:
|
||||||
|
* - 60% normal bubble
|
||||||
|
* - 30% hexagonal bubble
|
||||||
|
* - 10% special bubble
|
||||||
|
*/
|
||||||
|
private void addRandomBubble(double size, double speedInPixel, Position position, boolean spawning){
|
||||||
|
int randomNumber = random.nextInt(59);
|
||||||
|
ArrayList<CollidableGameObject> collidableGameObjects = new ArrayList<>();
|
||||||
|
collidableGameObjects.add(gameObjectManager.getPlayerObject());
|
||||||
|
collidableGameObjects.addAll(gameObjectManager.getHarpoons());
|
||||||
|
if(randomNumber<60){
|
||||||
|
RoundBubble roundBubble = new RoundBubble(gameView, collidableGameObjects,size,speedInPixel,position,spawning);
|
||||||
|
roundBubble.setGamePlayManager(this);
|
||||||
|
gameObjectManager.getBubbles().add(roundBubble);
|
||||||
|
}else if(randomNumber<90){
|
||||||
|
HexagonalBubble hexagonalBubble = new HexagonalBubble(gameView, collidableGameObjects);
|
||||||
|
hexagonalBubble.setGamePlayManager(this);
|
||||||
|
gameObjectManager.getBubbles().add(hexagonalBubble);
|
||||||
|
}else{
|
||||||
|
SpecialBubble specialBubble = new SpecialBubble(gameView, collidableGameObjects);
|
||||||
|
specialBubble.setGamePlayManager(this);
|
||||||
|
gameObjectManager.getBubbles().add(specialBubble);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loose a life and remove all bubbles
|
||||||
|
*/
|
||||||
|
public void looseLife(){
|
||||||
|
player.lives--;
|
||||||
|
gameObjectManager.getLivesLabel().setLifeCount(player.lives);
|
||||||
|
gameObjectManager.getBubbles().clear();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package de.thdeg.greiner.superpangworld.game.managers;
|
package de.thdeg.greiner.superpangworld.game.managers;
|
||||||
|
|
||||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.Player;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.PlayerObject;
|
||||||
|
|
||||||
import java.awt.event.KeyEvent;
|
import java.awt.event.KeyEvent;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
@ -14,18 +14,18 @@ class InputManager {
|
|||||||
/** The gameView, which displays the player object */
|
/** The gameView, which displays the player object */
|
||||||
private GameView gameView;
|
private GameView gameView;
|
||||||
/** The player object */
|
/** The player object */
|
||||||
private Player player;
|
private PlayerObject playerObject;
|
||||||
/** Flag, if diagonal movement is allowed */
|
/** Flag, if diagonal movement is allowed */
|
||||||
private static final boolean DIAGONAL_MOVEMENT_ALLOWED = false;
|
private static final boolean DIAGONAL_MOVEMENT_ALLOWED = false;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a manager handling the user input
|
* Create a manager handling the user input
|
||||||
* @param gameView the GameView
|
* @param gameView the GameView
|
||||||
* @param player the player object
|
* @param playerObject the player object
|
||||||
*/
|
*/
|
||||||
public InputManager(GameView gameView, Player player){
|
public InputManager(GameView gameView, PlayerObject playerObject){
|
||||||
this.gameView = gameView;
|
this.gameView = gameView;
|
||||||
this.player = player;
|
this.playerObject = playerObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,15 +34,15 @@ class InputManager {
|
|||||||
public void updateUserInputs() {
|
public void updateUserInputs() {
|
||||||
Integer[] gedruekteTasten = gameView.getKeyCodesOfCurrentlyPressedKeys();
|
Integer[] gedruekteTasten = gameView.getKeyCodesOfCurrentlyPressedKeys();
|
||||||
if(Arrays.stream(gedruekteTasten).anyMatch(k -> k == KeyEvent.VK_SPACE)){
|
if(Arrays.stream(gedruekteTasten).anyMatch(k -> k == KeyEvent.VK_SPACE)){
|
||||||
player.shoot();
|
playerObject.shoot();
|
||||||
}
|
}
|
||||||
for (int keyCode : gedruekteTasten) {
|
for (int keyCode : gedruekteTasten) {
|
||||||
switch(keyCode) {
|
switch(keyCode) {
|
||||||
case KeyEvent.VK_LEFT:
|
case KeyEvent.VK_LEFT:
|
||||||
player.left();
|
playerObject.left();
|
||||||
break;
|
break;
|
||||||
case KeyEvent.VK_RIGHT:
|
case KeyEvent.VK_RIGHT:
|
||||||
player.right();
|
playerObject.right();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
continue;
|
continue;
|
||||||
|
@ -1,9 +1,10 @@
|
|||||||
package de.thdeg.greiner.superpangworld.graphics.base;
|
package de.thdeg.greiner.superpangworld.graphics.base;
|
||||||
|
|
||||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.moveable.Player;
|
import de.thdeg.greiner.superpangworld.graphics.moveable.Harpoon;
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.moveable.PlayerObject;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Bubble, which moves around on the screen and can be shot by the player.
|
* A Bubble, which moves around on the screen and can be shot by the player.
|
||||||
@ -12,6 +13,16 @@ public abstract class Bubble extends CollidingGameObject implements MovingGameOb
|
|||||||
|
|
||||||
/** Flag, if the bubble flies from left to right */
|
/** Flag, if the bubble flies from left to right */
|
||||||
private boolean flyFromLeftToRight;
|
private boolean flyFromLeftToRight;
|
||||||
|
/** Random generator */
|
||||||
|
private Random random;
|
||||||
|
/** Flag, if the bubble is in the spawning phase */
|
||||||
|
private boolean spawning;
|
||||||
|
/** Spawning speed */
|
||||||
|
private int spawnSpeed;
|
||||||
|
/** Unique id for the spawn event timer */
|
||||||
|
private long spawnID;
|
||||||
|
/** Temporary movement action */
|
||||||
|
private Position nextPosition;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a bubble with default values.
|
* Create a bubble with default values.
|
||||||
@ -22,11 +33,49 @@ public abstract class Bubble extends CollidingGameObject implements MovingGameOb
|
|||||||
public Bubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith){
|
public Bubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith){
|
||||||
super(gameView,objectsToCollideWith);
|
super(gameView,objectsToCollideWith);
|
||||||
rotation = 90;
|
rotation = 90;
|
||||||
size = 5;
|
size = 10;
|
||||||
width = (int) (12 * size);
|
width = (int) (12 * size);
|
||||||
height = (int) (12 * size);
|
height = (int) (12 * size);
|
||||||
speedInPixel = 5;
|
speedInPixel = 1;
|
||||||
flyFromLeftToRight = true;
|
flyFromLeftToRight = true;
|
||||||
|
|
||||||
|
spawnID = UUID.randomUUID().getLeastSignificantBits();
|
||||||
|
random = new Random();
|
||||||
|
position.setTo(random.nextInt(GameView.WIDTH-width),-width);
|
||||||
|
spawning = true;
|
||||||
|
spawnSpeed = 500;
|
||||||
|
gameView.setTimer("spawn"+spawnID,"bubble"+spawnID,spawnSpeed);
|
||||||
|
|
||||||
|
nextPosition = new Position(random.nextInt(GameView.WIDTH-width),random.nextInt(GameView.HEIGHT-width));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a bubble.
|
||||||
|
* @param gameView the {@link GameView} to display the bubble
|
||||||
|
* @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with
|
||||||
|
* @param size the object size
|
||||||
|
* @param speedInPixel the speed in pixel per tick
|
||||||
|
* @param position the position
|
||||||
|
* @param spawning flag, if the bubble is in the spawning phase
|
||||||
|
*/
|
||||||
|
public Bubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith, double size, double speedInPixel, Position position, boolean spawning){
|
||||||
|
super(gameView,objectsToCollideWith);
|
||||||
|
rotation = 90;
|
||||||
|
this.size = size;
|
||||||
|
width = (int) (12 * size);
|
||||||
|
height = (int) (12 * size);
|
||||||
|
this.speedInPixel = speedInPixel;
|
||||||
|
flyFromLeftToRight = true;
|
||||||
|
this.position.setTo(position.x,position.y);
|
||||||
|
spawnID = UUID.randomUUID().getLeastSignificantBits();
|
||||||
|
random = new Random();
|
||||||
|
this.spawning = spawning;
|
||||||
|
if(spawning){
|
||||||
|
spawnSpeed = 500;
|
||||||
|
gameView.setTimer("spawn"+spawnID,"bubble"+spawnID,spawnSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
|
nextPosition = new Position(random.nextInt(GameView.WIDTH-width),random.nextInt(GameView.HEIGHT-width));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -34,32 +83,59 @@ public abstract class Bubble extends CollidingGameObject implements MovingGameOb
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void updatePosition(){
|
public void updatePosition(){
|
||||||
if(flyFromLeftToRight && getPosition().x + (width*size) >= GameView.WIDTH){
|
if(spawning){
|
||||||
flyFromLeftToRight = false;
|
if(position.y >= 0){
|
||||||
}else if (!flyFromLeftToRight && getPosition().x <= 0){
|
spawning = false;
|
||||||
flyFromLeftToRight = true;
|
} else if(gameView.timerExpired("spawn"+spawnID,"bubble"+spawnID)){
|
||||||
}
|
position.down(width/4);
|
||||||
if(flyFromLeftToRight){
|
gameView.setTimer("spawn"+spawnID,"bubble"+spawnID,spawnSpeed);
|
||||||
getPosition().right(1);
|
}
|
||||||
}else{
|
}else{
|
||||||
getPosition().left(1);
|
double distance = position.distance(nextPosition);
|
||||||
|
if (distance >= speedInPixel) {
|
||||||
|
position.right((nextPosition.x - position.x) / distance * speedInPixel);
|
||||||
|
position.down((nextPosition.y - position.y) / distance * speedInPixel);
|
||||||
|
} else {
|
||||||
|
nextPosition = new Position(random.nextInt(GameView.WIDTH-width),random.nextInt(GameView.HEIGHT-width));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pop the bubble.
|
* Get the score to add when bursting the bubble.
|
||||||
|
*
|
||||||
|
* @return the score to add
|
||||||
*/
|
*/
|
||||||
private void popBubble(){}
|
public int getBurstScore(){
|
||||||
|
return (int)(size*100);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Freezes the time.
|
* Get the size of the bubble.
|
||||||
|
*
|
||||||
|
* @return the size
|
||||||
*/
|
*/
|
||||||
private void freezeTime(){}
|
public double getSize(){
|
||||||
|
return this.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the speed in pixel per tick
|
||||||
|
* @return the speed in pixel per tick
|
||||||
|
*/
|
||||||
|
public double getSpeedInPixel(){
|
||||||
|
return speedInPixel;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void reactToCollision(CollidableGameObject otherObject) {
|
public void reactToCollision(CollidableGameObject otherObject) {
|
||||||
if(otherObject instanceof Player){
|
if(otherObject instanceof PlayerObject){
|
||||||
System.out.println("You died!");
|
gamePlayManager.looseLife();
|
||||||
|
}else if(otherObject instanceof Harpoon){
|
||||||
|
gamePlayManager.destroy((Harpoon) otherObject);
|
||||||
|
gamePlayManager.destroy(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package de.thdeg.greiner.superpangworld.graphics.base;
|
package de.thdeg.greiner.superpangworld.graphics.base;
|
||||||
|
|
||||||
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.helper.XAxisComparator;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -22,9 +25,35 @@ public class MovementPatterns {
|
|||||||
new Position(930,510),new Position(30,510))));
|
new Position(930,510),new Position(30,510))));
|
||||||
ArrayList<Position> zigZag = new ArrayList<>((Arrays.asList( new Position(300,200),new Position(400,340),new Position(500,200),
|
ArrayList<Position> zigZag = new ArrayList<>((Arrays.asList( new Position(300,200),new Position(400,340),new Position(500,200),
|
||||||
new Position(600,340),new Position(700,200),new Position(800,340))));
|
new Position(600,340),new Position(700,200),new Position(800,340))));
|
||||||
|
ArrayList<Position> zero = new ArrayList<>();
|
||||||
|
zero.addAll(square);
|
||||||
|
zero.addAll(zigZag);
|
||||||
|
zero.sort(Comparator.naturalOrder());
|
||||||
|
ArrayList<Position> xFirst = new ArrayList<>(zero);
|
||||||
|
xFirst.sort(new XAxisComparator());
|
||||||
|
|
||||||
|
Comparator<Position> yAxisComparator = new Comparator<Position>() {
|
||||||
|
@Override
|
||||||
|
public int compare(Position o1, Position o2) {
|
||||||
|
return Double.compare(o1.y,o2.y);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
ArrayList<Position> yFirst = new ArrayList<>(zero);
|
||||||
|
yFirst.sort(yAxisComparator);
|
||||||
|
|
||||||
|
|
||||||
|
ArrayList<Position> centered = new ArrayList<>(zero);
|
||||||
|
centered.sort((p1,p2)->{
|
||||||
|
Position pMid = new Position(GameView.WIDTH/2,GameView.HEIGHT/2);
|
||||||
|
return Double.compare(p1.distance(pMid),p2.distance(pMid));
|
||||||
|
});
|
||||||
|
|
||||||
patterns.put("square",square);
|
patterns.put("square",square);
|
||||||
patterns.put("zigzag",zigZag);
|
patterns.put("zigzag",zigZag);
|
||||||
|
patterns.put("zero",zero);
|
||||||
|
patterns.put("XFirst",xFirst);
|
||||||
|
patterns.put("YFirst",yFirst);
|
||||||
|
patterns.put("Centered",centered);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -5,7 +5,7 @@ import java.util.Objects;
|
|||||||
/**
|
/**
|
||||||
* Die Position eines Objekts auf einem Fenster anhand zweidimensionaler Koordinaten.
|
* Die Position eines Objekts auf einem Fenster anhand zweidimensionaler Koordinaten.
|
||||||
*/
|
*/
|
||||||
public class Position implements Cloneable{
|
public class Position implements Cloneable, Comparable<Position>{
|
||||||
|
|
||||||
/** Die x-Koordinate */
|
/** Die x-Koordinate */
|
||||||
public double x;
|
public double x;
|
||||||
@ -137,4 +137,10 @@ public class Position implements Cloneable{
|
|||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
return Objects.hash(x, y);
|
return Objects.hash(x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(Position o) {
|
||||||
|
Position p0 = new Position(0,0);
|
||||||
|
return (int)Math.signum(this.distance(p0)-o.distance(p0));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,27 @@
|
|||||||
|
package de.thdeg.greiner.superpangworld.graphics.helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A Level representing a level in the game.
|
||||||
|
*/
|
||||||
|
public class Level {
|
||||||
|
|
||||||
|
/** The number of the level */
|
||||||
|
public int number;
|
||||||
|
/** The needed score to surpass this level */
|
||||||
|
public int neededLevelScore;
|
||||||
|
/** The overall needed score to surpass this level */
|
||||||
|
public int neededOverallScore;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a level with a number, a needed score to surpass the level and a needed overall score to surpass the level.
|
||||||
|
*
|
||||||
|
* @param number the level number
|
||||||
|
* @param neededLevelScore the needed score to surpass this level
|
||||||
|
* @param neededOverallScore the overall needed score to surpass this level
|
||||||
|
*/
|
||||||
|
public Level(int number, int neededLevelScore, int neededOverallScore){
|
||||||
|
this.number = number;
|
||||||
|
this.neededLevelScore = neededLevelScore;
|
||||||
|
this.neededOverallScore = neededOverallScore;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package de.thdeg.greiner.superpangworld.graphics.helper;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A player representing the main player in the game.
|
||||||
|
*/
|
||||||
|
public class Player {
|
||||||
|
|
||||||
|
/** The max amount of lives a single player has */
|
||||||
|
private static final int MAX_LIVES = 3;
|
||||||
|
/** The current amount of lives the player has */
|
||||||
|
public int lives;
|
||||||
|
/** The current score the player has */
|
||||||
|
public int score;
|
||||||
|
/** The current level the play is on */
|
||||||
|
public Level level;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a player.
|
||||||
|
* @param level the level the player is on
|
||||||
|
*/
|
||||||
|
public Player(Level level){
|
||||||
|
lives = MAX_LIVES;
|
||||||
|
score = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
package de.thdeg.greiner.superpangworld.graphics.helper;
|
||||||
|
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.base.Position;
|
||||||
|
|
||||||
|
import java.util.Comparator;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compare two Positions regarding their x values
|
||||||
|
*/
|
||||||
|
public class XAxisComparator implements Comparator<Position> {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compare(Position o1, Position o2) {
|
||||||
|
return (int)Math.signum(o1.x-o2.x);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -22,7 +22,7 @@ public class LevelLabel extends GameObject {
|
|||||||
size = 3;
|
size = 3;
|
||||||
width = 101;
|
width = 101;
|
||||||
height = 8;
|
height = 8;
|
||||||
level = 8;
|
level = 1;
|
||||||
getPosition().setTo(GameView.WIDTH/2 - (width/2),GameView.HEIGHT-height-60);
|
getPosition().setTo(GameView.WIDTH/2 - (width/2),GameView.HEIGHT-height-60);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -34,6 +34,14 @@ public class LevelLabel extends GameObject {
|
|||||||
gameView.addTextToCanvas("Level "+level,getPosition().x,getPosition().y,40,Color.YELLOW,0);
|
gameView.addTextToCanvas("Level "+level,getPosition().x,getPosition().y,40,Color.YELLOW,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current level number
|
||||||
|
* @param level the level number
|
||||||
|
*/
|
||||||
|
public void setLevel(int level) {
|
||||||
|
this.level = level;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateStatus() {
|
public void updateStatus() {
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ public class LevelProgressBar extends GameObject {
|
|||||||
size = 3;
|
size = 3;
|
||||||
width = 101;
|
width = 101;
|
||||||
height = 8;
|
height = 8;
|
||||||
levelProgress = 30;
|
levelProgress = 0;
|
||||||
getPosition().setTo(GameView.WIDTH/2 - (width/2),GameView.HEIGHT-(height*size));
|
getPosition().setTo(GameView.WIDTH/2 - (width/2),GameView.HEIGHT-(height*size));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,9 +4,9 @@ import de.thdeg.greiner.superpangworld.gameview.GameView;
|
|||||||
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The icon to display the remaining lives.
|
* The label to display the remaining lives.
|
||||||
*/
|
*/
|
||||||
public class LivesIcon extends GameObject {
|
public class LivesLabel extends GameObject {
|
||||||
|
|
||||||
private final static String ICON =
|
private final static String ICON =
|
||||||
" RR RR \n"+
|
" RR RR \n"+
|
||||||
@ -19,24 +19,38 @@ public class LivesIcon extends GameObject {
|
|||||||
" RRR \n"+
|
" RRR \n"+
|
||||||
" R \n";
|
" R \n";
|
||||||
|
|
||||||
|
private int lifeCount;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create lives icon.
|
* Create lives label.
|
||||||
*
|
*
|
||||||
* @param gameView the gameView
|
* @param gameView the gameView
|
||||||
*/
|
*/
|
||||||
public LivesIcon(GameView gameView) {
|
public LivesLabel(GameView gameView) {
|
||||||
super(gameView);
|
super(gameView);
|
||||||
rotation = 0;
|
rotation = 0;
|
||||||
size = 5;
|
size = 5;
|
||||||
width = 12;
|
width = 12;
|
||||||
height = 12;
|
height = 12;
|
||||||
|
|
||||||
position.setTo(50,GameView.HEIGHT-50);
|
this.lifeCount = 0;
|
||||||
|
|
||||||
|
position.setTo(0,GameView.HEIGHT-50);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addToCanvas() {
|
public void addToCanvas() {
|
||||||
gameView.addBlockImageToCanvas(ICON,position.x,position.y,size,rotation);
|
for(int i=0;i<lifeCount;i++){
|
||||||
|
gameView.addBlockImageToCanvas(ICON,position.x + (i*size*width),position.y,size,rotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current life count.
|
||||||
|
* @param lifeCount the lives
|
||||||
|
*/
|
||||||
|
public void setLifeCount(int lifeCount) {
|
||||||
|
this.lifeCount = lifeCount;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -19,7 +19,7 @@ public class ScoreLabel extends GameObject {
|
|||||||
*/
|
*/
|
||||||
public ScoreLabel(GameView gameView) {
|
public ScoreLabel(GameView gameView) {
|
||||||
super(gameView);
|
super(gameView);
|
||||||
score = 1300;
|
score = 0;
|
||||||
size = 50;
|
size = 50;
|
||||||
width = 100;
|
width = 100;
|
||||||
height = 8;
|
height = 8;
|
||||||
@ -32,8 +32,15 @@ public class ScoreLabel extends GameObject {
|
|||||||
gameView.addTextToCanvas(Integer.toString(score),getPosition().x,getPosition().y,40, Color.YELLOW,0);
|
gameView.addTextToCanvas(Integer.toString(score),getPosition().x,getPosition().y,40, Color.YELLOW,0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the game score
|
||||||
|
* @param score the score
|
||||||
|
*/
|
||||||
|
public void setScore(int score) {
|
||||||
|
this.score = score;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void updateStatus() {
|
public void updateStatus() {
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,6 @@ public class HexagonalBubble extends Bubble {
|
|||||||
public HexagonalBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
public HexagonalBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
||||||
super(gameView,objectsToCollideWith);
|
super(gameView,objectsToCollideWith);
|
||||||
|
|
||||||
Random rand = new Random();
|
|
||||||
position.setTo(rand.nextInt(GameView.WIDTH/2),rand.nextInt(GameView.HEIGHT/2));
|
|
||||||
|
|
||||||
size=0.6;
|
size=0.6;
|
||||||
speedInPixel = 2;
|
speedInPixel = 2;
|
||||||
|
|
||||||
|
@ -2,8 +2,6 @@ package de.thdeg.greiner.superpangworld.graphics.moveable;
|
|||||||
|
|
||||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.MovingGameObject;
|
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
@ -11,7 +9,7 @@ import java.util.Objects;
|
|||||||
/**
|
/**
|
||||||
* The game character controlled by the player.
|
* The game character controlled by the player.
|
||||||
*/
|
*/
|
||||||
public class Player extends CollidableGameObject {
|
public class PlayerObject extends CollidableGameObject {
|
||||||
|
|
||||||
/** Flag, if the player is shooting */
|
/** Flag, if the player is shooting */
|
||||||
private boolean shooting;
|
private boolean shooting;
|
||||||
@ -41,7 +39,7 @@ public class Player extends CollidableGameObject {
|
|||||||
* Create the game character with default values
|
* Create the game character with default values
|
||||||
* @param gameView the {@link GameView} to display the character
|
* @param gameView the {@link GameView} to display the character
|
||||||
*/
|
*/
|
||||||
public Player(GameView gameView){
|
public PlayerObject(GameView gameView){
|
||||||
super(gameView);
|
super(gameView);
|
||||||
position.setTo(GameView.WIDTH/2, GameView.HEIGHT/1.5);
|
position.setTo(GameView.WIDTH/2, GameView.HEIGHT/1.5);
|
||||||
shooting = false;
|
shooting = false;
|
||||||
@ -103,8 +101,8 @@ public class Player extends CollidableGameObject {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Player clone() {
|
public PlayerObject clone() {
|
||||||
return (Player) super.clone();
|
return (PlayerObject) super.clone();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -112,8 +110,8 @@ public class Player extends CollidableGameObject {
|
|||||||
if (this == o) return true;
|
if (this == o) return true;
|
||||||
if (o == null || getClass() != o.getClass()) return false;
|
if (o == null || getClass() != o.getClass()) return false;
|
||||||
if (!super.equals(o)) return false;
|
if (!super.equals(o)) return false;
|
||||||
Player player = (Player) o;
|
PlayerObject playerObject = (PlayerObject) o;
|
||||||
return shooting == player.shooting;
|
return shooting == playerObject.shooting;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
@ -32,7 +32,7 @@ public class RandomBall extends GameObject implements MovingGameObject {
|
|||||||
|
|
||||||
movementPatterns = new MovementPatterns();
|
movementPatterns = new MovementPatterns();
|
||||||
|
|
||||||
movementPattern = movementPatterns.getRandomPattern();
|
movementPattern = movementPatterns.getPattern("Centered");
|
||||||
movementPatternIndex = 0;
|
movementPatternIndex = 0;
|
||||||
targetPosition = movementPattern.get(0);
|
targetPosition = movementPattern.get(0);
|
||||||
}
|
}
|
||||||
@ -47,7 +47,7 @@ public class RandomBall extends GameObject implements MovingGameObject {
|
|||||||
if(movementPatternIndex < movementPattern.size()-1){
|
if(movementPatternIndex < movementPattern.size()-1){
|
||||||
movementPatternIndex++;
|
movementPatternIndex++;
|
||||||
}else{
|
}else{
|
||||||
movementPattern = movementPatterns.getRandomPattern();
|
movementPattern = movementPatterns.getPattern("Centered");
|
||||||
movementPatternIndex = 0;
|
movementPatternIndex = 0;
|
||||||
}
|
}
|
||||||
targetPosition = movementPattern.get(movementPatternIndex);
|
targetPosition = movementPattern.get(movementPatternIndex);
|
||||||
|
@ -3,6 +3,7 @@ package de.thdeg.greiner.superpangworld.graphics.moveable;
|
|||||||
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
import de.thdeg.greiner.superpangworld.gameview.GameView;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
import de.thdeg.greiner.superpangworld.graphics.base.Bubble;
|
||||||
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
import de.thdeg.greiner.superpangworld.graphics.base.CollidableGameObject;
|
||||||
|
import de.thdeg.greiner.superpangworld.graphics.base.Position;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -37,18 +38,30 @@ public class RoundBubble extends Bubble {
|
|||||||
*/
|
*/
|
||||||
public RoundBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
public RoundBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
||||||
super(gameView,objectsToCollideWith);
|
super(gameView,objectsToCollideWith);
|
||||||
|
|
||||||
Random rand = new Random();
|
|
||||||
position.setTo(rand.nextInt(GameView.WIDTH),rand.nextInt(GameView.HEIGHT));
|
|
||||||
|
|
||||||
this.hitBox.width = width-20;
|
this.hitBox.width = width-20;
|
||||||
this.hitBox.height = height-20;
|
this.hitBox.height = height-20;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a round bubble with set values.
|
||||||
|
*
|
||||||
|
* @param gameView the {@link GameView} to display the bubble
|
||||||
|
* @param objectsToCollideWith the list of {@link CollidableGameObject} the bubble can collide with
|
||||||
|
* @param size the object size
|
||||||
|
* @param speedInPixel the speed in Pixel per tick
|
||||||
|
* @param position the Position
|
||||||
|
* @param spawning flag, if the bubble is spawning or not
|
||||||
|
*/
|
||||||
|
public RoundBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith, double size, double speedInPixel, Position position, boolean spawning){
|
||||||
|
super(gameView, objectsToCollideWith, size, speedInPixel, position, spawning);
|
||||||
|
this.hitBox.width = (int) (width*0.8);
|
||||||
|
this.hitBox.height = (int) (height*0.8);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateHitBoxPosition() {
|
protected void updateHitBoxPosition() {
|
||||||
hitBox.x = (int) (position.x+10);
|
hitBox.x = (int) (position.x + (width*0.1));
|
||||||
hitBox.y = (int) (position.y+10);
|
hitBox.y = (int) (position.y + (width*0.1));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,9 +39,6 @@ public class SpecialBubble extends Bubble {
|
|||||||
public SpecialBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
public SpecialBubble(GameView gameView, ArrayList<CollidableGameObject> objectsToCollideWith) {
|
||||||
super(gameView,objectsToCollideWith);
|
super(gameView,objectsToCollideWith);
|
||||||
|
|
||||||
Random rand = new Random();
|
|
||||||
position.setTo(rand.nextInt(GameView.WIDTH),rand.nextInt(GameView.HEIGHT));
|
|
||||||
|
|
||||||
status = Status.FREEZE;
|
status = Status.FREEZE;
|
||||||
|
|
||||||
this.hitBox.width = width-20;
|
this.hitBox.width = width-20;
|
||||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Loading…
Reference in New Issue
Block a user