diff --git a/src/states/Antagonist.java b/src/states/Antagonist.java index f93d6a72764dd90a54f25c8f54b6240957410b7d..22bb85fcce88080a5aa19a3f85646f21363250ab 100644 --- a/src/states/Antagonist.java +++ b/src/states/Antagonist.java @@ -49,7 +49,9 @@ public abstract class Antagonist { return x; } - public abstract double getY(); + public double getY() { + return y; + } public Image getImage() { diff --git a/src/states/Bomb.java b/src/states/Bomb.java index ff06394923f555e60fe0f0027aecdc1920296ac8..29ba82fc98c7fde2ec1fa2cd7baadb5636d90b4d 100644 --- a/src/states/Bomb.java +++ b/src/states/Bomb.java @@ -3,7 +3,10 @@ package states; import java.io.FileInputStream; import java.io.FileNotFoundException; +import constants.Constants; +import javafx.geometry.Bounds; import javafx.scene.image.Image; +import javafx.scene.shape.Rectangle; public class Bomb { @@ -27,7 +30,10 @@ public class Bomb { } - + public Bounds getBoundingBox() { + return new Rectangle( startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent(); + } + public double getX() { diff --git a/src/states/Enemy.java b/src/states/Enemy.java index 2a196bfe6582085601a7d31ca92281f02bf44cf0..0d74bec9dc3ebbf9b67c5eb0e060e377b6ebd319 100644 --- a/src/states/Enemy.java +++ b/src/states/Enemy.java @@ -5,8 +5,10 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import constants.Constants; +import javafx.geometry.Bounds; import javafx.scene.image.Image; import javafx.scene.image.ImageView; +import javafx.scene.shape.Rectangle; public class Enemy extends Antagonist{ @@ -45,7 +47,9 @@ public class Enemy extends Antagonist{ } - + public Bounds getBoundingBox() { + return new Rectangle(x, y, Constants.enemyWidth, Constants.enemyHeight).getBoundsInParent(); + } @Override diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java index b8b12a7728ad28398da5cdb0e1d3c5c1a1fd9420..72c21d43465bfcccbf516668f4f0a1beebba7745 100644 --- a/src/states/FlyingEnemy.java +++ b/src/states/FlyingEnemy.java @@ -35,23 +35,23 @@ public class FlyingEnemy extends Antagonist{ public Bomb dropBomb() { - + if (!bombDropped && this.getX() >= bombDropX - 50 && this.getX() <= bombDropX + 50) { - Bomb bomb = new Bomb(bombDropX, Constants.bombImg); // 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 - bombDropX = dropNextBombX(); - return bomb; - } - - return null; + Bomb bomb = new Bomb(bombDropX, Constants.bombImg); // 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 + bombDropX = dropNextBombX(); + return bomb; + } + + return null; + } + + public void resetBombDrop() { + bombDropped = false; } - - public void resetBombDrop() { - bombDropped = false; - } @Override public boolean playerAntagonistCollision(Player player) { @@ -60,11 +60,6 @@ public class FlyingEnemy extends Antagonist{ } - @Override - public double getY() { - // TODO Auto-generated method stub - return 0; - } diff --git a/src/states/PlayState.java b/src/states/PlayState.java index 6c2049c1faf49f5d11b93d5f6a0f45bbf576277d..1f2e05962da4f69682254bb646c7d72acdfe979b 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -61,6 +61,7 @@ public class PlayState extends GameState { private String slidingPlayer; private int movingSpeed = 10; private Bomb bomb; + private boolean isFlyingEnemyActive = false; @@ -95,7 +96,7 @@ public class PlayState extends GameState { slidingPlayer = Constants.slidingPlayerImg; enemy = new Enemy(Constants.enemyImg, 800.00, 270.00); extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 100.00); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); bgColor = Color.ROYALBLUE; @@ -108,7 +109,7 @@ public class PlayState extends GameState { slidingPlayer = Constants.slidingPlayerImg2; enemy = new Enemy(Constants.enemyImg, 800.00, 250.00); extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 100.00); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); bgColor = Color.BEIGE; @@ -150,10 +151,10 @@ public class PlayState extends GameState { // Detta block används för att rita ut rectanglarna runt spelare och enemy - g.setStroke(Color.BLACK); // Set the rectangle's border color - g.setLineWidth(2); // Set the border width - // g.strokeRect(flyingEnemy.getX(), tempy, Constants.enemyWidth, Constants.enemyHeight); - g.strokeRect(player.getPlayerX(), player.getRect(), Constants.playerWidth, Constants.playerHeight); + // g.setStroke(Color.BLACK); // Set the rectangle's border color + // g.setLineWidth(2); // Set the border width + // // g.strokeRect(flyingEnemy.getX(), tempy, Constants.enemyWidth, Constants.enemyHeight); + // g.strokeRect(player.getPlayerX(), player.getRect(), Constants.playerWidth, Constants.playerHeight); @@ -167,39 +168,44 @@ public class PlayState extends GameState { public void drawEnemy(GraphicsContext g) { engen = new Random(); - // - // g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); - // if (enemy.getX() < 0 - Constants.enemyWidth) { - // enemy.setAntagonistX(Constants.screenWidth); - // player.updatePasses(1); - // - // if (player.getPasses() % 5 == 0) { - // movingSpeed += 4; - // } - // } + if (!isFlyingEnemyActive) { + g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); + if (enemy.getX() < 0 - Constants.enemyWidth) { + enemy.setAntagonistX(Constants.screenWidth); + player.updatePasses(1); - g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight); + if (engen.nextInt(2) == 1) { // 50% chance + isFlyingEnemyActive = true; + flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset position + } + } + + } else { - if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { - flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset the enemy's position - player.updatePasses(1); + g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), flyingEnemy.getY(), Constants.enemyWidth, Constants.enemyHeight); - // Reset bomb drop flag to allow the next bomb drop - flyingEnemy.resetBombDrop(); + if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { + isFlyingEnemyActive = false; + // flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset the enemy's position + // player.updatePasses(1); - if (player.getPasses() % 5 == 0) { - movingSpeed += 2; - } - } + // Reset bomb drop flag to allow the next bomb drop + flyingEnemy.resetBombDrop(); - // Render the bomb if it exists - if (bomb != null) { - g.drawImage(bomb.getImage(), bomb.getX(), bomb.getY(), Constants.bombWidth, Constants.bombHeight); - } + // 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); + } + } + @@ -274,19 +280,28 @@ public class PlayState extends GameState { // Enemy hoppar 10 snäpp till vänster för varje update // enemy.setAntagonistX(enemy.getX()-10); // enemy.setAntagonistX(enemy.getX()-movingSpeed); - flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed); - - Bomb droppedBomb = flyingEnemy.dropBomb(); + if (isFlyingEnemyActive) { + + flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed); + + Bomb droppedBomb = flyingEnemy.dropBomb(); - if (droppedBomb != null) { - bomb = droppedBomb; + if (droppedBomb != null) { + bomb = droppedBomb; + } + } else { + enemy.setAntagonistX(enemy.getX() - movingSpeed); } if (bomb != null) { bomb.render(movingSpeed); - // If the bomb goes off-screen, remove it - if (bomb.getY() > Constants.screenHeight) { + if (bomb.getBoundingBox().intersects(player.getBoundingBox())) { + System.out.println("Bomb hit the player!"); + player.decreaseLives(); // Assume there's a method to decrement player lives + bomb = null; // Destroy the bomb after collision + + } else if (bomb.getY() > Constants.screenHeight) { bomb = null; // Destroy the bomb if it goes off-screen System.out.println("Bomb went off-screen and was destroyed"); } diff --git a/src/states/Player.java b/src/states/Player.java index 017d27487f1179be85d9f8e807549f579dd81849..f31fce23c175cec8cb9ed205d141749570927481 100644 --- a/src/states/Player.java +++ b/src/states/Player.java @@ -6,6 +6,7 @@ import java.io.FileInputStream; import java.io.FileNotFoundException; import constants.Constants; +import javafx.geometry.Bounds; import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.input.KeyCode; @@ -65,6 +66,11 @@ public class Player { currImage = image; } + + + public Bounds getBoundingBox() { + return new Rectangle(playerX, playerY, Constants.playerWidth, Constants.playerHeight).getBoundsInParent(); + } public double getRect() {