diff --git a/Project/End_flag.cc b/Project/End_flag.cc
new file mode 100644
index 0000000000000000000000000000000000000000..46b686f677e4029a74656763e92308e2c56f75ec
--- /dev/null
+++ b/Project/End_flag.cc
@@ -0,0 +1,23 @@
+#include "End_flag.h"
+
+End_flag::End_flag(float width, float height, float x_pos, float y_pos)
+:flag_pos{x_pos, y_pos}, flag_size{width, height}, flag{flag_size}, otype{"endflag"}
+{
+  flag.setFillColor(sf::Color::Yellow);
+}
+
+std::string End_flag::get_otype() const
+{
+  return otype;
+}
+
+sf::RectangleShape End_flag::get_shape() const
+{
+  return flag;
+}
+
+void End_flag::update(sf::RenderWindow & window)
+{
+  flag.setPosition(flag_pos);
+  window.draw(flag);
+}
diff --git a/Project/End_flag.h b/Project/End_flag.h
new file mode 100644
index 0000000000000000000000000000000000000000..adc4cd4f8e107d8285b0ed80ff9c68ca6313228d
--- /dev/null
+++ b/Project/End_flag.h
@@ -0,0 +1,23 @@
+#ifndef END_FLAG_H
+#define END_FLAG_H
+#include <SFML/Graphics.hpp>
+
+#include <string>
+
+class End_flag
+{
+public:
+  End_flag(float x_pos, float y_pos, float widht, float height);
+
+  std::string get_otype() const;
+  sf::RectangleShape get_shape() const;
+  void update(sf::RenderWindow & window);
+
+private:
+  sf::Vector2f flag_pos{};
+  sf::Vector2f flag_size{};
+  sf::RectangleShape flag{};
+  std::string otype{};
+};
+
+#endif
diff --git a/Project/End_flag.o b/Project/End_flag.o
new file mode 100644
index 0000000000000000000000000000000000000000..6bb0d34fa9c93db564ecf7f5cd8cb8c09b7c7322
Binary files /dev/null and b/Project/End_flag.o differ
diff --git a/Project/Makefile b/Project/Makefile
index a277acb27c9ed81ec405174dfd3d47090d652121..1944c6cffd2627828b3a4c72e3b4f3c6f774bf3c 100644
--- a/Project/Makefile
+++ b/Project/Makefile
@@ -1,5 +1,5 @@
-game: main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o
-	g++ -std=c++17 -Wall main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o -o game -lsfml-graphics -lsfml-window -lsfml-system
+game: main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o End_flag.o
+	g++ -std=c++17 -Wall main.o Player.o block.o indestructable_block.o destructable_block.o mystery_block.o Enemy.o power_up.o End_flag.o -o game -lsfml-graphics -lsfml-window -lsfml-system
 
 main.o: main.cc
 	g++ -c -std=c++17 -g -Wall main.cc -o main.o -lsfml-graphics -lsfml-window -lsfml-system
@@ -24,3 +24,6 @@ Enemy.o: Enemy.cc
 
 power_up.o: power_up.cc
 	g++ -c -std=c++17 -g -Wall power_up.cc -o power_up.o -lsfml-graphics -lsfml-window -lsfml-system
+
+End_flag.o: End_flag.cc
+	g++ -c -std=c++17 -g -Wall End_flag.cc -o End_flag.o -lsfml-graphics -lsfml-window -lsfml-system
diff --git a/Project/Player.cc b/Project/Player.cc
index 70da4302eaf448f9f6454140f6d0cc9f960f9344..dbfb2a5f324a3ef24b4c789b4ba5af42d230b9fe 100644
--- a/Project/Player.cc
+++ b/Project/Player.cc
@@ -11,10 +11,10 @@ sf::Vector2f Player::get_location()
   return player_pos;
 }
 
-void Player::update(sf::Clock & clock, sf::RenderWindow & window)
+void Player::update(sf::Clock & clock, sf::RenderWindow & window, sf::View & view)
 {
   sf::Time delta = clock.restart();
-  move(delta);
+  move(delta, view);
   player.setPosition(player_pos);
 }
 
@@ -44,7 +44,7 @@ bool Player::check_collision(Block* b, std::string const& type)
       }
       velocity_y = -velocity_y;
     }
-    else if(player_pos.y  <= b->get_pos().y-40) //landar på något
+    else if(player_pos.y  <= b->get_pos().y-40) //landar på någotd draw(sf::RenderW
     {
       velocity_y = velocity;
       jumping = false;
@@ -64,13 +64,13 @@ bool Player::check_collision(Block* b, std::string const& type)
 }
 
 //players movement from input
-void Player::move(sf::Time & _delta)
+void Player::move(sf::Time & _delta, sf::View & view)
 {
   distance = velocity * (_delta.asMicroseconds() / 1000000.0f);
   if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) || sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
     {
       player_pos.x -= distance;
-      if(player_pos.x < 0)
+      if(player_pos.x  - player_size.x/6 <= view.getCenter().x - 515.f)
       {
         player_pos.x += distance;
       }
@@ -78,9 +78,9 @@ void Player::move(sf::Time & _delta)
   if(sf::Keyboard::isKeyPressed(sf::Keyboard::D) || sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
     {
       player_pos.x += distance;
-      if(player_pos.x > 984)
+      if(player_pos.x >= view.getCenter().x)
       {
-        player_pos.x -= distance;
+        view.move(distance, 0);
       }
     }
   if((sf::Keyboard::isKeyPressed(sf::Keyboard::W) || sf::Keyboard::isKeyPressed(sf::Keyboard::Up)) && on_ground)
@@ -106,3 +106,8 @@ void Player::move(sf::Time & _delta)
     jumping = true;
   }
 }
+
+sf::RectangleShape Player::get_shape() const
+{
+  return player;
+}
diff --git a/Project/Player.h b/Project/Player.h
index ec87693ede2a92a511d7ad542dab8112b5954be0..ae53cf5f63119e0afe97e1f0cc26acd23d494811 100644
--- a/Project/Player.h
+++ b/Project/Player.h
@@ -10,12 +10,13 @@ class Player
 public:
   Player(float width, float height, float x_pos, float y_pos, float velocity);
 
-  void update(sf::Clock & clock, sf::RenderWindow & window);
+  void update(sf::Clock & clock, sf::RenderWindow & window, sf::View & view);
   bool check_collision(Block* b, std::string const& type);
   void draw(sf::RenderWindow & window);
+  sf::RectangleShape get_shape() const;
 private:
   sf::Vector2f find_direction();
-  void move(sf::Time & _delta);
+  void move(sf::Time & _delta, sf::View & view);
   sf::Vector2f get_location();
   sf::Vector2f player_size{};
   sf::Vector2f player_pos{};
diff --git a/Project/Player.o b/Project/Player.o
index 9fb905da5087cb2e5b53ab14692f944b26f4dd02..46add9b3963c4946287b6dcef557de76bbe87232 100644
Binary files a/Project/Player.o and b/Project/Player.o differ
diff --git a/Project/game b/Project/game
index 4463e4f4d369310f67da84740b3b95bc15cdcd5a..4ce65bdd42af0a2f7f7d9b4e7b0ea5a12e9809d7 100755
Binary files a/Project/game and b/Project/game differ
diff --git a/Project/main.cc b/Project/main.cc
index e1aa8e887af46137ee3cb908bc48aed31aa3198f..b415c4bd1718c03827ad96213c6c055d67ab85ce 100644
--- a/Project/main.cc
+++ b/Project/main.cc
@@ -5,6 +5,7 @@
 #include "mystery_block.h"
 #include "Enemy.h"
 #include "power_up.h"
+#include "End_flag.h"
 #include <vector>
 
 #include <iostream>
@@ -12,8 +13,12 @@
 int main()
 {
     sf::RenderWindow window{sf::VideoMode(1024,768), "Our game"}; //
+    sf::View view{};
+    view.setCenter(515.f, 384.f);
+    view.reset(sf::FloatRect(0, 0, 1024, 768));
     Player player{40,50,50,718, 350.0f}; //Width, height, x-pos, y-pos, movement_speed, jump_height
     Enemy enemy{40,50,800,718, 450.0f};
+    End_flag eflag{60, 60, 1200, 718};
 
     std::vector<Block*> blocks{};
     blocks.push_back(new Indestructable_block{50, 0, 718}); //size, x-pos, y-pos. Color: Red //BEGIN
@@ -35,10 +40,6 @@ int main()
     blocks.push_back(new Indestructable_block{50, 400, 718});
     blocks.push_back(new Indestructable_block{50, 450, 718});
 
-    //std::vector<Enemy*> enemies{};
-    //enemies.push_back(new Enemy{40,50,800,718, 450.0f}); //width, height, x-pos, y-pos, movement_speed
-    //enemies.push_back(new Enemy{40,50,700,718, 450.0f});
-
 
   sf::Clock clock;
 
@@ -55,8 +56,7 @@ int main()
         }
       }
         window.clear();
-        player.update(clock, window);
-        //enemy.update(clock, window);
+        player.update(clock, window, view);
 
       for(auto& block : blocks) //Checks collision between player and blocks
       {
@@ -69,52 +69,20 @@ int main()
           }
         }
       blocks.erase(remove_if(begin(blocks), end(blocks), [](Block* b){return b == nullptr;}), end(blocks));
-      player.draw(window);
-
-      /*for(auto it : blocks) //Checks collision between enemy and blocks
-      {
-        bool destruct{false};
-        destruct = enemy.check_collision(it, it->get_otype(), player);
-        if(destruct)
-        {
-          delete it;
-          it = nullptr;
-        }
-      }*/
-
-
-
       for(auto& block : blocks)
       {
         block->update(window);
       }
-      /*for(auto enemy : enemies)
-      {
-        for(auto block : blocks)
-        {
-          enemy->update(clock, window, *block);
-        }
-      }*/
-      window.display();
-    }
-    /*
-    std::cout << blocks.size() << std::endl;
-    for(auto it : blocks)
-    {
-      if(it == nullptr)
+
+      eflag.update(window);
+
+      if(player.get_shape().getGlobalBounds().intersects(eflag.get_shape().getGlobalBounds()))
       {
-        std::cout << "nullptr" << std::endl;
+        std::cout << "Finished level" << std::endl;
+        closed = true;
       }
+      player.draw(window);
+      window.setView(view);
+      window.display();
     }
-    blocks.erase(remove_if(begin(blocks), end(blocks), [](Block* b){return b == nullptr;}), end(blocks));
-    std::cout << blocks.size() << std::endl;
-    for(auto it : blocks)
-    {
-      delete it;
-    }
-    */
-    /*for(auto it : enemies)
-    {
-      delete it;
-    }*/
 }
diff --git a/Project/main.o b/Project/main.o
index 8273f6da7256b4f79d00403c595b4fd3e4e5f206..ab3471479bb5b5cfb9cd4924b897a4393be6a600 100644
Binary files a/Project/main.o and b/Project/main.o differ