diff --git a/src/HighScore.txt b/src/HighScore.txt index e440e5c842586965a7fb77deda2eca68612b1f53..25bf17fc5aaabd17402e77a2b16f95fbea7310d2 100644 --- a/src/HighScore.txt +++ b/src/HighScore.txt @@ -1 +1 @@ -3 \ No newline at end of file +18 \ No newline at end of file diff --git a/src/Images1/Voltage Emoji.png b/src/Images1/Voltage Emoji.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5098efd02fe4ba34a86c653176ce31589b9905 Binary files /dev/null and b/src/Images1/Voltage Emoji.png differ diff --git a/src/states/Antagonist.java b/src/states/Antagonist.java new file mode 100644 index 0000000000000000000000000000000000000000..a451535b9007ff5b5fa464977e2dfb5c43c7d7b1 --- /dev/null +++ b/src/states/Antagonist.java @@ -0,0 +1,47 @@ +package states; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; + +import javafx.scene.image.Image; + +public abstract class Antagonist { + + protected double x; + protected double y; + protected Image img; + protected boolean collisionDetected; + + + public Antagonist(String image, double x, double y) { + this.x = x; + this.y = y; + this.collisionDetected = false; + + try { + this.img = new Image(new FileInputStream(image)); + + } catch (FileNotFoundException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public abstract boolean playerAntagonistCollision(Player player); + + public void setAntagonistX(double pos) { + this.x = pos; + } + + public double getX() { + return x; + } + + public abstract double getY(); + + + public Image getImage() { + return img; + } + +} diff --git a/src/states/Enemy.java b/src/states/Enemy.java index 58d037073741ec61740acb99658d243cf10020f5..778e529a011c946fa27750f7d42f08ff81f42114 100644 --- a/src/states/Enemy.java +++ b/src/states/Enemy.java @@ -1,6 +1,7 @@ package states; import java.io.FileInputStream; + import java.io.FileNotFoundException; import constants.Constants; @@ -18,7 +19,7 @@ public class Enemy { try { image = new Image(new FileInputStream(enemyImg)); - + } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); @@ -32,15 +33,19 @@ public class Enemy { public boolean playerEnemyCollision(Player player) { boolean hit = false; - if ((enemyX <= (player.getPlayerX() + 80)) && (enemyX > player.getPlayerX())) { - if((player.getPlayerY() + 60) >= enemyY) { + if ((enemyX < (player.getPlayerX() + 80.00)) && ((enemyX) > player.getPlayerX())) { //borde vara +80 på enemyx men funkar ej +// if((player.getPlayerY() + 60.00) >= enemyY) { +// if((player.getPlayerY() + 60.00) >= enemyY) { + // if ((enemyY + 80 > (player.getPlayerY())) && ((player.getPlayerY() + 80) > enemyY)) { + hit = true; player.decreaseLives(); -// if (hit && enemyX < player.getPlayerX()) { +// if (hit && enemyX < player.getPlayerX() + 100) { // hit = false; // } + } - } + return hit; } diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java index 7bb36de09b6bdb04f02b5d326a47e48fa469a48f..d31642b64020448ff66e34c92403a67928543ee1 100644 --- a/src/states/FlyingEnemy.java +++ b/src/states/FlyingEnemy.java @@ -1,56 +1,121 @@ package states; import java.util.ArrayList; +import constants.Constants; import java.util.Random; import javafx.scene.image.Image; -public class FlyingEnemy extends Enemy{ - -// private double enemyX = -100.00; +public class FlyingEnemy extends Antagonist{ + +// private double enemyX = 800.00; private ArrayList<Double> enemyY; -// = {250, 200, 150,100}; -// private Image image; + private double currY; private Random rnd = new Random(); - - - public FlyingEnemy(String enemyImg) { - super(enemyImg); - enemyY = new ArrayList<Double>(); - enemyY.add(100.0); - enemyY.add(150.0); - enemyY.add(200.0); - enemyY.add(250.0); -// double[] enemyY = {250, 200, 150,100}; -// enemyY[0] = 100.0; -// enemyY[1] = 150.0; -// enemyY[2] = 200.0; -// enemyY[3] = 250.0; - + + + public FlyingEnemy(String enemyImg, double x, double y) { + super(enemyImg, x, y); + this.enemyY = new ArrayList<Double>(); + this.enemyY.add(150.0); + this.enemyY.add(180.0); + this.enemyY.add(200.0); + this.enemyY.add(250.0); + // enemyY.add(265.00); + // enemyY.add(265.00); + // enemyY.add(265.00); + // enemyY.add(265.00); + + + // double[] enemyY = {250, 200, 150,100}; + // enemyY[0] = 100.0; + // enemyY[1] = 150.0; + // enemyY[2] = 200.0; + // enemyY[3] = 250.0; + } - -// System.out.println(weather.get(rnd.nextInt(weather.size()))); + + // System.out.println(weather.get(rnd.nextInt(weather.size()))); + + + +// public boolean playerFlyingEnemyCollision(Player player) { +// boolean hit = false; +// +// if ((enemyX < (player.getPlayerX() + 80.00)) && ((enemyX) > player.getPlayerX())) { //borde vara +80 på enemyx men funkar ej +// // if((player.getPlayerY() + 60.00) >= enemyY) { +// if((player.getPlayerY() + 60.00) >= currY) { +// // if ((enemyY + 80 > (player.getPlayerY())) && ((player.getPlayerY() + 80) > enemyY)) { +// +// hit = true; +// player.decreaseLives(); +// // if (hit && enemyX < player.getPlayerX() + 100) { +// // hit = false; +// // } +// +// } +// +// } +// +// return hit; +// +// // public void setEnemyY() { +// // enemyY = 0.0; +// // +// } @Override - public double getEnemyY() { + public boolean playerAntagonistCollision(Player player) { +// boolean hit = false; - return enemyY.get(rnd.nextInt(enemyY.size())); - -// Gör en random generator här som returnerar Y koordinat slumpmässigt inom ett spann(om y koordinaten är 0). -// När enemy är ute ur frame sätter vi ykoordinaten till 0 så att den kan få en ny vid nästa passering. -// double enlen = enemyY.length; -// -// double temp = 0.0; -// -// temp = enemyY[(int) rnd.nextDouble(enlen)]; -// -// return temp; +// boolean collisionX = player.getPlayerX() < (x + Constants.enemyWidth) && (player.getPlayerX() + Constants.playerWidth) > x; +// +// // Check for collision on the y-axis +// boolean collisionY = player.getPlayerY() < (currY + Constants.enemyHeight) && (player.getPlayerY() + Constants.playerHeight) > currY; + boolean collisionX = player.getPlayerX() < (x + 60) && (player.getPlayerX() + 60) > x; + + // Check for collision on the y-axis + boolean collisionY = player.getPlayerY() < (currY + 60) && (player.getPlayerY() + 60) > currY; + + + if (collisionX && collisionY && !collisionDetected) { + player.decreaseLives(); + collisionDetected = true; + return true; + } + + if (!collisionX) { + collisionDetected = false; + } + +// if ((x < (player.getPlayerX() + 80.00)) && ((x) > player.getPlayerX())) { //borde vara +80 på enemyx men funkar ej +// // if((player.getPlayerY() + 60.00) >= enemyY) { +// if((player.getPlayerY() > currY +80)) { +// // if ((enemyY + 80 > (player.getPlayerY())) && ((player.getPlayerY() + 80) > enemyY)) { +// +// hit = false; +// player.decreaseLives(); +// // if (hit && enemyX < player.getPlayerX() + 100) { +// // hit = false; +// // } +// +// } +// +// } + + return false; + + // public void setEnemyY() { + // enemyY = 0.0; + // + } + + @Override + public double getY() { + + currY = enemyY.get(rnd.nextInt(enemyY.size())); + return currY; } - -// public void setEnemyY() { -// enemyY = 0.0; -// -// } } diff --git a/src/states/PlayState.java b/src/states/PlayState.java index dfb553f27eeaa390b8a0f79bcdb994e782aea2a1..653bfd0796b72bf6e7645b545e5c7932113ba354 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -11,6 +11,7 @@ import javafx.scene.text.Text; import java.io.FileInputStream; import java.io.FileNotFoundException; +import java.util.Random; import constants.Constants; @@ -53,6 +54,8 @@ public class PlayState extends GameState { private String scoreText; private ExtraLifePowerUp extraLife; private FlyingEnemy flyingEnemy; + private double tempy; + private Random engen; /* Class only used for testing */ @@ -73,7 +76,7 @@ public class PlayState extends GameState { player = new Player(Constants.playerImg); enemy = new Enemy(Constants.enemyImg); extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, 800.00, 0.00); // menu = new MenuState(model); @@ -96,6 +99,7 @@ public class PlayState extends GameState { g.fillText(scoreText, 0, 60); } else { g.fillText(gameOverText, Constants.screenWidth/2, 200); + score.saveScore(player.getPasses()); } // ritar ut marklinjen @@ -107,37 +111,72 @@ public class PlayState extends GameState { // om enemy är ute ur frame, ställer dem om positionen på den så att den börjar om - + // Ritar enemy och player - g.drawImage(extraLife.getImage(), extraLife.getPowerUpX(), extraLife.getPowerUpY(), 40, 40); +// g.drawImage(extraLife.getImage(), extraLife.getPowerUpX(), extraLife.getPowerUpY(), 40, 40); g.drawImage(player.getImage(), player.getPlayerX(), player.getPlayerY(), Constants.playerWidth, Constants.playerHeight); // g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight); drawEnemy(g); - -// TODO kanske göra en random här också, som väljer om vi ska rita de olika enemies eller powerupsen. Vid en viss score -// TODO kommer möjligheten att ta powerups eller möta flyingenemy - + + // TODO kanske göra en random här också, som väljer om vi ska rita de olika enemies eller powerupsen. Vid en viss score + // TODO kommer möjligheten att ta powerups eller möta flyingenemy + } - + public void drawEnemy(GraphicsContext g) { + engen = new Random(); -// enemy = new Enemy(Constants.enemyImg); - g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight); - if (enemy.getEnemyX() < 0 - Constants.enemyWidth) { - enemy.setEnemyX(Constants.screenWidth); - } - - g.drawImage(flyingEnemy.getImage(), Constants.screenWidth/2, Constants.screenHeight/2, Constants.enemyWidth, Constants.enemyHeight); - - - - - +// +// if (player.getPasses() > 5) { +// boolean b = engen.nextBoolean(); +// System.out.println(b); +// +// if (b) { + g.drawImage(flyingEnemy.getImage(), flyingEnemy.getX(), tempy, 80, 80); + if (flyingEnemy.getX() < 0 - Constants.enemyWidth) { + flyingEnemy.setAntagonistX(Constants.screenWidth); + tempy = flyingEnemy.getY(); + player.updatePasses(1); + + } +// } else if (!b){ +// g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight); +// if (enemy.getEnemyX() < 0 - Constants.enemyWidth) { +// enemy.setEnemyX(Constants.screenWidth); +// player.updatePasses(1); +// } + +// } +// } else { +// g.drawImage(enemy.getImage(), enemy.getEnemyX(), enemy.getEnemyY(), Constants.enemyWidth, Constants.enemyHeight); +// if (enemy.getEnemyX() < 0 - Constants.enemyWidth) { +// enemy.setEnemyX(Constants.screenWidth); +// player.updatePasses(1); +// } + +// } + // enemy = new Enemy(Constants.enemyImg); + + + + + //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 + + + + + + + + + + } @@ -184,19 +223,20 @@ public class PlayState extends GameState { clearedEnemies ++; // Enemy hoppar 10 snäpp till vänster för varje update - enemy.setEnemyX(enemy.getEnemyX()-10); - flyingEnemy.setEnemyX(flyingEnemy.getEnemyX() -10); +// enemy.setEnemyX(enemy.getEnemyX()-10); + flyingEnemy.setAntagonistX(flyingEnemy.getX() -10); // Om if (!gameOver) { - + if (!collided) { - collided = enemy.playerEnemyCollision(player); +// collided = enemy.playerEnemyCollision(player); + collided = flyingEnemy.playerAntagonistCollision(player); if (Integer.valueOf(player.getLives()) == 0) { gameOver = true; } } - if (collided && enemy.getEnemyX() < player.getPlayerX()) { + if (collided && flyingEnemy.getX() < player.getPlayerX()) { collided = false; } diff --git a/src/states/Player.java b/src/states/Player.java index 15d264e0d57b1f10fb50b7df4118bcf83e93b7b3..8378c54ae8a5796a4254ce32ac0bbf0e8cd545e0 100644 --- a/src/states/Player.java +++ b/src/states/Player.java @@ -24,9 +24,26 @@ public class Player { private boolean up = false; private Image slidingImage; private Image currImage = null; + private int passes = 0; // private ImageView playerView; + public int getPasses() { + return passes; + } + + + + + + public void updatePasses(int passes) { + this.passes += passes; + } + + + + + public Player(String playerImg) { try {