diff --git a/src/states/ExtraLifePowerUp.java b/src/states/ExtraLifePowerUp.java index 539a46e2e0f25969e287cff010ec15de6eb540cb..8493c735aed93ba8395911fc509bdca87d2bff66 100644 --- a/src/states/ExtraLifePowerUp.java +++ b/src/states/ExtraLifePowerUp.java @@ -11,6 +11,7 @@ public class ExtraLifePowerUp extends PowerUp { public void use(Player player, PlayState playState) { player.resetLives(); + } diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java index 23eeb73a8851a534a87d0461e3b4eb2b66ff4105..fff9752d4708eabdc306d2d43f4b31cb5e97e83c 100644 --- a/src/states/FlyingEnemy.java +++ b/src/states/FlyingEnemy.java @@ -15,7 +15,6 @@ public class FlyingEnemy extends Object{ private double bombDropX; private boolean bombDropped = false; - public FlyingEnemy(String enemyImg, double x, double y, double h, double w) { super(enemyImg, x, y, h, w); @@ -39,6 +38,7 @@ public class FlyingEnemy extends Object{ if (!bombDropped && this.getX() >= bombDropX - 50 && this.getX() <= bombDropX + 50) { Bomb bomb = new Bomb(Constants.bombImg, bombDropX, 50, Constants.bombHeight, Constants.bombWidth); // Drop the bomb at bombDropX System.out.println("Bomb dropped at: " + bombDropX); + bombDropped = true; // Mark that the bomb has been dropped // Optionally, reset bombDropX to a new random location after dropping the bomb diff --git a/src/states/PlayState.java b/src/states/PlayState.java index a8c487989c0235df057ee29af8500890902c24e0..7d171db2502192399ecf30ee545fa835ad92eeff 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -13,6 +13,7 @@ import javafx.scene.text.Text; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Random; +import java.util.concurrent.ThreadLocalRandom; import constants.Constants; @@ -54,13 +55,15 @@ public class PlayState extends GameState { private ExtraLifePowerUp extraLife; private FlyingEnemy flyingEnemy; // private double tempy; - private Random engen; + private Random engen = new Random(); private int movingSpeed = 10; private Bomb bomb; private boolean isFlyingEnemyActive = false; private String currScore; private double collisionX = -1.00; private SpeedPowerUp speedUp; + private boolean isPowerUpActive; + private int num; @@ -76,8 +79,6 @@ public class PlayState extends GameState { gameOverText = "GAMEOVER\n" + informationText; fontColor = Color.BLACK; scoreText = "Highscore: " + Integer.toString(score.getHighScore()); - // + Integer.toString(score.getHighScore()); - if (mode) { mode1(); @@ -85,19 +86,14 @@ public class PlayState extends GameState { mode2(); } - - // menu = new MenuState(model); - } public void mode1() { player = new Player(Constants.playerImg); enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); - extraLife = new ExtraLifePowerUp(Constants.lifeImg, 800.00, 170, Constants.powerHeight, Constants.powerWidth); - speedUp = new SpeedPowerUp(Constants.powerImg, 800.00, 265.00, Constants.powerHeight, Constants.powerWidth); + extraLife = new ExtraLifePowerUp(Constants.lifeImg, 900.00, 170, Constants.powerHeight, Constants.powerWidth); + speedUp = new SpeedPowerUp(Constants.powerImg, 900.00, 265.00, Constants.powerHeight, Constants.powerWidth); flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); - // flyingEnemy.setAntagonistX(800.00); - // tempy = flyingEnemy.getY(); bgColor = Color.ROYALBLUE; lineColor = Color.WHITE; @@ -106,10 +102,9 @@ public class PlayState extends GameState { public void mode2() { player = new Player(Constants.playerImg2); enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); - extraLife = new ExtraLifePowerUp(Constants.lifeImg, 800.00, 270, Constants.powerHeight, Constants.powerWidth); + extraLife = new ExtraLifePowerUp(Constants.lifeImg, -100.00, 270, Constants.powerHeight, Constants.powerWidth); + speedUp = new SpeedPowerUp(Constants.powerImg, -100.00, 265.00, Constants.powerHeight, Constants.powerWidth); flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); - // flyingEnemy.setAntagonistX(800.00); - // tempy = flyingEnemy.getY(); bgColor = Color.BEIGE; lineColor = Color.BLACK; @@ -121,9 +116,20 @@ public class PlayState extends GameState { */ @Override public void draw(GraphicsContext g) { + drawBackground(g); + drawGameStats(g); + drawPlayer(g); + drawEnemies(g); + drawPowerUps(g); + } + + private void drawPlayer(GraphicsContext g) { + g.drawImage(player.getImage(), player.getPlayerX(), player.getPlayerY(), Constants.playerWidth, Constants.playerHeight); + } + + private void drawGameStats(GraphicsContext g) { currScore = "Currently: " + Integer.toString(player.getPasses()); - drawBg(g, bgColor); g.setFill(fontColor); g.setFont(new Font(30)); // Big letters @@ -139,99 +145,125 @@ public class PlayState extends GameState { score.saveScore(player.getPasses()); } + } - + private void drawBackground(GraphicsContext g) { + drawBg(g, bgColor); g.setStroke(lineColor); g.setLineWidth(1); g.setLineDashes(2); g.strokeLine(Constants.screenWidth, 350, 0, 350); + } - g.drawImage(player.getImage(), player.getPlayerX(), player.getPlayerY(), Constants.playerWidth, Constants.playerHeight); - - + private void drawPowerUps(GraphicsContext g) { + if (isPowerUpActive) { + if (num == 0) { - drawEnemy(g); + if(speedUp.getX() < 0 - Constants.playerWidth) { + speedUp.setX(Constants.screenWidth); + isPowerUpActive = false; + } - drawPowerUps(g); + g.drawImage(speedUp.getImage(), speedUp.getX(), speedUp.getY(), Constants.powerWidth, Constants.powerHeight); + } else if (num == 1){ + if(extraLife.getX() < 0 - Constants.playerWidth) { + extraLife.setX(Constants.screenWidth); + isPowerUpActive = false; + } + g.drawImage(extraLife.getImage(), extraLife.getX(), extraLife.getY(), Constants.powerWidth, Constants.powerHeight); + } + } } - private void drawPowerUps(GraphicsContext g) { - g.drawImage(speedUp.getImage(), speedUp.getX(), speedUp.getY(), Constants.powerWidth, Constants.powerHeight); - g.drawImage(extraLife.getImage(), extraLife.getX(), extraLife.getY(), Constants.powerWidth, Constants.powerHeight); + public void drawEnemies(GraphicsContext g) { + if (!isFlyingEnemyActive) { + drawGroundEnemy(g); + } else { + drawFlyingEnemy(g); + } + + // Render the bomb if it exists + if (bomb != null) { + g.drawImage(bomb.getImage(), bomb.getX(), bomb.getY(), Constants.bombWidth, Constants.bombHeight); + } } - public void drawEnemy(GraphicsContext g) { - engen = new Random(); + private void drawFlyingEnemy(GraphicsContext g) { + g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight); - if (!isFlyingEnemyActive) { + if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { + isFlyingEnemyActive = false; + player.updatePasses(1); - g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); - if (enemy.getX() < 0 - Constants.enemyWidth) { - enemy.setX(Constants.screenWidth); - collided = false; - collisionX = -1.00; - player.updatePasses(1); + // Reset bomb drop flag to allow the next bomb drop + flyingEnemy.resetBombDrop(); - if (engen.nextInt(2) == 1 && player.getPasses() > 2) { // 50% chance after player hase passed - isFlyingEnemyActive = true; - flyingEnemy.setX(Constants.screenWidth); // Reset position - } - } + speedCheck(); - } else { - g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight); + } + } - if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { - isFlyingEnemyActive = false; - player.updatePasses(1); + private void drawGroundEnemy(GraphicsContext g) { - // Reset bomb drop flag to allow the next bomb drop - flyingEnemy.resetBombDrop(); + g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); - // if (player.getPasses() % 5 == 0) { - // movingSpeed += 2; - // } - } - } - - // Render the bomb if it exists - if (bomb != null) { - g.drawImage(bomb.getImage(), bomb.getX(), bomb.getY(), Constants.bombWidth, Constants.bombHeight); - } - } + if (enemy.getX() < 0 - Constants.enemyWidth) { + enemy.setX(Constants.screenWidth); + collided = false; + collisionX = -1.00; + player.updatePasses(1); + speedCheck(); + if (getRandom() == 1 && player.getPasses() > 2) { // 50% chance after player hase passed + isFlyingEnemyActive = true; + flyingEnemy.setX(Constants.screenWidth); // Reset position + } + } + } //TODO om score är större än visst antal --> lotta mellan flying och vanlig, vi kan göra en random med 2 int, ochberoende på vad den blir kan vi rita en //TODO göra en variabel för y positionen som hämtas om vi ritar flygande, för att den ska behålla samma position på hela y axeln + public void speedCheck() { + if (player.getPasses() % 5 == 0) { + movingSpeed += 1; + System.out.println("speed set to: " + Integer.toString(movingSpeed)); + } else if (player.getPasses() % 2 == 0) { + + isPowerUpActive = true; + // num = 0; + num = getRandom(); + } + } + public int getSpeed() { return movingSpeed; } - public void setSpeed(int s) { movingSpeed = s; } - - + public int getRandom() { + return ThreadLocalRandom.current().nextInt(2); + } @@ -267,38 +299,75 @@ public class PlayState extends GameState { default: break; - } + } + @Override + public void update() { + if (!gameOver) { + moveEnemies(); + movePowerUps(); + checkGroundCollision(); + checkBombCollision(); + movePlayer(); + } } - @Override - public void update() { - speedUp.setX(speedUp.getX() - movingSpeed); -// speedUp.handle(player, this); + private void movePowerUps() { + if (isPowerUpActive) { - extraLife.setX(extraLife.getX() - movingSpeed); -// extraLife.checkCollision(player, this); + if (num == 0) { - if (isFlyingEnemyActive) { + speedUp.setX(speedUp.getX() - movingSpeed); + speedUp.handle(player, this); - flyingEnemy.setX(flyingEnemy.getX() -movingSpeed); + } else if (num == 1) { - Bomb droppedBomb = flyingEnemy.dropBomb(); + extraLife.setX(extraLife.getX() - movingSpeed); + extraLife.checkCollision(player, this); - if (droppedBomb != null) { - bomb = droppedBomb; } - } else { - enemy.setX(enemy.getX() - movingSpeed); + } + + } + private void movePlayer() { + if (up) { + player.jump(movingSpeed); } + if (player.getPlayerY() == 265) { + up = false; + } + } + + + private void checkGroundCollision() { + if (!collided && enemy.playerObjectCollision(player)) { + + collided = true; + + if (collisionX == -1.00) { + collisionX = enemy.getX(); + System.out.println("Player-Enemy Collision X Coordinate: " + collisionX); + } + + player.decreaseLives(); + + } + + if (Integer.valueOf(player.getLives()) == 0) { + gameOver = true; + } + } + + + private void checkBombCollision() { if (bomb != null) { bomb.setY(bomb.getY() + movingSpeed); @@ -312,51 +381,24 @@ public class PlayState extends GameState { System.out.println("Bomb went off-screen and was destroyed"); } } + } - // Om - if (!gameOver) { - - if (!collided && enemy.playerObjectCollision(player)) { - - collided = true; + private void moveEnemies() { + if (isFlyingEnemyActive) { - if (collisionX == -1.00) { - collisionX = enemy.getX(); - System.out.println("Player-Enemy Collision X Coordinate: " + collisionX); - } + flyingEnemy.setX(flyingEnemy.getX() -movingSpeed); - player.decreaseLives(); + Bomb droppedBomb = flyingEnemy.dropBomb(); + if (droppedBomb != null) { + bomb = droppedBomb; } - - if (Integer.valueOf(player.getLives()) == 0) { - gameOver = true; - } - - } - - - - - - if (up) { - - player.jump(movingSpeed); - } - - if (player.getPlayerY() == 265) { - up = false; + } else { + enemy.setX(enemy.getX() - movingSpeed); } - - - } - - - - // Here one would probably instead move the player and any // enemies / moving obstacles currently active. diff --git a/src/states/PowerUp.java b/src/states/PowerUp.java index 04d4f7590621f65971eaef516363f8bf0bc734c8..bc9271a75c30b0b4f2256297473bc0a16f654d89 100644 --- a/src/states/PowerUp.java +++ b/src/states/PowerUp.java @@ -29,6 +29,7 @@ public abstract class PowerUp extends Object{ if (this.playerObjectCollision(player)) { use(player, playState); scoreSinceActive = player.getPasses(); + } } diff --git a/src/states/SpeedPowerUp.java b/src/states/SpeedPowerUp.java index 7146300fb7148dc5f06eacd5dfc9a337660407df..64d6176f3c397863b67f342e833f930a7be58957 100644 --- a/src/states/SpeedPowerUp.java +++ b/src/states/SpeedPowerUp.java @@ -41,6 +41,7 @@ public class SpeedPowerUp extends PowerUp { if ((player.getPasses() - start) >= 10) { playState.setSpeed(speed); player.lockLives(false); + player.setPlayerY(265); active = false; }