diff --git a/Uppgift-3-Spel/ghost.cc b/Uppgift-3-Spel/ghost.cc
new file mode 100644
index 0000000000000000000000000000000000000000..74437b490b61051b77008dcdc5fcaa67c2a6b06c
--- /dev/null
+++ b/Uppgift-3-Spel/ghost.cc
@@ -0,0 +1,165 @@
+#include "ghost.h"
+
+//ghost
+
+Ghost::Ghost(std::string const &color, Point const &start_pos):
+color_index(color), pos(start_pos)
+{}
+
+void Ghost::set_pos( Point &new_pos)
+{
+new_pos.x = pos.x;
+new_pos.y = pos.y;
+}
+
+
+
+
+Point Ghost::get_pos()
+{
+return Point{pos.x, pos.y};
+}
+
+
+
+//clyde 
+Clyde::Clyde(std::string const &color, Point const &start_pos):
+Ghost("orange", start_pos)
+{}
+
+
+Point Clyde::get_scatter(const Point &pos_pacman)
+{
+return Point{0,0};
+}
+
+
+Point Clyde::get_pos()
+{
+return Point{pos.x, pos.y};
+}
+ 
+void Clyde::set_pos( Point &new_pos)
+{
+Ghost::set_pos(new_pos);
+}
+
+
+
+string Clyde::get_color() const
+{
+return "orange";
+}
+Point Clyde::get_chase(const Point &pos_pacman, const Point &dir_pacman)
+{
+    int proximity = abs(pos.x - pos_pacman.x)  + abs(pos.y - pos_pacman.y);
+
+    if (proximity >= 2)
+    {
+        return pos_pacman;
+    }
+    else 
+    {
+      return Point{0,0};  
+    }
+
+
+}
+
+//pinky 
+
+Pinky::Pinky(std::string const &color, Point const &start_pos):
+Ghost("pink", start_pos)
+{}
+
+
+Point Pinky::get_scatter(const Point &pos_pacman)
+{
+return Point{0,21};
+}
+
+
+Point Pinky::get_pos()
+{
+return Point{pos.x, pos.y};
+}
+ 
+void Pinky::set_pos( Point &new_pos)
+{
+Ghost::set_pos(new_pos);
+}
+
+
+
+string Pinky::get_color() const
+{
+return "pink";
+}
+Point Pinky::get_chase(const Point &pos_pacman, const Point &dir_pacman) //skriv om allt typ 
+{
+  Point target = pos_pacman;
+  if(dir_pacman.x == 0 && dir_pacman.y == -1)
+ {
+  target.y = (target.y - 2);
+ } 
+  else if(dir_pacman.x == 0 && dir_pacman.y == 1)
+  {
+  target.y = (target.y + 2);
+
+}
+  else if(dir_pacman.x == -1 && dir_pacman.y == 0)
+  {
+    target.x = (target.x -2 );
+
+  }
+  else if(dir_pacman.x == 1 && dir_pacman.y == 0);
+  {
+    target.x = (target.x -2);
+
+
+  }
+  return target;
+}
+
+//blinky 
+Blinky::Blinky(std::string const &color, Point const &start_pos) 
+      : Ghost("red", start_pos)
+      {}
+
+void Blinky::set_pos(Point &new_pos) {
+  set_pos(new_pos);
+}
+
+Point Blinky::get_scatter(const Point &pos_pacman) {
+  if (angry == true)
+  {
+    return Point{pos_pacman.x, pos_pacman.y}; // stämmer?
+  } else
+  {
+    return Point{6, 6};
+  }
+}
+
+Point Blinky::get_chase(const Point &pos_pacman, const Point &dir_pacman) {
+  return Point{pos_pacman.x, pos_pacman.y};
+}
+
+Point Blinky::get_pos() {
+  return pos;
+}
+
+std::string Blinky::get_color()const
+{
+  return "pink";
+}
+
+bool Blinky::get_angry(){
+  return angry;
+}
+
+void Blinky::set_angry(bool state) {
+  angry = state;
+}
+
+
+