From 0fd4e65309896e1f28bac43d7e12d3e2c8b5ef10 Mon Sep 17 00:00:00 2001 From: Oscar Wiberg <oscarwiberg@Oscars-MacBook-Air-4.local> Date: Sun, 26 Jan 2025 12:16:12 +0100 Subject: [PATCH] fortsatt omstrukturering --- src/constants/Constants.java | 4 +- src/states/Bomb.java | 2 +- src/states/Enemy.java | 41 +++------------ src/states/FlyingEnemy.java | 13 +++-- src/states/Object.java | 95 +++++++++++++++++++++++++++++++++++ src/states/PlayState.java | 97 ++++++++++++++++++++---------------- src/states/PowerUp.java | 54 -------------------- 7 files changed, 168 insertions(+), 138 deletions(-) create mode 100644 src/states/Object.java delete mode 100644 src/states/PowerUp.java diff --git a/src/constants/Constants.java b/src/constants/Constants.java index f766208..1c9fddc 100644 --- a/src/constants/Constants.java +++ b/src/constants/Constants.java @@ -45,8 +45,8 @@ public interface Constants { double enemyHeight = 80; // powerups - String lifeImg = "src/Images1/heart2.png"; - String powerImg = "src/Images1/blixt.png"; + String lifeImg = "src/Images1/apple.png"; + String powerImg = "src/Images1/zap.png"; String bombImg = "src/Images1/bomb.png"; double bombWidth = 50; diff --git a/src/states/Bomb.java b/src/states/Bomb.java index 29ba82f..05a92ea 100644 --- a/src/states/Bomb.java +++ b/src/states/Bomb.java @@ -31,7 +31,7 @@ public class Bomb { } public Bounds getBoundingBox() { - return new Rectangle( startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent(); + return new Rectangle(startX, posY, Constants.bombWidth, Constants.bombHeight).getBoundsInParent(); } diff --git a/src/states/Enemy.java b/src/states/Enemy.java index 0d74bec..5a3795f 100644 --- a/src/states/Enemy.java +++ b/src/states/Enemy.java @@ -10,51 +10,24 @@ import javafx.scene.image.Image; import javafx.scene.image.ImageView; import javafx.scene.shape.Rectangle; -public class Enemy extends Antagonist{ +public class Enemy extends Object{ - public Enemy(String enemyImg, double x, double y) { - super(enemyImg, x, y); + public Enemy(String enemyImg, double x, double y, double h, double w) { + super(enemyImg, x, y, h, w); } - // if (collided && enemy.getEnemyX() < player.getPlayerX()) { - // collided = false; - // } - - @Override - public boolean playerAntagonistCollision(Player player) { -// boolean hit = false; - - boolean collisionX = player.getPlayerX() < (x + 60.00) && (player.getPlayerX() + 60.00) > x; - - // Check for collision on the y-axis - boolean collisionY = player.getPlayerY() < (y + 45.00) && (player.getPlayerY() + 60.00) > y; - - if (collisionY && collisionX && !collisionDetected) { - player.decreaseLives(); - - collisionDetected = true; - return true; - } - - if (!collisionX) { - collisionDetected = false; - } - - return false; - } + - public Bounds getBoundingBox() { - return new Rectangle(x, y, Constants.enemyWidth, Constants.enemyHeight).getBoundsInParent(); - } @Override - public double getY() { - return y; + public void use(Player player) { + // TODO Auto-generated method stub + } diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java index 72c21d4..2b1425e 100644 --- a/src/states/FlyingEnemy.java +++ b/src/states/FlyingEnemy.java @@ -6,7 +6,7 @@ import java.util.Random; import javafx.scene.image.Image; -public class FlyingEnemy extends Antagonist{ +public class FlyingEnemy extends Object{ private Random drop; @@ -16,8 +16,8 @@ public class FlyingEnemy extends Antagonist{ private boolean bombDropped = false; - public FlyingEnemy(String enemyImg, double x, double y) { - super(enemyImg, x, y); + public FlyingEnemy(String enemyImg, double x, double y, double h, double w) { + super(enemyImg, x, y, h, w); this.drop = new Random(); this.bombDropX = dropNextBombX(); @@ -53,12 +53,15 @@ public class FlyingEnemy extends Antagonist{ bombDropped = false; } + + @Override - public boolean playerAntagonistCollision(Player player) { + public void use(Player player) { // TODO Auto-generated method stub - return false; + } + diff --git a/src/states/Object.java b/src/states/Object.java new file mode 100644 index 0000000..a0a96a1 --- /dev/null +++ b/src/states/Object.java @@ -0,0 +1,95 @@ +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 abstract class Object { + + private double posX; + private double posY; + private double height; + private double width; + private Image img; + + public Object(String image, double x, double y, double h, double w) { + + posY = y; + posX = x; + width = w; + height = h; + + try { + img = new Image(new FileInputStream(image)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public double getX() { + return posX; + } + + public double getY() { + return posY; + } + + public Image getImage() { + return img; + } + + + public void setX(double posX) { + this.posX = posX; + } + + public void setY(double posY) { + this.posY = posY; + } + + public double getH() { + return height; + } + + public double getW() { + return width; + } + + public boolean playerObjectCollision(Player player) { + boolean hit = false; + + double playerX = player.getPlayerX(); + double playerY = player.getPlayerY(); + + // Define new smaller width and height + double smallerWidth = Constants.playerWidth - 50; // Example: reduced by 20 pixels + double smallerHeight = Constants.playerHeight - 50; // Example: reduced by 20 pixels + + // Calculate new X and Y to center the smaller rectangle around the player's position + double centeredX = playerX + (Constants.playerWidth - smallerWidth) / 2; + double centeredY = playerY + (Constants.playerHeight - smallerHeight) / 2; + + + Bounds playerRect = new Rectangle(centeredX, centeredY, smallerWidth, smallerHeight).getBoundsInParent(); + + + Bounds objectRect = new Rectangle(this.getX(), this.getY(), this.getW(), this.getH()).getBoundsInParent(); + + if (playerRect.intersects(objectRect)) { + hit = true; + } + + return hit; + } + + public abstract void use(Player player); + +// här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen + +} diff --git a/src/states/PlayState.java b/src/states/PlayState.java index 1f2e059..97e6886 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -62,6 +62,8 @@ public class PlayState extends GameState { private int movingSpeed = 10; private Bomb bomb; private boolean isFlyingEnemyActive = false; + private String currScore; + private double collisionX = -1.00; @@ -94,9 +96,9 @@ public class PlayState extends GameState { public void mode1() { player = new Player(Constants.playerImg); slidingPlayer = Constants.slidingPlayerImg; - enemy = new Enemy(Constants.enemyImg, 800.00, 270.00); - extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00); + enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); + // extraLife = new ExtraLifePowerUp(Constants.lifeImg); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); bgColor = Color.ROYALBLUE; @@ -107,9 +109,9 @@ public class PlayState extends GameState { public void mode2() { player = new Player(Constants.playerImg2); slidingPlayer = Constants.slidingPlayerImg2; - enemy = new Enemy(Constants.enemyImg, 800.00, 250.00); - extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00); + enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); + // extraLife = new ExtraLifePowerUp(Constants.lifeImg); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); bgColor = Color.BEIGE; @@ -123,6 +125,8 @@ public class PlayState extends GameState { */ @Override public void draw(GraphicsContext g) { + currScore = "Currently: " + Integer.toString(player.getPasses()); + drawBg(g, bgColor); g.setFill(fontColor); @@ -133,6 +137,7 @@ public class PlayState extends GameState { g.fillText(livesleft+player.getLives(), 0, 30); g.fillText(informationText, Constants.screenWidth - 300, 30); g.fillText(scoreText, 0, 60); + g.fillText(currScore, 0, 90); } else { g.fillText(gameOverText, Constants.screenWidth/2, 200); score.saveScore(player.getPasses()); @@ -150,12 +155,6 @@ 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); - drawEnemy(g); @@ -168,17 +167,22 @@ public class PlayState extends GameState { public void drawEnemy(GraphicsContext g) { engen = new Random(); + + + if (!isFlyingEnemyActive) { g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); if (enemy.getX() < 0 - Constants.enemyWidth) { - enemy.setAntagonistX(Constants.screenWidth); + enemy.setX(Constants.screenWidth); + collided = false; + collisionX = -1.00; player.updatePasses(1); - if (engen.nextInt(2) == 1) { // 50% chance + if (engen.nextInt(2) == 1 && player.getPasses() > 2) { // 50% chance after player hase passed isFlyingEnemyActive = true; - flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset position + flyingEnemy.setX(Constants.screenWidth); // Reset position } } @@ -188,8 +192,8 @@ public class PlayState extends GameState { if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { isFlyingEnemyActive = false; - // flyingEnemy.setAntagonistX(Constants.screenWidth); // Reset the enemy's position - // player.updatePasses(1); + player.updatePasses(1); + // Reset bomb drop flag to allow the next bomb drop flyingEnemy.resetBombDrop(); @@ -275,14 +279,11 @@ public class PlayState extends GameState { @Override public void update() { - //om enemy position är mindre än player och collide är true kollar den inte collision - // Enemy hoppar 10 snäpp till vänster för varje update - // enemy.setAntagonistX(enemy.getX()-10); - // enemy.setAntagonistX(enemy.getX()-movingSpeed); + if (isFlyingEnemyActive) { - flyingEnemy.setAntagonistX(flyingEnemy.getX() -movingSpeed); + flyingEnemy.setX(flyingEnemy.getX() -movingSpeed); Bomb droppedBomb = flyingEnemy.dropBomb(); @@ -290,7 +291,10 @@ public class PlayState extends GameState { bomb = droppedBomb; } } else { - enemy.setAntagonistX(enemy.getX() - movingSpeed); + enemy.setX(enemy.getX() - movingSpeed); + + + } if (bomb != null) { @@ -311,39 +315,46 @@ public class PlayState extends GameState { // Om if (!gameOver) { - if (!collided) { - // collided = enemy.playerAntagonistCollision(player); - collided = enemy.playerAntagonistCollision(player); + if (!collided && enemy.playerObjectCollision(player)) { + collided = true; - if (Integer.valueOf(player.getLives()) == 0) { - gameOver = true; - } - } + if (collisionX == -1.00) { + collisionX = enemy.getX(); + System.out.println("Player-Enemy Collision X Coordinate: " + collisionX); + } + + player.decreaseLives(); - //återställer boolean när enemy passerat - if (collided && enemy.getX() < player.getPlayerX()) { - collided = false; } + if (Integer.valueOf(player.getLives()) == 0) { + gameOver = true; + } +// if (collided && enemy.getX() < collisionX) { +// collided = false; +// } + } - if (up) { - player.jump(movingSpeed); - } - if (player.getPlayerY() == 265) { - up = false; - } - if (down) { - player.slide(slidingPlayer); + if (up) { - } + player.jump(movingSpeed); + } + + if (player.getPlayerY() == 265) { + up = false; + } + + if (down) { + + player.slide(slidingPlayer); } @@ -351,6 +362,8 @@ public class PlayState extends GameState { + + // 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 deleted file mode 100644 index 0b5901d..0000000 --- a/src/states/PowerUp.java +++ /dev/null @@ -1,54 +0,0 @@ -package states; - -import java.io.FileInputStream; -import java.io.FileNotFoundException; - -import constants.Constants; -import javafx.scene.image.Image; - -public abstract class PowerUp { - - private double powerUpX = (Constants.screenWidth - Constants.playerWidth) / 2; - private double powerUpY = 265.00; - private Image powerUpImage; - - PowerUp(String image) { - - try { - powerUpImage = new Image(new FileInputStream(image)); - - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - - public double getPowerUpX() { - return powerUpX; - } - - public void setPowerUpX(double powerUpX) { - this.powerUpX = powerUpX; - } - - public double getPowerUpY() { - return powerUpY; - } - - public Image getImage() { - return powerUpImage; - } - - public boolean powerUpPlayerCollision(Player player) { - boolean hit = false; - -// här ska det finnas kod för att kolla kollisioner mellan spelare och powerup - - return hit; - } - - public abstract void use(Player player); - -// här kommer de två olika powerupsen avgöra vad som händer när ma ta den, denna klass kallar på kollisionen - -} -- GitLab