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