Added sounds and backgrounds
@ -152,4 +152,13 @@ class GameObjectManager {
|
||||
public GameOverlay getGameOverlay(){
|
||||
return gameOverlay;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the background object.
|
||||
*
|
||||
* @return the background object
|
||||
*/
|
||||
public Background getBackground() {
|
||||
return background;
|
||||
}
|
||||
}
|
||||
|
@ -41,6 +41,9 @@ public class GamePlayManager {
|
||||
/** Flag, if the bubble movement is froze */
|
||||
public boolean movementFroze;
|
||||
|
||||
private int backgroundMusic;
|
||||
private int harpoonSound;
|
||||
|
||||
/**
|
||||
* Create the manager handling the gameplay.
|
||||
*
|
||||
@ -63,6 +66,7 @@ public class GamePlayManager {
|
||||
* @param easyDifficulty the game difficulty
|
||||
*/
|
||||
private void initializeGame(boolean easyDifficulty){
|
||||
//backgroundMusic = gameView.playSound("backgroundMusic.wav", true);
|
||||
gameObjectManager.clearAll();
|
||||
levelManager = new LevelManager(easyDifficulty);
|
||||
try {
|
||||
@ -86,6 +90,8 @@ public class GamePlayManager {
|
||||
movementFroze = false;
|
||||
// Update HUD
|
||||
updateHUD();
|
||||
// Update background
|
||||
gameObjectManager.getBackground().setBackgroundImage(level.backgroundImage);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -108,6 +114,7 @@ public class GamePlayManager {
|
||||
level = levelManager.getNextLevel();
|
||||
initializeLevel();
|
||||
} catch (LevelManager.NoMoreLevelsAvailableException e) {
|
||||
gameView.stopAllSounds();
|
||||
gameView.showEndScreen("You won!");
|
||||
boolean easyDifficulty = gameView.showSimpleStartScreen("Super Pang World","Start the game");
|
||||
initializeGame(easyDifficulty);
|
||||
@ -171,6 +178,7 @@ public class GamePlayManager {
|
||||
*/
|
||||
public void freezeMovement(int freezeTime){
|
||||
movementFroze = true;
|
||||
gameView.playSound("freeze.wav",false);
|
||||
gameView.setTimer("MovementFroze","GamePlayManager",freezeTime);
|
||||
}
|
||||
|
||||
@ -180,6 +188,7 @@ public class GamePlayManager {
|
||||
* @param harpoon the harpoon to remove
|
||||
*/
|
||||
public void destroy(Harpoon harpoon){
|
||||
harpoon.stopSound();
|
||||
gameObjectManager.getHarpoons().remove(harpoon);
|
||||
}
|
||||
|
||||
|
@ -2,7 +2,10 @@ package de.thdeg.greiner.superpangworld.game.managers;
|
||||
|
||||
import de.thdeg.greiner.superpangworld.graphics.helper.Level;
|
||||
|
||||
import java.sql.Array;
|
||||
import java.util.ArrayDeque;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Queue;
|
||||
|
||||
/**
|
||||
@ -10,9 +13,13 @@ import java.util.Queue;
|
||||
*/
|
||||
public class LevelManager {
|
||||
|
||||
private static final int BACKGROUND_IMAGE_COUNT = 9;
|
||||
|
||||
/** The queue to store the generated levels */
|
||||
private final Queue<Level> levels;
|
||||
|
||||
private List<String> backgroundImages;
|
||||
|
||||
/**
|
||||
* Create a level manager.
|
||||
*
|
||||
@ -20,6 +27,7 @@ public class LevelManager {
|
||||
*/
|
||||
public LevelManager(boolean easyDifficulty){
|
||||
levels = new ArrayDeque<>();
|
||||
backgroundImages = loadBackgroundImages();
|
||||
generateLevels(easyDifficulty);
|
||||
}
|
||||
|
||||
@ -44,12 +52,27 @@ public class LevelManager {
|
||||
*/
|
||||
private void generateLevels(boolean easyDifficulty){
|
||||
int overallScoreNeeded = 0;
|
||||
for(int i=0;i<3;i++){
|
||||
int imageIndex = 0;
|
||||
for(int i=0;i<99;i++){
|
||||
int scoreNeeded = easyDifficulty ? 1000 + (100*i) : 10000 + (1000*i);
|
||||
overallScoreNeeded += scoreNeeded;
|
||||
levels.add(new Level(i+1, scoreNeeded,overallScoreNeeded));
|
||||
levels.add(new Level(i+1, scoreNeeded,overallScoreNeeded,backgroundImages.get(imageIndex)));
|
||||
if((i+1)%4==0){
|
||||
imageIndex++;
|
||||
if(imageIndex==BACKGROUND_IMAGE_COUNT){
|
||||
imageIndex = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private List<String> loadBackgroundImages(){
|
||||
List<String> images = new ArrayList<>();
|
||||
for(int i=1;i<=BACKGROUND_IMAGE_COUNT;i++){
|
||||
images.add("backgrounds/background_"+i+".png");
|
||||
}
|
||||
return images;
|
||||
}
|
||||
|
||||
/**
|
||||
* The exception in case no next level is remaining.
|
||||
|
@ -111,20 +111,27 @@ public abstract class Bubble extends CollidingGameObject implements MovingGameOb
|
||||
if((newLocation.getX() >= GameView.WIDTH - width - HelperValues.FRAME_BORDER_WIDTH) || newLocation.getX() <= HelperValues.FRAME_BORDER_WIDTH){
|
||||
velocity = new Point2D.Double(velocity.getX() * -1.0, velocity.getY());
|
||||
if(this instanceof SpecialBubble){
|
||||
SpecialBubble specialBubble = (SpecialBubble) this;
|
||||
specialBubble.freezeState = !specialBubble.freezeState;
|
||||
switchSpecialBubbleState((SpecialBubble) this);
|
||||
}
|
||||
}
|
||||
// Floor bounce
|
||||
if(newLocation.getY() >= HelperValues.FRAME_WINDOW_HEIGHT + HelperValues.FRAME_BORDER_WIDTH - width){
|
||||
velocity = new Point2D.Double(velocity.getX(), velocity.getY() * -0.95);
|
||||
newLocation = new Point2D.Double(newLocation.getX(), HelperValues.FRAME_WINDOW_HEIGHT + HelperValues.FRAME_BORDER_WIDTH - width);
|
||||
if(this instanceof SpecialBubble){
|
||||
switchSpecialBubbleState((SpecialBubble) this);
|
||||
}
|
||||
}
|
||||
|
||||
position.setTo(newLocation.getX(), newLocation.getY());
|
||||
}
|
||||
}
|
||||
|
||||
private void switchSpecialBubbleState(SpecialBubble specialBubble){
|
||||
specialBubble.freezeState = !specialBubble.freezeState;
|
||||
gameView.playSound("specialBounce.wav",false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the score to add when bursting the bubble.
|
||||
*
|
||||
|
@ -12,6 +12,8 @@ public class Level {
|
||||
/** The overall needed score to surpass this level */
|
||||
public int neededOverallScore;
|
||||
|
||||
public String backgroundImage;
|
||||
|
||||
/**
|
||||
* Create a level with a number, a needed score to surpass the level and a needed overall score to surpass the level.
|
||||
*
|
||||
@ -19,9 +21,10 @@ public class Level {
|
||||
* @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){
|
||||
public Level(int number, int neededLevelScore, int neededOverallScore, String backgroundImage){
|
||||
this.number = number;
|
||||
this.neededLevelScore = neededLevelScore;
|
||||
this.neededOverallScore = neededOverallScore;
|
||||
this.backgroundImage = backgroundImage;
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,8 @@ import de.thdeg.greiner.superpangworld.graphics.base.GameObject;
|
||||
*/
|
||||
public class Background extends GameObject {
|
||||
|
||||
private String backgroundImage;
|
||||
|
||||
/**
|
||||
* Create a background object.
|
||||
*
|
||||
@ -18,11 +20,24 @@ public class Background extends GameObject {
|
||||
this.position.setTo(0,0);
|
||||
size = 1;
|
||||
rotation = 0;
|
||||
backgroundImage = "backgrounds/background_1.png";
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addToCanvas() {
|
||||
gameView.addImageToCanvas("background.png",position.x,position.y,size,rotation);
|
||||
gameView.addImageToCanvas(backgroundImage,position.x,position.y,size,rotation);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the background image. If it differs from the previous one a sound is played.
|
||||
*
|
||||
* @param backgroundImage the background image
|
||||
*/
|
||||
public void setBackgroundImage(String backgroundImage){
|
||||
if(!this.backgroundImage.equals(backgroundImage)){
|
||||
this.backgroundImage = backgroundImage;
|
||||
gameView.playSound("levelSwitch.wav",false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -19,6 +19,8 @@ public class Harpoon extends CollidingGameObject implements MovingGameObject {
|
||||
"k kkk k\n"+
|
||||
"k kkk k\n";
|
||||
|
||||
private int sound;
|
||||
|
||||
/**
|
||||
* Create a harpoon with default values.
|
||||
*
|
||||
@ -35,6 +37,7 @@ public class Harpoon extends CollidingGameObject implements MovingGameObject {
|
||||
getPosition().setTo(300,300);
|
||||
this.hitBox.width = width;
|
||||
this.hitBox.height = (int) (440 - position.y);
|
||||
sound = gameView.playSound("harpoon.wav",true);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -76,4 +79,8 @@ public class Harpoon extends CollidingGameObject implements MovingGameObject {
|
||||
@Override
|
||||
public void updateStatus() {
|
||||
}
|
||||
|
||||
public void stopSound(){
|
||||
gameView.stopSound(sound);
|
||||
}
|
||||
}
|
||||
|
@ -68,6 +68,7 @@ public class HexagonalBubble extends Bubble {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
gameView.playSound("burst.wav",false);
|
||||
if (size > 0.125) {
|
||||
Position positionLeft = new Position(position.x - (width/2.0/2.0), position.y);
|
||||
Position positionRight = new Position(position.x + width - (width/2.0/2.0), position.y);
|
||||
|
@ -87,6 +87,7 @@ public class RoundBubble extends Bubble {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
gameView.playSound("burst.wav",false);
|
||||
if (size > 1.25) {
|
||||
Position positionLeft = new Position(position.x - (width/2.0/2.0), position.y);
|
||||
Position positionRight = new Position(position.x + width - (width/2.0/2.0), position.y);
|
||||
|
BIN
SuperPangWorld/src/resources/backgroundMusic.wav
Normal file
BIN
SuperPangWorld/src/resources/backgrounds/background_1.png
Normal file
After Width: | Height: | Size: 70 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_2.png
Normal file
After Width: | Height: | Size: 79 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_3.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_4.png
Normal file
After Width: | Height: | Size: 97 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_5.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_6.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_7.png
Normal file
After Width: | Height: | Size: 80 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_8.png
Normal file
After Width: | Height: | Size: 75 KiB |
BIN
SuperPangWorld/src/resources/backgrounds/background_9.png
Normal file
After Width: | Height: | Size: 82 KiB |
BIN
SuperPangWorld/src/resources/burst.wav
Normal file
BIN
SuperPangWorld/src/resources/freeze.wav
Normal file
BIN
SuperPangWorld/src/resources/harpoon.wav
Normal file
BIN
SuperPangWorld/src/resources/levelSwitch.wav
Normal file
BIN
SuperPangWorld/src/resources/specialBounce.wav
Normal file
BIN
out/production/SuperPangWorld/resources/backgroundMusic.wav
Normal file
After Width: | Height: | Size: 70 KiB |
After Width: | Height: | Size: 79 KiB |
After Width: | Height: | Size: 78 KiB |
After Width: | Height: | Size: 97 KiB |
After Width: | Height: | Size: 82 KiB |
After Width: | Height: | Size: 85 KiB |
After Width: | Height: | Size: 80 KiB |
After Width: | Height: | Size: 75 KiB |
After Width: | Height: | Size: 82 KiB |