diff --git a/src/constants/Constants.java b/src/constants/Constants.java index 1c9fddc31255ec041d307c30274273d082bd3461..e73a1847ef494d84f28d875f03ec0cc136260ee6 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 01641cf31eea0d1689eed087d03b4f39c3229a2f..539a46e2e0f25969e287cff010ec15de6eb540cb 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 7fead83ea1db9c3cb4b32f875a8d42cc4ec4e703..27b7955c1d7c452c69eab4fd19eb74e101518b11 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 f31fce23c175cec8cb9ed205d141749570927481..d5b24e289486a6f490db66fe932f73fd2288b2e5 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 e512fa41d2d3141939fc4474ebd8dcc4ee1b9564..11ad1bb5a42402e5ad02f08c3dc1a51489a5de4d 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 0000000000000000000000000000000000000000..7146300fb7148dc5f06eacd5dfc9a337660407df --- /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; + + } + + + } + + + + } + +}