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 {