From f8b776846b1d0734726ebda190cff892027d2bda Mon Sep 17 00:00:00 2001 From: Oscar Wiberg <oscarwiberg@Oscars-MacBook-Air-4.local> Date: Sun, 26 Jan 2025 15:07:50 +0100 Subject: [PATCH] =?UTF-8?q?Allting=20fungerar,=20nu=20=C3=A4r=20det=20clea?= =?UTF-8?q?n=20up=20samt=20fixa=20game=20logiken.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/constants/Constants.java | 2 + src/states/ExtraLifePowerUp.java | 14 +++-- src/states/PlayState.java | 40 ++++++++++----- src/states/Player.java | 88 ++++++++++++++------------------ src/states/PowerUp.java | 9 ++-- src/states/SpeedPowerUp.java | 55 ++++++++++++++++++++ 6 files changed, 135 insertions(+), 73 deletions(-) create mode 100644 src/states/SpeedPowerUp.java diff --git a/src/constants/Constants.java b/src/constants/Constants.java index 1c9fddc..e73a184 100644 --- a/src/constants/Constants.java +++ b/src/constants/Constants.java @@ -47,6 +47,8 @@ public interface Constants { // powerups String lifeImg = "src/Images1/apple.png"; String powerImg = "src/Images1/zap.png"; + double powerWidth = 40; + double powerHeight = 40; String bombImg = "src/Images1/bomb.png"; double bombWidth = 50; diff --git a/src/states/ExtraLifePowerUp.java b/src/states/ExtraLifePowerUp.java index 01641cf..539a46e 100644 --- a/src/states/ExtraLifePowerUp.java +++ b/src/states/ExtraLifePowerUp.java @@ -2,15 +2,19 @@ package states; public class ExtraLifePowerUp extends PowerUp { - ExtraLifePowerUp(String image) { - super(image); + public ExtraLifePowerUp(String image, double x, double y, double h, double w) { + super(image, x, y, h, w); // TODO Auto-generated constructor stub } @Override - public void use(Player player) { - // TODO Auto-generated method stub + public void use(Player player, PlayState playState) { + player.resetLives(); + + } + + } -} + diff --git a/src/states/PlayState.java b/src/states/PlayState.java index 7fead83..27b7955 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -64,6 +64,7 @@ public class PlayState extends GameState { private boolean isFlyingEnemyActive = false; private String currScore; private double collisionX = -1.00; + private SpeedPowerUp speedUp; @@ -97,7 +98,8 @@ public class PlayState extends GameState { player = new Player(Constants.playerImg); slidingPlayer = Constants.slidingPlayerImg; enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); - // extraLife = new ExtraLifePowerUp(Constants.lifeImg); + 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); flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); @@ -110,7 +112,7 @@ public class PlayState extends GameState { player = new Player(Constants.playerImg2); slidingPlayer = Constants.slidingPlayerImg2; enemy = new Enemy(Constants.enemyImg, -100.00, 270.00, Constants.enemyHeight, Constants.enemyWidth); - // extraLife = new ExtraLifePowerUp(Constants.lifeImg); + extraLife = new ExtraLifePowerUp(Constants.lifeImg, 800.00, 270, Constants.powerHeight, Constants.powerWidth); flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, -200.00, 20.00, Constants.enemyHeight, Constants.enemyWidth); // flyingEnemy.setAntagonistX(800.00); // tempy = flyingEnemy.getY(); @@ -158,10 +160,18 @@ public class PlayState extends GameState { drawEnemy(g); + + drawPowerUps(g); + } + + 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 drawEnemy(GraphicsContext g) { @@ -216,8 +226,14 @@ public class PlayState extends GameState { //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 int getSpeed() { + return movingSpeed; + } + + + public void setSpeed(int s) { + movingSpeed = s; + } @@ -280,6 +296,11 @@ public class PlayState extends GameState { @Override public void update() { + speedUp.setX(speedUp.getX() - movingSpeed); + speedUp.handle(player, this); + +// extraLife.setX(extraLife.getX() - movingSpeed); +// extraLife.checkCollision(player); if (isFlyingEnemyActive) { @@ -332,11 +353,6 @@ public class PlayState extends GameState { gameOver = true; } - - -// if (collided && enemy.getX() < collisionX) { -// collided = false; -// } } @@ -352,11 +368,7 @@ public class PlayState extends GameState { up = false; } - if (down) { - - player.slide(slidingPlayer); - - } + } diff --git a/src/states/Player.java b/src/states/Player.java index f31fce2..d5b24e2 100644 --- a/src/states/Player.java +++ b/src/states/Player.java @@ -14,8 +14,8 @@ import javafx.scene.input.KeyEvent; import javafx.scene.shape.Rectangle; public class Player { - -// TODO se över funktioner, kanske lättare att slå samman vissa + + // TODO se över funktioner, kanske lättare att slå samman vissa private double playerX = (Constants.screenWidth - Constants.playerWidth) / 2; private double playerY = 265.00; @@ -24,40 +24,20 @@ public class Player { private Image image; private boolean down = false; private boolean up = false; - private Image slidingImage; + private Image currImage = null; private int passes = 0; - private Rectangle bounds; - private double topPos = playerY; - - - - - - public int getPasses() { - return passes; - } - - - - - - public void updatePasses(int passes) { - this.passes += passes; - } - - + private boolean livesLocked = false; public Player(String playerImg) { - bounds = new Rectangle(playerX, topPos, Constants.playerWidth, Constants.playerHeight); try { image = new Image(new FileInputStream(playerImg)); //slidingImage = new Image(new FileInputStream(Constants.slidingPlayerImg)); - + } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -66,18 +46,22 @@ public class Player { currImage = image; } - - - public Bounds getBoundingBox() { - return new Rectangle(playerX, playerY, Constants.playerWidth, Constants.playerHeight).getBoundsInParent(); + + + + + + public int getPasses() { + return passes; } - public double getRect() { - return topPos; + public void updatePasses(int passes) { + this.passes += passes; } + public Image getImage() { return currImage; } @@ -90,9 +74,14 @@ public class Player { public void decreaseLives() { + if (!livesLocked) { + this.lives--; + } - this.lives--; + } + public void resetLives() { + this.lives = 3; } @@ -116,7 +105,6 @@ public class Player { if (!down) { playerY -= movingSpeed; - topPos -= movingSpeed; if (playerY <= 110) { @@ -129,7 +117,6 @@ public class Player { if (down) { playerY += movingSpeed; - topPos += movingSpeed; if (playerY == 265) { down = false; @@ -140,22 +127,12 @@ public class Player { } - public void slide(String img) { - try { - slidingImage = new Image(new FileInputStream(img)); - //slidingImage = new Image(new FileInputStream(Constants.slidingPlayerImg)); - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + + + - currImage = slidingImage; - topPos = 305.00; - - - } public void setPlayerX(double playerX) { @@ -170,8 +147,8 @@ public class Player { public void standUp() { currImage = image; - topPos = playerY; - + + } @@ -180,7 +157,7 @@ public class Player { public void moveLeft(int movingSpeed) { playerX -= movingSpeed; - + } @@ -188,7 +165,16 @@ public class Player { public void moveRight(int movingSpeed) { playerX += movingSpeed; - + + } + + + + + + public void lockLives(boolean b) { + livesLocked = b; + } diff --git a/src/states/PowerUp.java b/src/states/PowerUp.java index e512fa4..11ad1bb 100644 --- a/src/states/PowerUp.java +++ b/src/states/PowerUp.java @@ -13,14 +13,17 @@ public abstract class PowerUp extends Object{ // TODO Auto-generated constructor stub } + protected int getScoreSinceActive() { + return scoreSinceActive; + } - public void checkCollision(Player player) { + public void checkCollision(Player player, PlayState playState) { if (this.playerObjectCollision(player)) { - use(player); + use(player, playState); scoreSinceActive = player.getPasses(); } } - public abstract void use(Player player); + public abstract void use(Player player, PlayState playState); } diff --git a/src/states/SpeedPowerUp.java b/src/states/SpeedPowerUp.java new file mode 100644 index 0000000..7146300 --- /dev/null +++ b/src/states/SpeedPowerUp.java @@ -0,0 +1,55 @@ +package states; + +public class SpeedPowerUp extends PowerUp { + + private boolean active = false; + private int speed; + private int start; + + public SpeedPowerUp(String image, double x, double y, double h, double w) { + super(image, x, y, h, w); + // TODO Auto-generated constructor stub + } + + @Override + public void use(Player player, PlayState playState) { + + player.lockLives(true); + + playState.setSpeed(100); + + active = true; + + + // TODO Auto-generated method stub + + } + + public void handle(Player player, PlayState playState) { + if (!active) { + + start = player.getPasses(); + speed = playState.getSpeed(); + + this.checkCollision(player, playState); + + + + } else { + + + if ((player.getPasses() - start) >= 10) { + playState.setSpeed(speed); + player.lockLives(false); + active = false; + + } + + + } + + + + } + +} -- GitLab