From 70d431a32da46dd60bc1afd42511db4dc4f7407c Mon Sep 17 00:00:00 2001 From: agreiner Date: Mon, 26 Apr 2021 18:27:12 +0200 Subject: [PATCH] Praktikum 5 --- .../superpangworld/game/GameLoopManager.java | 87 ------------------ .../superpangworld/game/{ => bin}/Start.java | 2 +- .../game/managers/GameLoopManager.java | 39 ++++++++ .../game/managers/GameObjectManager.java | 86 +++++++++++++++++ .../game/managers/GamePlayManager.java | 31 +++++++ .../game/managers/InputManager.java | 58 ++++++++++++ .../superpangworld/graphics/LivesLabe.java | 18 ---- .../graphics/{ => base}/Bubble.java | 29 +----- .../graphics/{ => base}/GameObject.java | 14 ++- .../graphics/{ => base}/Position.java | 2 +- .../graphics/{ => immovable}/Background.java | 0 .../graphics/{ => immovable}/LevelLabel.java | 0 .../{ => immovable}/LevelProgressBar.java | 0 .../graphics/{ => immovable}/LivesIcon.java | 0 .../graphics/{ => immovable}/ScoreLabel.java | 0 .../graphics/{ => moveable}/Harpoon.java | 0 .../{ => moveable}/HexagonalBubble.java | 0 .../graphics/{ => moveable}/Player.java | 0 .../graphics/{ => moveable}/RoundBubble.java | 0 .../{ => moveable}/SpecialBubble.java | 0 SuperPangWorld/src/resources/Herz.png | Bin 1835 -> 0 bytes SuperPangWorld/src/resources/Player.png | Bin 641 -> 0 bytes SuperPangWorld/src/resources/hexagon.png | Bin 0 -> 1994 bytes 23 files changed, 232 insertions(+), 134 deletions(-) delete mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/GameLoopManager.java rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/{ => bin}/Start.java (80%) create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameLoopManager.java create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameObjectManager.java create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java create mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/InputManager.java delete mode 100644 SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesLabe.java rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => base}/Bubble.java (56%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => base}/GameObject.java (73%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => base}/Position.java (97%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => immovable}/Background.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => immovable}/LevelLabel.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => immovable}/LevelProgressBar.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => immovable}/LivesIcon.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => immovable}/ScoreLabel.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => moveable}/Harpoon.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => moveable}/HexagonalBubble.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => moveable}/Player.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => moveable}/RoundBubble.java (100%) rename SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/{ => moveable}/SpecialBubble.java (100%) delete mode 100644 SuperPangWorld/src/resources/Herz.png delete mode 100644 SuperPangWorld/src/resources/Player.png create mode 100644 SuperPangWorld/src/resources/hexagon.png diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/GameLoopManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/GameLoopManager.java deleted file mode 100644 index 44e421a..0000000 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/GameLoopManager.java +++ /dev/null @@ -1,87 +0,0 @@ -package de.thdeg.greiner.superpangworld.game; - -import de.thdeg.greiner.superpangworld.gameview.GameView; -import de.thdeg.greiner.superpangworld.graphics.*; - -import java.awt.*; -import java.awt.event.KeyEvent; -import java.util.Arrays; - -/** Der Manager zur Verwaltung der Spielschleife. */ -public class GameLoopManager { - - private static final boolean DIAGONAL_MOVEMENT_ALLOWED = false; - - private GameView gameView; - private Bubble bubble; - private Harpoon harpoon; - - private LevelProgressBar levelProgressBar; - private LevelLabel levelLabel; - private ScoreLabel scoreLabel; - - private Player player; - - /** Erzeugt den GameLoopManager mit Standardwerten. */ - public GameLoopManager() { - this.gameView = new GameView(); - this.gameView.setWindowTitle("Super Pang World"); - this.gameView.setStatusText("Andreas Greiner - Java Programmierung SS 2021"); - this.gameView.setWindowIcon("Target.png"); - - this.bubble = new Bubble(gameView); - this.harpoon = new Harpoon(gameView); - - this.levelProgressBar = new LevelProgressBar(gameView); - this.levelLabel = new LevelLabel(gameView); - this.scoreLabel = new ScoreLabel(gameView); - - this.player = new Player(gameView); - - gameView.setColorForBlockImage('k',Color.LIGHT_GRAY); - } - - /** Startet das Spiel. */ - public void startGame() { - while(true){ - updateUserInputs(); - - - bubble.updatePosition(); - bubble.addToCanvas(); - harpoon.addToCanvas(); - - levelProgressBar.addToCanvas(); - levelLabel.addToCanvas(); - scoreLabel.addToCanvas(); - - player.addToCanvas(); - - gameView.printCanvas(); - } - } - - void updateUserInputs() { - Integer[] gedruekteTasten = gameView.getKeyCodesOfCurrentlyPressedKeys(); - if(Arrays.stream(gedruekteTasten).anyMatch(k -> k == KeyEvent.VK_SPACE)){ - player.shoot(); - } - for (int keyCode : gedruekteTasten) { - switch(keyCode) { - case KeyEvent.VK_LEFT: - player.left(); - break; - case KeyEvent.VK_RIGHT: - player.right(); - break; - default: - continue; - } - if(!DIAGONAL_MOVEMENT_ALLOWED){ - return; - } - } - } - - -} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/Start.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/bin/Start.java similarity index 80% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/Start.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/bin/Start.java index 6c86166..48fc2e5 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/Start.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/bin/Start.java @@ -1,6 +1,6 @@ package de.thdeg.greiner.superpangworld.game; -import de.thdeg.greiner.superpangworld.game.GameLoopManager; +import de.thdeg.greiner.superpangworld.managers.GameLoopManager; /** * Die Startklasse für das Spiel. diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameLoopManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameLoopManager.java new file mode 100644 index 0000000..dd2026b --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameLoopManager.java @@ -0,0 +1,39 @@ +package de.thdeg.greiner.superpangworld.managers; + +import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.managers.GameObjectManager; +import de.thdeg.greiner.superpangworld.managers.GamePlayManager; +import de.thdeg.greiner.superpangworld.managers.InputManager; + +/** This class manages the main game loop of the game. */ +public class GameLoopManager { + private final GameView gameView; + private final InputManager inputManager; + private final GameObjectManager gameObjectManager; + private final GamePlayManager gamePlayManager; + + /** + * Creates the main loop. + */ + public GameLoopManager() { + this.gameView = new GameView(); + this.gameView.setWindowTitle("UFO-Fight"); + this.gameView.setStatusText("Andreas Berl - Java Programmierung SS 2021"); + this.gameView.setWindowIcon("Target.png"); + this.gameObjectManager = new GameObjectManager(gameView); + this.inputManager = new InputManager(gameView, gameObjectManager.getPlayer()); + this.gamePlayManager = new GamePlayManager(gameView, gameObjectManager); + } + + /** + * Starts the main loop of the game. + */ + public void startGame() { + while (true) { // The "Game-Loop" + gamePlayManager.updateGamePlay(); + inputManager.updateUserInputs(); + gameObjectManager.updateGameObjects(); + gameView.printCanvas(); + } + } +} \ No newline at end of file diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameObjectManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameObjectManager.java new file mode 100644 index 0000000..e3beefc --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GameObjectManager.java @@ -0,0 +1,86 @@ +package de.thdeg.greiner.superpangworld.managers; + +import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.graphics.immovable.*; +import de.thdeg.greiner.superpangworld.graphics.moveable.*; + +import java.awt.*; + +/** + * The manager handling the display and passive movement of the game objects. + */ +public class GameObjectManager { + + /** The GameView to display the objects */ + private GameView gameView; + + /** The game objects */ + private RoundBubble roundBubble; + private HexagonalBubble hexBubble; + private SpecialBubble specialBubble; + private Harpoon harpoon; + private LevelProgressBar levelProgressBar; + private LevelLabel levelLabel; + private ScoreLabel scoreLabel; + private LivesIcon livesIcon; + private Background background; + private Player player; + + /** + * Create a manager handling the display and passive movement of the game objects. + * @param gameView the GameView + */ + public GameObjectManager(GameView gameView){ + this.gameView = gameView; + + gameView.setColorForBlockImage('k', Color.LIGHT_GRAY); + + this.roundBubble = new RoundBubble(gameView); + this.hexBubble = new HexagonalBubble(gameView); + this.specialBubble = new SpecialBubble(gameView); + + this.harpoon = new Harpoon(gameView); + + this.levelProgressBar = new LevelProgressBar(gameView); + this.levelLabel = new LevelLabel(gameView); + this.scoreLabel = new ScoreLabel(gameView); + + this.livesIcon = new LivesIcon(gameView); + + this.background = new Background(gameView); + + this.player = new Player(gameView); + + } + + /** + * Add the objects to the canvas and handle update their positions. + */ + public void updateGameObjects(){ + background.addToCanvas(); + roundBubble.updatePosition(); + roundBubble.addToCanvas(); + hexBubble.updatePosition(); + hexBubble.addToCanvas(); + specialBubble.updatePosition(); + specialBubble.addToCanvas(); + harpoon.updatePosition(); + harpoon.addToCanvas(); + + levelProgressBar.addToCanvas(); + levelLabel.addToCanvas(); + scoreLabel.addToCanvas(); + livesIcon.addToCanvas(); + + player.addToCanvas(); + } + + /** + * Get the player object. + * @return the player + */ + public Player getPlayer(){ + return player; + } + +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java new file mode 100644 index 0000000..69e47d3 --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/GamePlayManager.java @@ -0,0 +1,31 @@ +package de.thdeg.greiner.superpangworld.managers; + +import de.thdeg.greiner.superpangworld.gameview.GameView; + +/** + * The manager which handles the gameplay. + */ +public class GamePlayManager { + + /** The GameView on which the game is displayed */ + private GameView gameView; + /** The manager, which handles the game objects */ + private GameObjectManager gameObjectManager; + + /** + * Create the manager handling the gameplay. + * @param gameView + * @param gameObjectManager + */ + public GamePlayManager(GameView gameView, GameObjectManager gameObjectManager) { + this.gameView = gameView; + this.gameObjectManager = gameObjectManager; + } + + /** + * Handle the gameplay. + */ + public void updateGamePlay(){ + + } +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/InputManager.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/InputManager.java new file mode 100644 index 0000000..1097271 --- /dev/null +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/game/managers/InputManager.java @@ -0,0 +1,58 @@ +package de.thdeg.greiner.superpangworld.managers; + +import de.thdeg.greiner.superpangworld.gameview.GameView; +import de.thdeg.greiner.superpangworld.graphics.moveable.Player; + +import java.awt.event.KeyEvent; +import java.util.Arrays; + +/** + * The manager which handles the user input and controls the player object. + */ +public class InputManager { + + /** The gameView, which displays the player object */ + private GameView gameView; + /** The player object */ + private Player player; + /** Flag, if diagonal movement is allowed */ + private static final boolean DIAGONAL_MOVEMENT_ALLOWED = false; + + /** + * Create a manager handling the user input + * @param gameView the GameView + * @param player the player object + */ + public InputManager(GameView gameView, Player player){ + this.gameView = gameView; + this.player = player; + } + + /** + * Read the user inputs and perform actions accordingly + */ + public void updateUserInputs() { + Integer[] gedruekteTasten = gameView.getKeyCodesOfCurrentlyPressedKeys(); + if(Arrays.stream(gedruekteTasten).anyMatch(k -> k == KeyEvent.VK_SPACE)){ + player.shoot(); + } + for (int keyCode : gedruekteTasten) { + switch(keyCode) { + case KeyEvent.VK_LEFT: + player.left(); + break; + case KeyEvent.VK_RIGHT: + player.right(); + break; + default: + continue; + } + if(!DIAGONAL_MOVEMENT_ALLOWED){ + return; + } + } + } + + + +} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesLabe.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesLabe.java deleted file mode 100644 index 541e834..0000000 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesLabe.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.thdeg.greiner.superpangworld.graphics; - -import de.thdeg.greiner.superpangworld.gameview.GameView; - -/** - * The label for the remaining lives count. - */ -public class LivesLabe extends GameObject{ - - /** - * Create a lives label with default values. - * - * @param gameView the gameView - */ - protected LivesLabe(GameView gameView) { - super(gameView); - } -} diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Bubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java similarity index 56% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Bubble.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java index 396fdab..11a2efd 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Bubble.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Bubble.java @@ -1,26 +1,11 @@ -package de.thdeg.greiner.superpangworld.graphics; +package de.thdeg.greiner.superpangworld.graphics.base; import de.thdeg.greiner.superpangworld.gameview.GameView; /** * A Bubble, which moves around on the screen and can be shot by the player. */ -public class Bubble extends GameObject{ - - /** The pixel art for the bubble */ - private final static String BUBBLE = - " RRRR \n"+ - " RWRRRR \n"+ - " RWRRRRRR \n"+ - " RWRRRRRRRR \n"+ - "RWRRRRRRRRRR\n"+ - "RWRRRRRRRRRR\n"+ - "RWRRRRRRRRWR\n"+ - "RRRRRRRRRWWR\n"+ - " RRRRRRRWWR \n"+ - " RRRRRWWR \n"+ - " RRRWWR \n"+ - " RRRR \n"; +public class Bubble extends GameObject { /** Flag, if the bubble flies from left to right */ private boolean flyFromLeftToRight; @@ -39,14 +24,6 @@ public class Bubble extends GameObject{ flyFromLeftToRight = true; } - /** - * Draws the bubble onto the canvas of the {@link GameView}. - */ - @Override - public void addToCanvas(){ - gameView.addBlockImageToCanvas(BUBBLE, getPosition().x, getPosition().y,size, rotation); - } - @Override public String toString() { return "Bubble:" + getPosition().toString(); @@ -57,7 +34,7 @@ public class Bubble extends GameObject{ */ @Override public void updatePosition(){ - if(flyFromLeftToRight && getPosition().x + width >= GameView.WIDTH){ + if(flyFromLeftToRight && getPosition().x + (width*size) >= GameView.WIDTH){ flyFromLeftToRight = false; }else if (!flyFromLeftToRight && getPosition().x <= 0){ flyFromLeftToRight = true; diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/GameObject.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/GameObject.java similarity index 73% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/GameObject.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/GameObject.java index fbff9be..9d471a9 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/GameObject.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/GameObject.java @@ -1,5 +1,6 @@ -package de.thdeg.greiner.superpangworld.graphics; +package de.thdeg.greiner.superpangworld.graphics.base; +import de.thdeg.greiner.superpangworld.managers.GamePlayManager; import de.thdeg.greiner.superpangworld.gameview.GameView; /** @@ -21,6 +22,9 @@ class GameObject { protected int width; /** The height of the game object. */ protected int height; + /** The responsible GamePlayManager */ + protected GamePlayManager gamePlayManager; + /** * Create a game object with default values. @@ -45,6 +49,14 @@ class GameObject { } + /** + * Set the responsible GamePlayManager. + * @param gamePlayManager the responsible GamePlayManager + */ + public void setGamePlayManager(GamePlayManager gamePlayManager){ + this.gamePlayManager = gamePlayManager; + } + /** * Get the position of the game object. * @return the position diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Position.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Position.java similarity index 97% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Position.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Position.java index d8c5d9b..7e631e1 100644 --- a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Position.java +++ b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/base/Position.java @@ -1,4 +1,4 @@ -package de.thdeg.greiner.superpangworld.graphics; +package de.thdeg.greiner.superpangworld.graphics.base; /** * Die Position eines Objekts auf einem Fenster anhand zweidimensionaler Koordinaten. diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Background.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/Background.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Background.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/Background.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LevelLabel.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LevelLabel.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LevelLabel.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LevelLabel.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LevelProgressBar.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LevelProgressBar.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LevelProgressBar.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LevelProgressBar.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesIcon.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LivesIcon.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/LivesIcon.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/LivesIcon.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/ScoreLabel.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/ScoreLabel.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/ScoreLabel.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/immovable/ScoreLabel.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Harpoon.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Harpoon.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Harpoon.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/HexagonalBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/HexagonalBubble.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/HexagonalBubble.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Player.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/Player.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/Player.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/RoundBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/RoundBubble.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/RoundBubble.java diff --git a/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/SpecialBubble.java b/SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java similarity index 100% rename from SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/SpecialBubble.java rename to SuperPangWorld/src/de/thdeg/greiner/superpangworld/graphics/moveable/SpecialBubble.java diff --git a/SuperPangWorld/src/resources/Herz.png b/SuperPangWorld/src/resources/Herz.png deleted file mode 100644 index dc041225a5b08d0748712b9f1ec0b72b640673cc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1835 zcmV+`2h{k9P)dDBi>#96)}M@9&MW&UR;E8pd{BZ^fz3@{P{lfM47nW>&C#91G%HHlEza z$WEZVj*5v?qO6VdVLJ8^iIX42bFDmrXOSDIaGjK6(F9hcm|sQZH1g$Cl~G1p4K0&00Ju$XsxgYz7s)#w`xUY=aH&gxvsxC)eKcqj7O?ZUp5jxVWPV*pA{iqJ3 zD!ILapM8|diy1owQv}0qY#-%GwBbKw50cJtAi*j$_SRT$im0vSq0!v%BWiA>th}Gn z_rz|jA-0Qnf_iK?N0mj@{P`19Uq(%hzB}GmIR-nhlVqBg5-df$dxJeGVoEIyU*&>d zGP-8K-R_-6+)X0M+8DPX(e05jH9S_uH4CVo*h9w#TUKE`nPVJ`@kPPFIYXqIAmhfc z^-eDOb%B*Y(E287uI0vBnlPiw?U}VSUC4r)sGeTnwnt$e6?2$TMKfx<-hZDWCh%xI zA6Z33f#oVQOT=wnX#CP%3?K+Pf>meb>o9c{0ve~z+#QUf zqH`ZzrbsU&o6RL0;#5qxq69iD%yg+w?**oJ0n;TCxgDf7eUJ#BY4#~5cot}A~@8_sF7$MVN5(`xd-oqFUAs2xRPdAV)sZ=H42>A}4q0_XE^VEjG$2p=nKu40boZVwI?xUiu zghGW)J6ePOZ{@5aQlt3WKSt2!@fx|Zz?+?>%dYbjzj>&Kz{mMW9?itk+;aL_*X?(6 zlKq=P7b|@Ji}oN;{QBu@@AE^n^1YuEJ)ggi99|~X%3WQrcX!A%wDGUM4?c1|?0J=Z zietJ3gg@Y!YUPf5NxmJLXyFmZ7TQyMxBI=GTy%TW{OV3(h0gLQHP4aC^9!u&ey>Mg zWjkwH*!!pRXgS?a_J6#Yw|Vm)mg%+<^M*O&MDaFT_0 z(Y~uF;)TOoc!6}1ML62qbLVp7Z%c7YJ&C=AlrALR#Xm{r`5LzM_3Sz08QCDaW#!Ez znhGUh2qdwVRDu=R&W%-H^eeEF<*zZmzMRC?A&Xdij^bew9W2T6cz@~)B*L{W!F4N% zJ~509t|<8pBokbR_5H0k&`{szBv<~FlfMnt#7yk{s;@OX@? z8)^6^@#GL*G*~itiR5v%$GF-M{3%0C2S~-ZzKLh+iH8{y$lz(x`&gF@EXMw(Hup#& z@*=V^mNm1XKBUhihv#W;WlM}@3a}?CRDwu0#?sxqSYKpiWbq8?13cf(dWhfhGaRaZdE<#>bBiX$)rTClzy9kPrJC%yE z;Bk)rzJPfbTgkpoG|B=)oEUqeSV?53V$A&mZ5s>V&p3crXiYO)aAc|A6f>LdXfjB0 zAJVS%ExZ``6Ry#RKVhg8JFRecif??2`0+thj^inkIes8G2vjtRo?qGN&$xFb@qtVj zS*#02!s;9k6idF-gmNk&OJh4rU_x@G6QBAEHAx|KUgAEG(MtzpO*R>o~U%Cfb* z(;r{PUh+FR(dldrWw#$@>Tz3wg+HPFa32q~;$<=k779)+hCmJVV+z9Ikt6heTENzp7O49L?gL_>`3zMu;nUM>hZMEv^>VxErOh-IQ~K^ z6C8mon!V5)r8=H)G|j5-5YIT{V2S5hp#(}OIkh}_Iq6wsYI(BM@|2P~!5o>_zq9v6 Z#MI_5bkvYK4~N6ya}K}rllV_uEiDv@3GpnVAT=#R z`a}K}D-G4L*J6H)1{B_S4~=pv<`Y$htbeh*d{Vfa%ao@0a_u8H7rddj8*28g#l^Mn z#06V8**O7pRlP-*8OIB&i95Wf_61 z1FK1%+bwqIC!z6!2qla!fKWo473}HK+RZBe3ZW=H!GXR0c*#Hpj5^@uGbfa-_u%K9 z4@GkFWkk$5qIZm)1RvP+>-$5{6tU zV<{*It-{9sDGTc05em+iAU$er5Tmw1PS*W|<3@7QK_Q36n`0Dg8mAy%M}PlkOlFh& zKz9@gd^8ZU8J1k2k0LgDmXgRG`p4!dG8#RXYD4dd(I^cZ*$Hwv_^4pWM(~rzyfPhP zTXeh!Unzeh&el1>TYz>0#A?A}C)8!9KFfwa^Rx%AJR~IYj!-6rp;CZsS;mfV1-aV? zS=UpEzS82s*83NQYr2oFo)MG@X=G&Q@xH^%OmiW-!hH!W9(Ln{DK+A$BNUnS1BU1` z7}_TA@z+S#%d17RCX*k%7E=3exPPOpqD5>>PU8E(6cOqXj;0@8?Khbl#J6!fafu1s bs&()ifz#FnnEtCq00000NkvXXu0mjfhY=%j diff --git a/SuperPangWorld/src/resources/hexagon.png b/SuperPangWorld/src/resources/hexagon.png new file mode 100644 index 0000000000000000000000000000000000000000..ed3a2f77584e720043851ba1c2c258058dfc41c1 GIT binary patch literal 1994 zcmV;*2Q~PKP)RCt{2-ED{!RT#kW|167`h=_!Uh=_!mm6ckVyBDpGa`$@o z-a9krW%l0Z_s!jV=L~y}&&)IPoO3`arIb=iDW#NBogxa^c$&}+ECRYho<~4~z=J zYRwp6oB7*0)kcTt1D=dxF1a|klL%l^m@R1M+b|yJb@iUW)g@ptu*%V~ zJJAYYiHieUzXYTSV}Ku#L7?n82|Q=Je9T1zScP`J3k!jFY#-EW1kf@s=d72H*^U6~ z(av{i3b4`Udje|_AWfJBoJK2sT(ep}W+eh>nU_~%k@o~v`p(uR;1%F?OUF{py$ZZ$ z<3NQk0b1r2%mw69P^f&&Mg-6@uQ29fp?s`R1V|GmBWa&j`h;;CNei#%JwWaVpk-dA zP`G@o$R%JN68=?KZzE3$bICOTObVi9Uga>r`m%f}PXt(vc77Sn1lDBzQlOS6cl-%Mrk& z8a-&|m)QhhOO~`S%Ozkw4hj;Kb#IcPAg84PVA8%FgkMxjHP=msw6N6(;H)T7Ik6at z1Wh%)2{dWnS>U09C#C$l3Ov#*Eo>zMtU)_}G@6c-=rzTn*pdsOYGA9*-5lor-TfL^ro+gW8+(U745kS08hrhT1Y1yyNb1Vayfensc?cZ!q1 zGf~W7B?7EOJHL|*rG=51+jkzRDN~)}8Zf&H_yFzvPBabpxC@=!(a9c&Ou@%L=+Z8o z<_0jk%gis|82W6KcblV_yOk{9Ad(uW&hQtoAIyWGC}t4&2-(Y4wZFBMSHsnhf{y}+ z!kmxt=v&~2%0Fsf2F*lP{Lt0D+S341BY3g$gJCa&%v+*ezRyZ|v!}ZAp?*EUR>;5R zj4G|0$P)g;+&2JB#fYYb?PqfobG!D3Bh>^R1Wvd;ALY>*U|+po)ExjOMOcfbh3#Mv zSXZwi7#hzDI0}5_b9sm5w_xsIgt4K*DAW`6m7_2jDbHbpUantiC%6+*rQjukr}<_R2RVoeBzFJvU2|Esak?WL{Plte?TK#a=g(9aTX`wC}QBF-)1gVv2sn{sy zDzGiwGA_ZQK+jEqt)Z zaa3-1kZt3x5jU%I&8`P;YQ{HSX()nO#=g?1)nI_7wi@@%p2Pr%NqL_X(E%a>= z*idxeV6eA)_+g~-Y?_=e%Ybyc}#asaP*gBpX z(LOBRb6JZ30BOP`WOor=Y{HG3NZNPP)&Z?W001-dWV6j6Yp;1_gOkxkCtzFNHrtY#LQIE|K%71akUXg0wk zFIN$uve?89SI6%lyIplYI2-`RPRLfHriO7|gXwetm=YzORg~Z6R%Z7U;W`39#yWL1 zqea21XfEE79#r*X!%%c?g1}FF-KiD#(pF%3>k?+%RRAEDW#NBN-3q3 cQYwr80bCP?wpftU<^TWy07*qoM6N<$f&=-P0ssI2 literal 0 HcmV?d00001