diff --git a/src/HighScore.txt b/src/HighScore.txt index 25bf17fc5aaabd17402e77a2b16f95fbea7310d2..bf0d87ab1b2b0ec1a11a3973d2845b42413d9767 100644 --- a/src/HighScore.txt +++ b/src/HighScore.txt @@ -1 +1 @@ -18 \ No newline at end of file +4 \ No newline at end of file diff --git a/src/Images1/player2.png b/src/Images1/player2.png new file mode 100644 index 0000000000000000000000000000000000000000..688812eaba4982520fa0e5a86e573f9ac64f57f9 Binary files /dev/null and b/src/Images1/player2.png differ diff --git a/src/Images1/player2_sliding.png b/src/Images1/player2_sliding.png new file mode 100644 index 0000000000000000000000000000000000000000..f87ac1d9abc8b7348ea582dbc05a762f9d26c34c Binary files /dev/null and b/src/Images1/player2_sliding.png differ diff --git a/src/constants/Constants.java b/src/constants/Constants.java index a1007ecdf360b557619a8041c4d250afc7369189..4c8469a8a4e0c9a65bed5de0060bb1a685f0b2b8 100644 --- a/src/constants/Constants.java +++ b/src/constants/Constants.java @@ -27,6 +27,8 @@ public interface Constants { // Player String slidingPlayerImg = "src/Images1/player_sliding.png"; String playerImg = "src/Images1/player.png"; + String slidingPlayerImg2 = "src/Images1/player2_sliding.png"; + String playerImg2 = "src/Images1/player2.png"; double playerWidth = 100; double playerHeight = 100; diff --git a/src/states/Antagonist.java b/src/states/Antagonist.java index a451535b9007ff5b5fa464977e2dfb5c43c7d7b1..f93d6a72764dd90a54f25c8f54b6240957410b7d 100644 --- a/src/states/Antagonist.java +++ b/src/states/Antagonist.java @@ -27,6 +27,18 @@ public abstract class Antagonist { } } + public Antagonist(String image) { + 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) { diff --git a/src/states/Enemy.java b/src/states/Enemy.java index 778e529a011c946fa27750f7d42f08ff81f42114..b3b2a9fc85342fecb01449e8e41098884ab04022 100644 --- a/src/states/Enemy.java +++ b/src/states/Enemy.java @@ -8,70 +8,66 @@ import constants.Constants; import javafx.scene.image.Image; import javafx.scene.image.ImageView; -public class Enemy { +public class Enemy extends Antagonist{ private double enemyX = -100.00; private double enemyY = 250.00; private Image image; private ImageView enemyView; - public Enemy(String enemyImg) { + public Enemy(String enemyImg, double x, double y) { + super(enemyImg, x, y); - try { - image = new Image(new FileInputStream(enemyImg)); - - } catch (FileNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } } // if (collided && enemy.getEnemyX() < player.getPlayerX()) { // collided = false; // } - public boolean playerEnemyCollision(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) >= enemyY) { - // if ((enemyY + 80 > (player.getPlayerY())) && ((player.getPlayerY() + 80) > enemyY)) { + @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; + // 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() + 100) { + //// hit = false; + //// } + // + // } + // + // System.out.println("helooooooooo"); + // + // return hit; + } - hit = true; - player.decreaseLives(); -// if (hit && enemyX < player.getPlayerX() + 100) { -// hit = false; -// } - } - return hit; - } - - - - public void setEnemyX(double pos) { - - this.enemyX = pos; - - } - - public Image getImage() { - return image; - } - - public double getEnemyX() { - return enemyX; - } - - public ImageView getEnemyView() { - return enemyView; - } - - public double getEnemyY() { - return enemyY; + @Override + public double getY() { + return y; } diff --git a/src/states/FlyingEnemy.java b/src/states/FlyingEnemy.java index d31642b64020448ff66e34c92403a67928543ee1..66f5baf705f4b2749696c93af3b43c46c780d7c4 100644 --- a/src/states/FlyingEnemy.java +++ b/src/states/FlyingEnemy.java @@ -64,6 +64,15 @@ public class FlyingEnemy extends Antagonist{ // // // } + public FlyingEnemy(String enemyImg) { + super(enemyImg); + this.enemyY = new ArrayList<Double>(); +// this.enemyY.add(200.00); + this.enemyY.add(210.00); +// this.enemyY.add(220.00); + this.enemyY.add(250.00); + } + @Override public boolean playerAntagonistCollision(Player player) { // boolean hit = false; @@ -73,10 +82,10 @@ public class FlyingEnemy extends Antagonist{ // // 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; + boolean collisionX = player.getPlayerX() < (x + 60.00) && (player.getPlayerX() + 60.00) > x; // Check for collision on the y-axis - boolean collisionY = player.getPlayerY() < (currY + 60) && (player.getPlayerY() + 60) > currY; + boolean collisionY = player.getPlayerY() < (currY + 45.00) && (player.getPlayerY() + 60.00) > currY; if (collisionX && collisionY && !collisionDetected) { diff --git a/src/states/MenuState.java b/src/states/MenuState.java index 1c2fe4006256b864bb2c9d1740bf41d4ca27a92f..47b2e6e33c7a5d3e963020cb4e8470560b321e28 100644 --- a/src/states/MenuState.java +++ b/src/states/MenuState.java @@ -31,11 +31,11 @@ public class MenuState extends GameState { // A PlayState, so we can change to the PlayState from the menu. private PlayState playState; private Image dinosaur; + private boolean mode1; public MenuState(GameModel model) { super(model); - playState = new PlayState(model); - informationText = "Welcome to the Dino game!\nTo play, press ENTER for mode 1 or SPACE for mode 2\nEscape to exit game"; + informationText = "Welcome to the Dino game!\nTo play, press 1 for mode 1 or 2 for mode 2\nEscape to exit game"; bgColor = Color.GREY; fontColor = Color.LIGHTBLUE; @@ -70,11 +70,18 @@ public class MenuState extends GameState { public void keyPressed(KeyEvent key) { System.out.println("Trycker på " + key.getText() + " i MenuState"); - if (key.getCode() == KeyCode.ENTER) { + if (key.getCode() == KeyCode.DIGIT1) { + mode1 = true; + playState = new PlayState(model, mode1); + model.switchState(playState); + } else if (key.getCode() == KeyCode.DIGIT2) { + mode1 = false; + playState = new PlayState(model, mode1); model.switchState(playState); } else if (key.getCode() == KeyCode.ESCAPE) { System.exit(0); } + } @Override diff --git a/src/states/PlayState.java b/src/states/PlayState.java index 653bfd0796b72bf6e7645b545e5c7932113ba354..acc0f77cfcc71a961a619148cc79285ff131c88b 100644 --- a/src/states/PlayState.java +++ b/src/states/PlayState.java @@ -41,6 +41,7 @@ public class PlayState extends GameState { private String livesleft; private String gameOverText; private Color bgColor; + private Color lineColor; private Color fontColor; private Player player; private Enemy enemy; @@ -56,6 +57,7 @@ public class PlayState extends GameState { private FlyingEnemy flyingEnemy; private double tempy; private Random engen; + private String slidingPlayer; /* Class only used for testing */ @@ -63,22 +65,49 @@ public class PlayState extends GameState { // TODO nästa steg, lägg in en flygande enemy för att testa glid funktionen, ändra boundsen på den glidande bilden! // TODO kanske ta bort att skicka med image när man instansierar player - public PlayState(GameModel model) { + public PlayState(GameModel model, boolean mode) { super(model); informationText = "Press Escape \nTo Return To The Menu"; livesleft = "Lives left: "; gameOverText = "GAMEOVER\n" + informationText; - bgColor = Color.BEIGE; - fontColor = Color.BLUE; + fontColor = Color.BLACK; scoreText = "Highscore: " + Integer.toString(score.getHighScore()); // + Integer.toString(score.getHighScore()); + if (mode) { + mode1(); + } else { + mode2(); + } + + // menu = new MenuState(model); + + } + + public void mode1() { player = new Player(Constants.playerImg); - enemy = new Enemy(Constants.enemyImg); + slidingPlayer = Constants.slidingPlayerImg; + enemy = new Enemy(Constants.enemyImg, 800.00, 250.00); extraLife = new ExtraLifePowerUp(Constants.lifeImg); - flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg, 800.00, 0.00); + flyingEnemy = new FlyingEnemy(Constants.flyingEnemyImg); + flyingEnemy.setAntagonistX(800.00); + tempy = flyingEnemy.getY(); + bgColor = Color.ROYALBLUE; + lineColor = Color.WHITE; + + } + + 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); + flyingEnemy.setAntagonistX(800.00); + tempy = flyingEnemy.getY(); + bgColor = Color.BEIGE; + lineColor = Color.BLACK; - // menu = new MenuState(model); } @@ -104,19 +133,18 @@ public class PlayState extends GameState { // ritar ut marklinjen - g.setStroke(Color.BLACK); + g.setStroke(lineColor); g.setLineWidth(1); g.setLineDashes(2); g.strokeLine(Constants.screenWidth, 350, 0, 350); - // om enemy är ute ur frame, ställer dem om positionen på den så att den börjar om - + // om enemy är ute ur frame, ställer dem om positionen på den så att1 // 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); + // 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 @@ -127,49 +155,28 @@ public class PlayState extends GameState { public void drawEnemy(GraphicsContext g) { engen = new Random(); - -// -// 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); -// } + g.drawImage(enemy.getImage(), enemy.getX(), enemy.getY(), Constants.enemyWidth, Constants.enemyHeight); + if (enemy.getX() < 0 - Constants.enemyWidth) { + enemy.setAntagonistX(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 + + //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 + + - @@ -177,7 +184,6 @@ public class PlayState extends GameState { - } @Override @@ -220,41 +226,28 @@ public class PlayState extends GameState { public void update() { //om enemy position är mindre än player och collide är true kollar den inte collision - clearedEnemies ++; - // Enemy hoppar 10 snäpp till vänster för varje update -// enemy.setEnemyX(enemy.getEnemyX()-10); - flyingEnemy.setAntagonistX(flyingEnemy.getX() -10); + enemy.setAntagonistX(enemy.getX()-10); + // flyingEnemy.setAntagonistX(flyingEnemy.getX() -10); // Om if (!gameOver) { if (!collided) { -// collided = enemy.playerEnemyCollision(player); - collided = flyingEnemy.playerAntagonistCollision(player); + collided = enemy.playerAntagonistCollision(player); + + if (Integer.valueOf(player.getLives()) == 0) { gameOver = true; - } + } } - if (collided && flyingEnemy.getX() < player.getPlayerX()) { + if (collided && enemy.getX() < player.getPlayerX()) { collided = false; } - //// Så länge enemy och player har överlappande X koordinat(och inte redan har kolliderat), kollar vi om dem kolliderar på Y axeln - // if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX())) { - // // if (!collided && enemy.getEnemyX() > player.getPlayerX()) { - // if (!collided) { - // checkCollision(); - // } - // // clearedEnemies ++; - // } - // - // if (collided && enemy.getEnemyX() < player.getPlayerX()) { - // collided = false; - // } - + if (up) { @@ -267,53 +260,14 @@ public class PlayState extends GameState { if (down) { - player.slide(); + player.slide(slidingPlayer); } } } - public void checkCollision() { - - // Om vi kolliderar på Y axeln - - // if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX()) && ((player.getPlayerY() + 60) >= enemy.getEnemyY() )) { - // - // collided = true; - // System.out.println("helo"); - // // Sätta någon variabel till något värde. Om denna variabel eller boolean inte är tom nästa update så har en krock skett. - // - // } - // - // player.decreaseLives(collided); - - // if ((enemy.getEnemyX() <= (player.getPlayerX() + 80)) && (enemy.getEnemyX() > player.getPlayerX())) { - // // System.out.println("helo"); - if((player.getPlayerY() + 60) >= enemy.getEnemyY() ) { - collided = true; - // System.out.println("fäk"); - if (Integer.valueOf(player.getLives()) == 1) { - // menu = new MenuState(model); - // model.switchState(menu); - gameOver = true; - score.saveScore(clearedEnemies); - - } - player.decreaseLives(); - // System.out.println(player.getLives()); - - } - // System.out.println("slipped by enemy"); - // } - // } - - - // clearedEnemies ++; - - - } diff --git a/src/states/Player.java b/src/states/Player.java index 8378c54ae8a5796a4254ce32ac0bbf0e8cd545e0..9b9b706612cad69b19c8d573e7fd2448b655b4fd 100644 --- a/src/states/Player.java +++ b/src/states/Player.java @@ -28,6 +28,14 @@ public class Player { // private ImageView playerView; +// public double getPlayerHeight() { +// return playerHeight; +// } + + + + + public int getPasses() { return passes; } @@ -48,7 +56,7 @@ public class Player { try { image = new Image(new FileInputStream(playerImg)); - slidingImage = new Image(new FileInputStream(Constants.slidingPlayerImg)); + //slidingImage = new Image(new FileInputStream(Constants.slidingPlayerImg)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block @@ -123,9 +131,19 @@ public class Player { } - public void slide() { + 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; + }