From a6771d510af83c440ddbd4e49755d8f0d80f9250 Mon Sep 17 00:00:00 2001 From: Oscar Wiberg <oscarwiberg@Oscars-MacBook-Air-4.local> Date: Sat, 25 Jan 2025 18:16:36 +0100 Subject: [PATCH] =?UTF-8?q?b=C3=A5da=20enemy=20samspelar=20nu?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/states/Antagonist.java | 4 +- src/states/Bomb.java | 8 +++- src/states/Enemy.java | 6 ++- src/states/FlyingEnemy.java | 35 +++++++-------- src/states/PlayState.java | 89 ++++++++++++++++++++++--------------- src/states/Player.java | 6 +++ 6 files changed, 88 insertions(+), 60 deletions(-) diff --git a/src/states/Antagonist.java b/src/states/Antagonist.java index f93d6a7..22bb85f 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 ff06394..29ba82f 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 2a196bf..0d74bec 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 b8b12a7..72c21d4 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 6c2049c..1f2e059 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 017d274..f31fce2 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() { -- GitLab